Christopher在列举每个存储库一个项目的模型的缺点方面做得很好。我想讨论您考虑采用多存储库方法的一些原因。在我工作过的许多环境中,采用多存储库方法是一种合理的解决方案,但是要决定要拥有多少存储库以及在何处进行削减并不是一件容易的事。
在目前的职位上,我将拥有十多年历史的庞然大物单一存储库CVS存储库迁移到了许多git存储库中。自从最初的决定以来,存储库的数量已经增加(通过其他团队的行动),以至于我怀疑我们的存储量已经超过了最佳状态。一些新员工建议合并存储库,但我对此表示反对。Wayland项目也有类似的经验。在最近的一次演讲中,我看到他们曾经有200多个git存储库,而领导对此表示了歉意。查看他们的网站,我现在看到他们是5岁,这似乎很合理。请务必注意,加入和拆分存储库是一项可管理的任务,并且可以进行实验(在合理的范围内)。
那么什么时候需要多个存储库?
- 单个存储库太大而无法高效运行。
- 您的存储库松散耦合或分离。
- 开发人员通常只需要一个或一小部分存储库即可进行开发。
- 您通常希望独立开发存储库,并且只需要偶尔进行同步即可。
- 您想鼓励更多的模块化。
- 不同的团队在不同的存储库上工作。
如果第1点成立,则第2点和第3点才有意义。通过拆分存储库,我显着减少了异地同事的延迟,减少了磁盘消耗并改善了网络流量。
4和5更微妙。当您将客户端和服务器的存储库分开时,这使得协调客户端和服务器代码之间的更改的成本更高。这可能是积极的,因为这鼓励了两者之间的分离接口。
即使存在多存储库项目的不利影响,也还是要进行许多可观的工作-想到Wayland和Boost。我认为尚未就最佳做法达成共识,需要做出一些判断。用于多个存储库(git-subtree,git-submodule等)的工具仍在开发和试验中。我的建议是尝试并务实。