44

我正在从 SVN 迁移到 Git。在 SVN 中,我在单个 SVN 存储库中有多个 Eclipse 项目,便于浏览项目。我打算让每个 Eclipse 项目都有一个 git 存储库,但 EGit 建议不这样做。

EGit指南建议将多个项目放入一个 Git 存储库。

查看诸如此类的类似问题建议每个存储库一个项目。

哪种方法是最佳实践,人们会实施什么?

4

5 回答 5

46

这取决于这些项目的密切相关程度。问自己以下问题:

  • 它们是否总是需要分支/标记在一起?
  • 您是要提交所有项目,还是提交主要只涉及一个项目?
  • 构建系统是否在所有这些上运行,或者它们在那里有边界?

如果你把它们都放在一起,上面的一些事情会更容易。您只需在一个存储库中进行分支/标记/存储/提交,而不是分别为每个存储库执行此操作。

但是,如果您需要为项目设置单独的发布周期,则有必要将每个项目放在一个独立的存储库中。

请注意,您以后可以随时拆分存储库,或者将多个存储库再次合并为一个而不会丢失历史记录。

合并比拆分要难一些,所以我会先选择一个存储库,看看它是如何进行的。

于 2012-07-18T15:08:05.373 回答
17

我每个项目使用 1 个 repo。

一些推理:

  • 当您在多次提交后发现自己搞砸了某些东西时,如果它只是一个项目,则更容易修复。试想一下,您对另外两个项目进行了提交,现在您需要修复您在第三个项目中所做的提交。

  • 正如 Fedir 所说,您的历史记录和日志要干净得多。它仅显示该项目的提交。

  • 它与我拥有的开发工作流程配合得更好。我有一个用于生产的主分支,用于开发的分支,我创建分支来实现功能(您可以在此处阅读有关它的更多信息:http: //blog.avirtualhome.com/development-workflow-using-git/ )

  • 当您在团队中工作并“共享” git 存储库时,团队成员是否真的需要所有其他项目?

只是一些想法,但归结为:做对你有用的事。

于 2012-07-18T13:27:19.453 回答
17

我有多个项目(Eclipse 项目)并尝试了不同的方法来找出在实际日常开发方面最有效的方法。这是我发现的,我认为如果大多数人跟踪结果并客观地分析结果,他们会发现同样的事情。

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

  1. 为每个项目组创建一个单独的存储库。
  2. 每个项目组由一组相互紧密联系的项目组成,这些项目应该一起管理,并且不能轻易地相互分离。
  3. 一个项目组可以包含一个项目。
  4. 应该检查一个包含多个项目的项目组,看看它的一些项目是否可以相互解耦,以便可以将其分成更小的项目组,这些项目组仍然包含彼此紧密连接的项目,应该一起管理并且不能轻易地相互分离。

以下指南更详细地解释了确定将哪些项目放入同一存储库中的过程:

  1. 如果一个项目与任何其他项目没有紧密联系(例如,该项目可以在没有打开其他项目的情况下打开,并且没有其他项目在打开时依赖于正在打开的项目),那么您绝对应该将它放在自己的存储库中由于上述答案中解释的原因。

  2. 如果一个项目依赖于其他项目或其他项目依赖于该项目,那么它归结为它们之间的确切连接程度,它们可以打包在一起的程度以及它们彼此分离的容易程度。

A)例如一个测试项目包含junit测试类来测试一个主项目的类,这是两个项目相互联系非常紧密的情况,可以很容易地打包在一起,不能很容易地相互解耦。出于下面 C 部分中解释的原因,这些项目应该放在同一个存储库中。

B)在一个项目依赖另一个项目来提供某种共享资源的情况下,这实际上归结为它们可以一起管理的程度以及它们彼此分离的容易程度。例如,如果具有共享资源的项目被许多项目依赖,那么应该将它放在自己的存储库中,因为其他不相关的项目会受到共享源代码项目更改的影响。在这种情况下,共享资源项目应该与依赖项目解耦,而不是直接连接到依赖项目。(例如,最好创建版本化的存档文件 [Jar 文件,其名称类似于“projectName”.1.0.1.0。

C)如果多个项目是相互联系的,可以很容易地一起管理,但不能很容易地相互解耦,那么这取决于它们之间的联系有多紧密。

I)如果项目被放入一个存储库,那么每次提交时项目将在存储库中保持彼此同步,如果项目紧密连接,这可以成为真正的救星。但是,这也会产生上述答案中提到的问题。

II)如果项目被放入单独的存储库中,那么您必须注意保持提交彼此同步,并确保包含某种机制来指示哪些提交属于跨项目的同一同步点(当跨项目完成一组提交时,可能类似于在每个项目的提交的注释中包含相同的同步点编号。)

III)因此,在这种情况下,最好将这些项目放在一个存储库中,以减少同步提交的人力开销,并避免在需要撤销提交时出现人为错误。将它们放在单独的存储库中可能更好的唯一情况是,只有一个项目定期更改,而其他连接的项目很少更改。

于 2013-05-15T21:01:31.263 回答
7

我认为这个问题与我在这里回答的问题有关。基本上,当涉及到项目/存储库时,Git 本质上支持非常精细的粒度结构。我已经阅读并被告知每个项目 1 个存储库几乎总是最佳实践。正如其他人所描述的那样,通过将项目分开并获得很多收益,您几乎没有损失任何东西。

于 2012-07-18T15:13:33.530 回答
2

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

如果您将创建一个分支,则只会分支项目的文件,而不是所有项目。小项目分析、提交会更快。操作将花费更少的时间。

日志也会更清晰,如果您有多个 git 存储库,您可以进行更细化的配置。

于 2012-07-18T12:28:26.067 回答