【问题标题】:Getting git to follow symlinks (again)让 git 遵循符号链接(再次)
【发布时间】:2009-09-30 21:32:25
【问题描述】:

已经有人问过如何让 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。

【问题讨论】:

标签: git


【解决方案1】:

我很确定没有办法。

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

去年年底,said on the git mailing list 回答了基本相同的问题。

【讨论】:

  • 是的,很遗憾。我知道在某些情况下关注链接会非常好。那里的一个答复中建议了一种方法 - 将外部存储库文件符号链接到存储库中,并且可能仍然在存储库中包含指向它们的符号链接。希望你能找到一种方法来做你需要做的事!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        我有几个不同的存储库,它们都使用一组通用的文件——通常是 .h 文件。我只希望所有公共文件的一个版本存在,这是链接的常见用例。我需要 git 将这些文件的通用内容保存在需要这些文件的每个存储库目录中。这似乎只适用于硬链接,但它们并不是那么好,因为当我在一个存储库目录中签出早期版本时,该目录会获取公共文件的实际副本,并且不再与其他存储库共享。所以我有一个shell脚本来恢复硬链接,但这很蹩脚。 Git 需要一个选项来以与 gcc 相同的方式处理软链接:作为它指向的内容的副本,而不仅仅是一个指针。也许 git 可以有一个命令来获取软链接列表,然后将它们视为它们指向的任何内容的副本。

        【讨论】:

          猜你喜欢
          • 2010-09-10
          • 2011-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-20
          • 2015-11-06
          • 2012-09-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多