我在尝试创建符号链接dotfiles时遇到了问题。 我有一个文件夹位于我的主目录~/dotfiles中,该文件夹已经同步到了Github存储库。我正在尝试将位于~/dotfiles/.vimrc中的.vimrc文件创建为符号链接,并将其放置在~/.vimrc位置。 为此,我输入以下命令:
ln -s ~/dotfiles/.vimrc ~/.vimrc
但是当我运行它时,它会显示
ln: /Users/me/.vimrc: File exists
我做错了什么?
我在尝试创建符号链接dotfiles时遇到了问题。 我有一个文件夹位于我的主目录~/dotfiles中,该文件夹已经同步到了Github存储库。我正在尝试将位于~/dotfiles/.vimrc中的.vimrc文件创建为符号链接,并将其放置在~/.vimrc位置。 为此,我输入以下命令:
ln -s ~/dotfiles/.vimrc ~/.vimrc
但是当我运行它时,它会显示
ln: /Users/me/.vimrc: File exists
我做错了什么?
这个错误信息的意思是你已经在 ~/.vimrc
路径下有一个文件,ln
命令不愿意覆盖它。要么删除 ~/.vimrc
文件后再次运行 ln
命令,要么通过传递 -f
选项让 ln
命令帮你删除它:
ln -s -f ~/dotfiles/.vimrc ~/.vimrc
有一种更好的解决方案来管理dotfiles,而不需要使用符号链接或任何其他工具,只需使用--bare
初始化的git仓库。
裸仓库在某种程度上是特殊的,它们省略了工作目录,因此您可以在任何地方创建您的仓库,并设置--work-tree=$HOME
,这样您就不需要做任何工作来维护它。
方法
首先要做的是创建一个裸仓库。
git init --bare $HOME/.dotfiles
--git-dir=$HOME/.dotfiles/
和--work-tree=$HOME
,最好是创建一个别名。alias dotfiles='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME
# to check the status of the tracked and untracked files
dotfiles status
# to add a file
dotfiles commit .tmux.conf -m ".tmux.conf added"
# push new files or changes to the github
dotfiles push origin main
Have a dotfiles directory that is structured as to how they should be structured at $HOME
dotfiles_home=~/dotfiles/home # for example
cp -rsf "$dotfiles_home"/. ~
-r
: Recursive, create the necessary directory for each file-s
: Create symlinks instead of copying-f
: Overwrite existing files (previously created symlinks, default .bashrc
, etc)/.
: Make sure cp
"copy" the contents of home
instead of the home
directory itself.和 ln
一样,如果你不想遇到麻烦或问题,请像上面的示例一样,使用绝对路径作为第一个参数。
这仅适用于 GNU cp
(在 Ubuntu 中预安装),而非POSIX cp
。检查你的 man cp
,如果需要,可以安装 GNU coreutils。
vimrc
存储在~/vim
目录中以便更轻松地存储。这样的路径为:~/.vim/vimrc
。请参阅命令:h vimrc
。 - Peter Rincker