带有子模块的Git分布式工作流

带有子模块的Git分布式工作流,git,workflow,distributed,git-submodules,Git,Workflow,Distributed,Git Submodules,假设我有一个包含N个子模块的超级项目。我根据本指南创建的: 因此,我拥有所有子模块的公共存储库以及超级项目的公共repo,所有这些都在远程主机中:machine1/path/to/public/repos.git。这些我将称之为我的公开回购 现在,用户X从我的公共回购中克隆了超级项目,并将所有内容拉到他的私人回购中。他的本地.git/config和.gitmodules中的所有引用都指向我的公共回购 我希望用户X拥有自己的公共存储库,以便我们可以使用此处描述的分布式工作流: 通过这种方式,用户X

假设我有一个包含N个子模块的超级项目。我根据本指南创建的:

因此,我拥有所有子模块的公共存储库以及超级项目的公共repo,所有这些都在远程主机中:
machine1/path/to/public/repos.git
。这些我将称之为我的公开回购

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

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

通过这种方式,用户X和我可以将本地更改推送到我们自己的公共回购,然后从彼此的公共回购中提取更改。我想避免我们两个都不得不推动相同的公共回购协议

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

那么,您认为什么是最佳选择:

  • 从存储库的树中删除
    .gitmodules
    ,然后将其添加到
    .gitignore
    中,这样就不会再跟踪它了
  • 保持
    .gitmodules
    未老化。我不知道为什么,但在我看来这是个坏主意
  • 使用
    git——更新索引假定不变。gitmodules
这些选项中的任何一个都有一个缺点,即如果运行
git clean
或放弃所有未跟踪的文件,
.gitmodules
将被清除


我如何保持X的
.gitmodules
中的更改,以永久引用其自己的公共repo,而不必担心意外删除配置或拉取不需要的更改?

您可以通过向子模块添加额外的遥控器来实现这一点。此外,只有在添加--init选项时,包含repo的git子模块远程URL才会同步。没有什么能阻止您执行git子模块添加、更新、初始化,然后更改远程应用程序的repo中的url。后续子模块更新不会更改该url,除非您添加--init选项。

您可以通过向子模块添加其他遥控器来实现这一点。此外,只有在添加--init选项时,包含repo的git子模块远程URL才会同步。没有什么能阻止您执行git子模块添加、更新、初始化,然后更改远程应用程序的repo中的url。后续子模块更新不会更改该url,除非您添加--init选项。

很抱歉,在我第一次阅读时,我花了这么长时间才接受这个答案,我不明白,现在看起来很明显。很抱歉,在我第一次阅读时,我花了这么长时间才接受这个答案,我不明白,现在看起来很明显。