无法硬链接gitconfig文件

我正在尝试创build一个git存储库来存储我所有的dotfiles和configuration文件。 我的想法是简单地创build我关心的所有文件的硬链接,并将这些链接存储在他们自己的目录中,我可以把它们变成一个存储库。

我用〜/ .gitconfig文件打了一些麻烦。 似乎每当我运行'git config'命令时,我创build的链接不再指向正确的位置,例如存储库中的文件不再正确更新。

这里是一个使用shell和交互式ruby来确定文件链接状态的例子。

# Create the link $ ln .gitconfig .conf_files/gitconfig # Create the link # The files are in fact linked [1] pry(main)> File.identical?('.gitconfig', '.conf_files/gitconfig') => true # Update the gitconfig file by running a 'git config' command $ git config --global alias.last 'log -1 HEAD' # The files are no longer linked. [2] pry(main)> File.identical?('.gitconfig', '.conf_files/gitconfig') => false 

我认为这与git编写.gitconfig文件的方式有关。 有没有人知道为什么会发生这种情况,或有任何创意的解决方法吗?

Solutions Collecting From Web of "无法硬链接gitconfig文件"

http://www.xxeo.com/archives/2010/02/16/dotfiles-in-git-finally-did-it.html的评论中试用Eli Barzilay的解决方案:

所以我终于找到了一个最好的解决方案:将repo放在一个子目录中,而不是符号链接,添加一个“core.worktree”配置选项作为你的主目录。 现在,当你在你的home目录中时,你不在git仓库中(所以第一个问题已经消失),并且不需要像第二种情况那样处理脆弱的符号链接。 排除不需要版本化的路径(例如,“.git / info / exclude”技巧中的“*”),但是这并不新鲜。

这是完全正常的,实际上是覆盖配置文件的推荐方式。 Git创建一个临时文件,写出配置,然后将新文件移到旧文件上。 这样,如果Git被中断,你不会得到一个不完整的配置文件(数据丢失)。

您可以随时编写一个脚本来将您的配置文件复制或链接到中央存储库。

结帐这个答案,也许可能是有帮助的:

https://stackoverflow.com/a/3731139/1431696

在此期间,你有没有考虑做相反的链接? 创建充分的配置文件等资源库,然后在实际使用您的文件的地方,创建一个硬链接到存储库中的“真正的”文件。

感谢Dietrich Epp的回答和建议,我决定从另一个角度来处理这个问题,在我的文件系统的根目录下创建一个仓库,并使用.gitignore来跟踪我感兴趣的文件。

我的.gitignore文件现在看起来像这样:

 /* !/etc/ /etc/* # etc files !/etc/rc.conf !/etc/asound.conf !/etc/mercurial/ !/home/ !/home/matt/ /home/matt/* # Home files !/home/matt/.xinitrc !/home/matt/.gitconfig !/home/matt/.bashrc # Vim files !/home/matt/.vimrc !/home/matt/.vim/ .netrwhist 

除了不必单独复制这些文件并将它们保存在两个不同的位置之外,我还可以轻松地还原所做的更改,而无需手动复制文件。

谢谢你的帮助!