让git重新跟随符号链接

23

有人已经问过如何让git跟随符号链接。有答案适用于符号链接的目录,但不适用于符号链接的文件。这也是一年前的事了。

问题:如何让git跟随符号链接并添加它所指向的文件?

这是旧问题:如何让git跟随符号链接?还有一个关于git通常如何处理符号链接的问题 git如何处理符号链接?我正在寻找一种改变这种行为的方法。

如果你在意:我在unix上运行git 1.5.4.3版本,在mac上运行git 1.6.0版本。


对我来说,按照 https://dev59.com/hXVD5IYBdhLWcg3wGXpI 中所解释的使用 mount 是一个非常有用的解决方案。 - meolic
5个回答

24
我很确定没有办法。此外,这听起来像是一种不安全的、未定义的行为——当您在文件版本之间移动并需要写入文件时,它应该做什么?特别是,如果您检出了一个添加之前的修订版本,您真的希望它删除存储库外文件的内容吗?如果您回到现在并重新创建文件,或者符号链接本身被修改,会发生什么——git是否也要跟踪符号链接本身?去年晚些时候,在类似的问题上,在git邮件列表中有人提到了这些事情。

2
是的,不幸的是。我知道在某些情况下遵循链接会非常好。其中一篇回复中提出了一种方法- 将存储库外部的文件符号链接到存储库中,可能仍然包括从存储库内部链接到它们的符号链接。希望你找到自己所需的方法! - Cascabel

13

您可以使用硬链接代替软链接(也称符号链接)。Git 将会看到链接文件的内容。不过缺点是,当其他人检出时,该文件将作为普通文件创建在检出目录中,因为 Git 无法理解它是一个链接。


6
如何使用硬链接,这样git就不知道它是一个链接文件(对吗?)

2
使用硬链接的问题在于,如果有东西写入到另一个位置并替换了文件,而不仅仅是对其进行更改,则目标文件在文件系统上具有新的inode,并且硬链接不再指向它,因此文件将不同步。

0

我有几个不同的代码库,它们都使用一组共同的文件,通常是.h文件。我只希望所有共同文件存在一个版本,这是链接的常见用例。我需要git在每个需要这些文件的代码库目录中保留这些文件的公共内容。这似乎只能使用硬链接才能实现,但它们并不太好,因为当我在一个代码库目录中检出早期版本时,该目录会得到共同文件的实际副本,不再与其他代码库共享。因此,我写了一个shell脚本来恢复硬链接,但这很烦人。Git需要一个选项来像gcc一样处理符号链接:作为指向其所指的内容的副本,而不仅仅是一个指针。也许git可以有一个命令,它接受一系列符号链接,然后将它们视为它们所指向的内容的副本。


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