带有子模块的Git分布式工作流
假设我有一个包含N个子模块的超级项目。我根据本指南创建的: 因此,我拥有所有子模块的公共存储库以及超级项目的公共repo,所有这些都在远程主机中:带有子模块的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
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选项。很抱歉,在我第一次阅读时,我花了这么长时间才接受这个答案,我不明白,现在看起来很明显。很抱歉,在我第一次阅读时,我花了这么长时间才接受这个答案,我不明白,现在看起来很明显。