Git使用子模块分发工作流程

时间:2011-12-16 17:00:44

标签: git workflow distributed git-submodules

假设我有一个包含N个子模块的超级项目。我按照本指南创建的:Git Submodule Tutorial

所以我有所有子模块的公共存储库以及超级项目的公共存储库,所有这些都在远程主机中:machine1/path/to/public/repos.git。这些我会打电话给我的公共回购。

现在,用户X从我的公共仓库克隆超级项目并将所有内容提取到他的私人仓库。其本地.git/config.gitmodules中的所有引用都指向我的公开回购。

我希望用户X拥有自己的公共存储库,以便我们可以使用此处描述的分布式工作流:Git Distributed Workflows

这样,用户X和我可以将我们的本地更改推送到我们自己的公共回购,然后从彼此的公共回购中提取更改。我想避免我们两个人不得不推进同一个公共回购。

由于X的本地回购中的.gitmodules指向我的公共回购,X需要更改ulr,因此他们指向他的公共回购。请记住.gitmodules是提交的,所以如果X提交& amp;我们就会遇到冲突。在修改它以引用他的公共回购之后发布.gitmodules然后我从他的公共回购中提取变更(我的本地.gitmodules将引用他的公共回购而不是我的那不是期望的结果。)

那么你认为什么是最好的选择:

  • 从存储库的树中删除.gitmodules并将其添加到.gitignore,以便不再对其进行跟踪。
  • 保持.gitmodules不受影响。我不确定为什么,但这对我来说似乎不是一个好主意。
  • 使用git --update-index assume-unchanged .gitmodules

如果运行.gitmodules或丢弃所有未跟踪的文件,则任何这些选项都会导致git clean被清除。

如何保持X .gitmodules中的更改永久引用他自己的公共回购,而不必担心意外擦除配置或拉出不需要的更改?

1 个答案:

答案 0 :(得分:1)

您可以通过向您的submoules添加其他遥控器来实现此目的。此外,当您添加--init选项时,来自包含repo的git子模块远程URL仅会同步。没有什么能阻止你做一个git子模块添加,更新,初始化然后更改该远程的repo中的url。除非添加--init opition。

,否则后续子模块更新不会更改该URL