首页 > 解决方案 > 如何在 git 中更新符号链接

问题描述

我需要为从一个存储库到另一个存储库的文件创建符号链接/引用。

我找到了解决方案git: symlink/reference to a file in an external repository,这部分对我有用。但这个解决方案的问题是,虽然创建了链接,但它似乎绑定到文件的一次提交。文件更新、提交和推送后,我看不到其他存储库中反映的更改。

有人知道如何在 git 中创建指向另一个存储库中文件的符号链接的另一种方式,这将像 linux 中的符号链接一样工作吗?

标签: git

解决方案


这似乎是对子模块如何工作的误解,而不是符号链接的问题。我强烈建议您阅读Pro Git 的子模块章节。

为了解释的目的,让我们定义一些术语:

  • A将是包含符号链接目标的存储库(链接本身)。
  • B将是包含该符号链接源的存储库。
  • C将是A引用中的子模块B

所以你做了一个git submodule add Bfrom Acreated C,然后做了一些类似的事情,ln -s B/file file这样你就有一个符号链接Ainfile指向fileinside C。一切正常。

如上所述,问题似乎是您随后更新fileB推送该更改,但是在A符号链接中仍显示file. 问题是它C只是一个克隆B:就像存储库的任何其他克隆一样,当您更改克隆的内容时,磁盘上的内容不会更改(例如:如果您从 github 克隆了一个 repo,然后有人更新了该 repo在 github 上,您本地计算机上的文件没有更改)。解决方案是更新CA:进入C,从中提取您想要的更改B,然后进入A并将更改提交到子模块。

有些人确实觉得这个过程很繁重。如果您是这种情况,那么您链接到的其他答案确实列出了许多其他通过脚本执行您希望执行的操作的方法(或者如果您愿意,您甚至可以编写子模块更新过程的脚本)。


推荐阅读