如何让 git 将符号链接视为文件?

如何让 git 将符号链接视为文件?

我有一个非常具体的用例。当我们签入文件时,我们使用的 DesignSync 版本控制系统会用远程存储库的符号链接替换文件。

由于我在签入之前在本地使用 git 对更改进行版本控制,因此我不希望“用符号链接替换文件" 或反之亦然被视为文件中的更改 - 只要文件/符号链接的内容相同。

有什么办法可以实现这一点吗?

答案1

我不认为这里有一个“美丽”的前进方向,除了摆脱符号链接方法之外(我不知道这是否是 DesignSync 的一个功能。您可能需要希望达索能够看到其方式中的错误。)只是尝试使用两种不同的代码版本控制工具,采用相互矛盾的方法,从逻辑上讲,我似乎不可能完美地协调这两种工具。

需要对实际文件使用 git – 否则,当您更改内容时它不会看到任何更改。你需要尊重 DesignSyncs 符号链接。

我看到了三种方法,但我尝试过并可以排除第一种:

  • 使用 .gitattributes,您可以有一个“污点”和一个“干净”过滤器,在提交和签出时用符号链接到的文件替换符号链接,反之亦然。不起作用,因为符号链接在 .gitattributes 中没有得到特殊处理
  • 您可以编写一个预提交脚本,将所有符号链接替换为从 DesignSync 管理的“上游”复制的原始文件。
  • 您可以编写一个 FUSE 文件系统,为您提供 DesignSync 存储库中的第二个“视图”,其中符号链接被符号链接到的实际文件替换。您可以在 .git 存储库目录中绑定挂载并以这种方式管理 git 中的文件。

这两种方法都不会是无痛的。老实说,你必须选择一次使用的源控制系统;你想做的事只会让我感到不安。

老实说,我认为最简单的方法可能是不做任何特殊的事情 - 保持本地 git 存储库不变,并在您想将更改的文件签入 DesignSync 时进行单独的签出。 Git 可以将您的存储库签入任意位置!每当您需要将 DesignSync 中的更改拉入您的 git 存储库时,老实说,我都会cp -L(“跟随”符号链接)将新的 DesignSync 检出到您的 git 存储库中。

相关内容