使用Git进行多个仓库项目管理

16

Plone项目由192个不同的仓库组成:https://github.com/plone/

在开发过程中,有时需要修改2个、4个或10个不同的仓库来修复错误或实现功能。如果所有这些仓库可以一起分支并合并(例如,包含对repo1repo2repo3进行提交的关闭issueX的拉取请求),那将是很好的。

发布需要将整套仓库一起分支和标记。

在git之前,发布是通过列出构成发布的所有模块的svn修订号的文件来定义的。Git是否为我们提供了更简化的工作方式?

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

  

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

http://progit.org/book/ch6-6.html#superprojects “Git /子模块和超级项目”似乎证实了这一点,但仍然模糊不清(没有涉及标签或分支)。 http://en.wikibooks.org/wiki/Git/Submodules_and_Superprojects

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

  

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

http://kitenet.net/~joey/code/mr/ (我担心这将导致192个不同的分支具有相同的名称,而不是连接所有仓库的1个分支。)

这个问题似乎相关:有人真正使用git超级/子项目吗?一个答案指出:

我们的项目(bitweaver,内容管理系统)是一个高度模块化的系统,几乎有160个代码库- http://github.com/bitweaver/。这听起来很像我们的情况。它引用了子模块的“严重限制”,并推荐使用mercurial。看起来像mr可以帮助处理这些问题(“对超级仓库中的所有目录执行git命令”)。


1
即使这是一个非常有趣的讨论,最近已经在Plone邮件列表上进行了(在http://plone.org/support/forums上搜索“git”),但不幸的是,您的问题并不是一个真正的问题。因此,请参与适当的邮件列表讨论。 - Giacomo Spettoli
我正在参与那里的讨论。你为什么认为这个问题不是真实的呢?你觉得在多仓库项目中使用git没有一般的方法吗? - Jean Jordaan
不要误解我的意思,我的观点并不是关于问题的内容。我的观点是,“你应该只提出基于实际问题的实用、可回答的问题。冗长、开放式的问题会降低我们网站的实用性,并将其他问题挤出首页”(http://stackoverflow.com/faq#dontask)。 - Giacomo Spettoli
3
我认为这是一个非常合理的问题:Jean 寻求来自 Plone 社区以外的人们对于如何在大型分段代码库中使用 Git 的最佳实践建议。 - Jon Stahl
2
数字证明我是错的。请忘记我的反对,继续进行。 - Giacomo Spettoli
2个回答

0

我会在“all”仓库中使用Git子模块。此外,如果您发现需要跨多个仓库工作,可以考虑使用“git slave”。这可以节省大量的精力。


2
Wichert Akkerman在邮件列表中回复说:“(a) [子模块] 在我的经验中很难使用,而且文档非常不完善。我不认为自己是一个完全的白痴,但我从未能够在研究所有现有文档后更新现有子模块以指向一个新的提交。这将是我们许多提交者无法接受的。 (b) 由于设计上子模块指向单个提交而不是分支,这意味着它们不太适合拉取持续更新的代码。这可能会在将来的git版本中得到修复,但这对我们现在没有帮助。” - Jean Jordaan
它们并不那么糟糕。我每天都使用它们,没有任何问题。需要帮助时随时联系我。无论你使用什么工具,库的版本控制始终是一个非常棘手的问题。 - Adam Dymitruk
@JeanJordaan 没有办法在不编辑文件的情况下将其更新到新版本。要将子模块更新到新版本,只需“cd”到其目录,然后只需git checkout ...。此外,将子模块指向提交而不是分支是一个好主意,因为分支可能会更改 - “今天我检查了这个项目,它突然崩溃了,但自三个月以来我没有更改任何内容。可能这个子模块正在引用分支,但我不知道我们最后测试过哪个修订版,之后我们就停止了开发。” - MBO

0

зңӢиө·жқҘеҫҲжңүи¶ЈгҖӮAndroidдҪҝз”ЁrepoпјҢbitweaverдҪҝз”ЁsupergitпјҢmrеҗ¬иө·жқҘд№ҹеҫҲзұ»дјјгҖӮ - Jean Jordaan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接