使用git进行包含许多repos的项目

Jea*_*aan 16 git plone github

Plone项目包含192个不同的回购:https://github.com/plone/

在开发过程中,有时需要触摸2或4或10个不同的回购来修复错误或实现功能.这将是巨大的,如果这一切都可以一起分支和合并在一起(如拉要求关闭issueX含有承诺repo1,repo2repo3).

版本要求将整个回购集合分支并标记在一起.

Pre-git,一个版本是由一个文件定义的,该文件列出了构成该版本的所有模块的svn版本号.git是否为我们提供了更简化的工作方式?

乍一看,似乎"超级项目"可能适用:

您可以更具体地定义项目与超级项目中的标记和分支之间的关系

http://progit.org/book/ch6-6.html#superprojects"Git /Submodules and Superprojects"似乎证实了这一点,但仍然含糊不清(不解决标签或分支).http://en.wikibooks.org/wiki/Git/Submodules_and_Superprojects

另一个听起来相关的工具是Joey Hess mr:

mr(1)命令可以在一组存储库上检出,更新或执行其他操作,就好像它们是一个组合存储库一样.

http://kitenet.net/~joey/code/mr/(我担心这会导致192个不同的分支碰巧具有相同的名称,而不是将所有回购链接在一起的1个分支.)

这个问题看起来很相关:有人真的使用git super/subprojects吗?一个答案说明:

我们的项目(bitweaver,一个内容管理系统)是一个高度模块化的系统,有近160个存储库 - http:// github.com/bitweaver/".

这听起来像我们的情况.它引用了子模块的"严重限制",并建议使用mercurial.这听起来mr可以帮助处理那些("对超级仓库中的所有目录执行git命令").

Ada*_*ruk 0

我会在“所有”存储库中使用 git 子模块。另外,如果您发现工作涉及多个存储库,请考虑“git Slave”。这样可以省很多力气。

  • Wichert Akkerman 在邮件列表中回应:“根据我的经验,[子模块] 很难使用,而且文档很少。我不认为自己是个彻底的白痴,但我从未能够更新在研究了所有现有文档后,现有子模块指向更新的提交。这对于我们的许多提交者来说将是一个破坏者。(b) 按设计,子模块指向单个提交而不是分支,这意味着它们不是很有用引入不断更新的代码。这可能会在未来的 git 版本中得到修复,但这对我们现在没有帮助。” (2认同)