每个Eclipse项目是否需要多个Git仓库或只需要一个Git仓库?

44

我正在从SVN切换到Git。在SVN中,我有多个Eclipse项目存储在一个仓库中,便于浏览项目。我本来想每个Eclipse项目使用一个Git仓库,但EGit建议采用其他方式。

EGit指南建议将多个项目放入单个Git仓库中。

类似的问题(如这个)建议每个项目都使用一个仓库。

哪种方法是最佳实践,人们又是如何实现的呢?

5个回答

46

这取决于这些项目之间的关系有多密切。请问自己以下几个问题:

  • 它们是否总是需要一起分支/标记?
  • 你要提交所有的项目吗,还是一个提交只会涉及到一个项目?
  • 构建系统是否对它们都有效,还是在某个地方存在边界?

如果将它们放在一个仓库中,则上述部分内容将更容易处理。您只需要在一个存储库中执行分支/标记/存储/提交等操作,而不是为每个存储库单独执行它们。

但是,如果您需要为每个项目拥有独立的版本发布周期,那么必须将每个项目放在独立的存储库中。

请注意,您始终可以在以后拆分存储库,或者将多个存储库合并成一个而不会丢失历史记录。

相比较而言,合并仓库比拆分仓库更难一些,因此我建议先选择一个存储库,看看情况如何再说。


你能否提供有关拆分和合并的链接(或至少术语)的提示?例如,通过合并,我想您可能是指子模块(或替代方案),但还有其他可能吗?关于拆分,我以前没有听说过,所以我非常好奇。 - Marcin Koziński
4
我的意思是,通过一次转换,例如使用 git filter-branch --subdirectory-filter,将一个存储库拆分成多个部分。而通过使用多个存储库并创建一个具有合并历史的新存储库(同样是一次性转换),例如使用 stitch-repo脚本,则可以实现合并。合并更难,因为必须“编织”不同的历史记录在一起。 - robinst
1
这个答案非常有用。我想再补充一点,如果你为一个单一的“工作”做出了多个项目的决定,那么你还应该为每个项目设置不同的周期。否则,只需创建一个单一的项目。因此,请创建一个单一的项目,如果将来需要拆分它,请拆分并为每个项目创建新的代码库。保留旧的代码库以进行存档。保持简单,继续前进。 - agelbess

17

我有多个项目(Eclipse 项目),已经尝试了不同的方法,以找出在实际日常开发中工作最好的方法。以下是我发现的结果,我认为如果其他人跟踪并客观地分析结果,他们也会得出相同的结论。

简而言之,应用以下规则将获得最佳结果:

  1. 为每个项目组建立单独的存储库。
  2. 每个项目组由一组紧密相连的项目组成,应一起管理,并且不能轻松地从彼此解耦。
  3. 项目组可以包含单个项目。
  4. 应检查包含多个项目的项目组,以确定其是否可以解耦为较小的项目组,这些项目组仍然包含彼此紧密相连的项目,应一起管理,并且不能轻松地从彼此解耦。

以下准则更详细地解释了确定哪些项目应放在同一存储库中的过程:

  1. 如果一个项目与任何其他项目不紧密相连(例如,可以打开该项目,而不必打开其他项目,并且没有其他项目依赖于打开项目时打开它),那么您一定要将其放入自己的存储库中,原因请参见上面的答案。

  2. 如果一个项目依赖于其他项目或其他项目依赖于该项目,则取决于它们之间的连接程度,它们如何打包在一起以及它们是否可以轻松地从彼此解耦。

A) 例如,包含 Junit 测试类以测试主项目类的测试项目是两个非常紧密相连的项目,可以轻松地打包在一起,不能轻松地从彼此解耦。这些项目应根据下面部分 C 中的原因放置在同一存储库中。

B) 如果一个项目依赖于另一个项目提供某种共享资源,那么它实际上取决于它们如何一起管理以及如何轻松地解耦。例如,如果有多个项目依赖共享资源项目,则应将其放在自己的存储库中,因为与共享源代码项目的更改会影响其他不相关项目。在这种情况下,应该将共享资源项目与依赖项目解耦,而不是直接连接到依赖项目。(例如,最好创建版本化的归档文件 [名称为“projectName”.1.0.1.0.jar之类的Jar文件],并在每个项目中包含副本,而不是通过将项目链接在一起共享资源。)
C) 如果多个项目互相连接但不能轻松解耦,那么这取决于它们之间的联系有多紧密。
I)如果将项目放入一个存储库中,则每次提交时,存储库中的项目都将保持同步,如果项目之间联系紧密,则可以节省时间。但是,这也会创建上面问题中提到的问题。
II)如果将项目放入单独的存储库中,则必须确保它们的提交与彼此同步,并确保包含某种机制来指示哪些提交属于跨项目的相同同步点(例如,在跨项目完成一组提交时,为每个项目的提交注释中包含相同的同步点号码)。
III)因此,在这种情况下,将这些项目放在单个存储库中几乎总是更好的选择,以减少人力资源在同步提交方面的开销,并避免人为错误,如果需要备份提交。仅当只有一个项目经常更改且其他相关项目很少更改时,可能最好将它们放在单独的存储库中。

17

我每个项目使用一个仓库。

一些论据:

  • 当你发现自己在多个提交后搞砸了一些东西时,如果只有一个项目,修复起来会更容易。想想看,你已经在另外两个项目上提交了代码,并且现在你需要修复第三个项目的提交。

  • 正如Fedir所说,你的历史和记录更加清晰。它只显示该项目的提交记录。

  • 它可以更好地适应我的开发工作流程。生产环境中有一个主分支,开发环境中有一个develop分支,我创建分支来实现功能(你可以在这里阅读更多内容:http://blog.avirtualhome.com/development-workflow-using-git/

  • 当你在团队中工作并“共享”git repo时,团队成员真的需要所有其他项目吗?

这只是一些想法,但归根结底:做适合你的事情。


8

我认为这个问题与我在这里回答的问题有关。基本上,Git通过其本质支持项目/存储库的非常细粒度结构。我阅读并且被告知每个项目一个存储库几乎总是最佳实践。通过保持项目分开,你不会失去任何东西,并获得像其他人描述的那样很多好处。


3

如果您创建多个Git存储库,可能会更加高效。

如果您创建分支,只有项目文件会被分支,而不是所有项目。对于小型项目,分析和提交将更快。操作所需的时间更少。

日志也将更清晰,如果您有多个Git存储库,则可以进行更精细的配置。


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