让git遵循符号链接(再次)

时间:2009-09-30 21:32:26

标签: git

有人已经问过如何让git遵循符号链接。对符号链接的目录有一个答案,但对于符号链接的文件则没有。这也是一年多以前的事了。

问题:如何让git遵循符号链接并添加它引用的文件?

以下是旧问题:How can I get git to follow symlinks?。关于git通常做什么How does git handle symbolic links?还有一个问题。我正在改变这种行为。

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

5 个答案:

答案 0 :(得分:23)

我很确定没办法。

此外,它听起来像一种不安全的,未定义的行为 - 当你在文件的版本之间移动并且它需要写入它时应该怎么做?特别是,如果您在添加修订版之前签出修订版,您真的希望它删除存储库外的文件内容吗?如果你回来呈现并重新创建文件,或者符号链接本身被修改会发生什么 - git是否也应该跟踪符号链接本身?

这些方面的事情去年年底said on the git mailing list回应了基本相同的问题。

答案 1 :(得分:12)

您可以使用硬链接而不是软链接(a.k.a。符号链接)。然后Git将看到链接文件的内容。缺点是当有人签出时,文件在签出目录中被创建为普通文件,因为Git不将其理解为链接。

答案 2 :(得分:6)

如何使用硬链接,那么git不知道它是一个链接文件(是吗?)

答案 3 :(得分:2)

使用硬链接的麻烦在于,如果写入其他位置的内容替换了文件,而不是仅仅对其进行更改,那么目标文件在文件系统上有一个新的inode,而硬链接不再指向它,所以文件不同步。

答案 4 :(得分:0)

我有几个不同的存储库,它们都使用一组通用的文件-通常是.h文件。我只希望存在所有通用文件的一个版本,这是链接的常见用例。我需要git将这些文件的通用内容保留在需要这些文件的每个存储库目录中。这似乎仅适用于硬链接,但它们并不是很好,因为当我在一个存储库目录中签出较早版本时,该目录将获得公用文件的实际副本,并且不再与其他存储库共享。所以我有一个Shell脚本来还原硬链接,但这真是la脚。 Git需要一个选项来像gcc一样对待软链接:作为其指向的副本,而不仅仅是指针。也许git可以使用一个命令,该命令获取一个软链接列表,然后将它们视为它们所指向的内容的副本。