符号链接dotfiles

21

我在尝试创建符号链接dotfiles时遇到了问题。 我有一个文件夹位于我的主目录~/dotfiles中,该文件夹已经同步到了Github存储库。我正在尝试将位于~/dotfiles/.vimrc中的.vimrc文件创建为符号链接,并将其放置在~/.vimrc位置。 为此,我输入以下命令:

ln -s ~/dotfiles/.vimrc ~/.vimrc

但是当我运行它时,它会显示

ln: /Users/me/.vimrc: File exists

我做错了什么?


5
专业提示:在新版本的 Vim 中,你还可以将 vimrc 存储在 ~/vim 目录中以便更轻松地存储。这样的路径为:~/.vim/vimrc。请参阅命令 :h vimrc - Peter Rincker
4个回答

25

这个错误信息的意思是你已经在 ~/.vimrc 路径下有一个文件,ln 命令不愿意覆盖它。要么删除 ~/.vimrc 文件后再次运行 ln 命令,要么通过传递 -f 选项让 ln 命令帮你删除它:

ln -s -f ~/dotfiles/.vimrc ~/.vimrc

10

有一种更好的解决方案来管理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

此时,您的所有配置文件都正在被跟踪,您可以轻松使用新注册的dotfiles命令来管理存储库,例如:
# 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

我也使用这种方法来同步和存储我的 dotfiles,可以在我的 dotfiles 仓库中查看 see my dotfiles repository,并且可以在 Storing dotfiles with Git 中阅读我关于管理多个设备的文章。

3
如何递归地为目录中的所有点文件创建符号链接
  1. Have a dotfiles directory that is structured as to how they should be structured at $HOME

    dotfiles_home=~/dotfiles/home  # for example
    
  2. 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。

感谢

感谢这个这个


0
使用GNU Stow来为你的dotfiles创建符号链接。

根据目前的写法,你的回答不够清晰。请编辑以添加更多细节,以帮助其他人理解如何解答所提出的问题。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接