2011-12-29 33 views
4

我有一个混帐回购协议测试和文件(zsh的配置文件),并Git和固网在Linux

ln ~/.zshrc test/zshrc 

后来我改变.zshrc文件,在混帐回购协议的zshrc文件不改变,是git不能处理硬链接?

如果是这样,我怎么可以使用git来管理这些点文件?任何建议

+1

你为什么不使用符号链接? – 2011-12-29 08:10:06

+4

当然,如果这些文件有不同的内容,那么它们就不会被硬链接在一起。有些东西打破了这个联系。它可能是混帐(当你改变分支或什么的时候)或其他的东西,我不知道。您可以使用'ls -li'来检查inode号码或两个文件,以验证它们是否被硬链接。用它来找出文件在什么时候断开链接。 – Celada 2011-12-29 08:10:37

回答

4

你不能在git仓库之外创建硬链接。你有几种选择:

  • 使~/.zshrcmy-home-git-checkout/zshrc的符号链接。
  • 在您的主目录中保留git checkout。
  • 将文件从您的git checkout复制到您的主目录,可能会在提交或结帐时自动执行。

¹呀,好吧,狡辩:你不能保持

+0

最后的解决方案应该不是“一个提交”,而是“一个更新(签出)”。在这种情况下,文件是自动复制还是硬链接并不重要。 – ZyX 2011-12-30 23:04:10

+0

@ZyX关于结帐的好处,但为什么不提交呢?如果该git存储库是您通常编辑文件的地方,那么您很少会签出。 – Gilles 2011-12-30 23:11:55

+0

git是否覆盖提交文件?如果是,为什么? – ZyX 2011-12-30 23:13:11

2

的Git总是假定他是一个文件的inode的唯一所有者。 因此,git checkout只是打破所有硬链接。

+0

它并不完全分解它,它只是不记录哪些文件共享一个inode。然而,git记录的是,这两个(至少在某个时间点)具有相同的内容并优化存储。 – 2011-12-31 05:11:05

2

尝试添加下面的脚本到/path/to/repo/.git/hooks/post-checkout(该文件必须是可执行的):

#!/bin/sh 
/bin/ln -sf /path/to/repo/zshrc $HOME/.zshrc