7

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

我的 ~/.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

4 回答 4

6

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

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

于 2012-08-02T23:52:07.930 回答
2

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

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

于 2012-08-02T22:21:09.153 回答
0

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

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

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

于 2012-08-02T22:23:04.633 回答
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

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

谢谢你们的帮助!

于 2012-08-02T23:04:57.200 回答