无法硬链接gitconfig文件

时间:2012-08-02 22:16:58

标签: linux git hardlink

我正在尝试创建一个git存储库来存储我的所有dotfiles和配置文件。我的想法是简单地创建我所关心的所有文件的硬链接,并将这些链接存储在他们自己的目录中,我可以将其转换为存储库。

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

以下是使用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文件的方式有关。有谁知道为什么会发生这种情况,或者对于解决方法有什么创意?

4 个答案:

答案 0 :(得分:6)

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

  

所以我终于找到了一个充分利用两者的解决方案:把回购   在子目录中,而不是符号链接,为其添加配置选项   “core.worktree”成为您的主目录。现在,当你在家里   目录你不是在一个git仓库(所以第一个问题已经消失),而你   不需要像第二种情况那样处理脆弱的符号链接。你还在   有一个轻微的麻烦,排除你不想要版本化的路径(例如,   “.git / info / exclude”技巧中的“*”,但这不是新的。

答案 1 :(得分:2)

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

您始终可以编写脚本来将配置文件复制或链接到中央存储库。

答案 2 :(得分:0)

查看这个答案,也许它可能会有所帮助:

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

与此同时,您是否考虑过反向链接?创建充满配置文件等的存储库,然后在实际使用文件的位置创建指向存储库中“真实”文件的硬链接。

答案 3 :(得分:0)

感谢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

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

感谢帮助人员!