我正在从SVN迁移到Git。在SVN中,我在一个SVN存储库中有多个eclipse项目,便于浏览项目。我打算在每个eclipse项目中使用一个git存储库,但EGit建议不要这样做。
EGit指南建议将多个项目放入一个Git存储库。
查看类似问题such as this建议每个存储库使用一个项目。
哪种方法是最佳做法,人们实施什么?
答案 0 :(得分:46)
这取决于这些项目的密切关系。问自己以下问题:
如果你把它们全部放在一起,上面的一些东西会更容易。您只需要在一个存储库中进行分支/标记/存储/提交,而不是单独为每个存储库执行此操作。
但如果你需要有例如为项目单独发布周期,然后有必要将每个项目放在一个独立的存储库中。
请注意,您以后可以随时拆分存储库,或者将多个存储库再次组合成一个存储库,而不会丢失历史记录。
组合比拆分要困难得多,所以我先找一个存储库看看它是怎么回事。
答案 1 :(得分:17)
我为每个项目使用1个回购。
一些推理:
当你发现在几次提交后搞砸了一些东西时,当它只是一个项目时,它就更容易修复。试想一下,你确实提交了另外两个项目,现在你需要修复你在第三个项目上做的提交。
正如Fedir所说,你的历史和日志更加清晰。它只显示该项目的提交。
我的开发工作流程更好。我有一个主分支用于生产,开发分支,以及开发,我创建分支来实现功能(您可以在这里阅读更多相关信息:http://blog.avirtualhome.com/development-workflow-using-git/)
当您在团队中工作,并“共享”git repo时,团队成员是否真的需要所有其他项目?
只是一些想法,但它归结为:做什么对你有用。
答案 2 :(得分:17)
我有多个项目(Eclipse项目)并尝试了不同的方法来找出在实际日常开发方面最有效的方法。这是我发现的,我认为如果他们跟踪结果并客观地分析结果,大多数人会发现同样的事情。
简而言之,应用以下规则将获得最佳结果:
以下准则说明了确定哪些项目更详细地放入同一存储库的过程:
如果一个项目没有与任何其他项目紧密相关(例如,项目可以在没有打开其他项目的情况下打开而没有其他项目依赖于打开时打开的项目)那么你肯定应该将其放在自己的存储库中,原因可在上面的答案中解释。
如果一个项目依赖于其他项目或其他项目取决于项目,那么它归结为它们彼此之间的联系,它们如何被打包在一起以及它们与它们之间的分离能力彼此。
A)例如,包含用于测试主项目类的junit测试类的测试项目是两个项目彼此非常连接的情况,可以很容易地打包在一起,并且不能轻易地彼此分离。由于下面C部分解释的原因,这些项目应放在同一个存储库中。
B)如果一个项目依赖于另一个项目来提供某种共享资源,那么它实际上归结为它们可以一起管理的程度以及它们彼此分离的容易程度。例如,如果许多项目依赖具有共享资源的项目,那么它应该放在自己的存储库中,因为其他不相关的项目会受到共享源代码项目更改的影响。在这种情况下,共享资源项目应与依赖项目分离,而不是直接连接到依赖项目。 (例如,最好创建版本化的归档文件[例如名为“projectName”.1.0.1.0.jar的Jar文件]并在每个项目中包含这些文件的副本,而不是通过链接项目来共享资源在一起。)
C)如果连接了多个项目,可以很容易地一起管理但不能轻易地相互分离,那么它取决于它们彼此之间的紧密联系。
I)如果将项目放入一个存储库,那么每次提交时,项目将在存储库中保持彼此同步,如果项目紧密连接,这可以真正节省生命。但是,这也会产生上述答案中提到的问题。
II)如果将项目放入单独的存储库中,那么您必须注意保持提交彼此同步,并确保包含某种机制来指示哪些提交属于同一个同步点项目(当在项目中完成一组提交时,可能会在每个项目的提交注释中包含相同的同步点编号。)
III)因此,在这种情况下,将这些项目组合到一个存储库中几乎总是更好,以减少人工同步提交的开销,并在需要撤销提交时避免人为错误。将它们放置在单独的存储库中的唯一时间是,只有一个项目定期更改而其他连接的项目很少更改。
答案 3 :(得分:7)
我认为这个问题与我回答here的问题有关。基本上Git本质上支持一个非常精细的粒状结构,当涉及到项目/存储库。我已经阅读并了解到每个项目的1个存储库几乎总是最佳实践。通过保持项目分离并获得很多其他人已经描述的东西,你几乎没有失去任何东西。
答案 4 :(得分:2)
如果您要创建多个git存储库,可能会更高效。
如果你要建立一个分支,只有项目的文件将被分支,而不是所有的项目。 小项目分析,提交将更快。操作将花费更少的时间。
日志也会更清晰,如果您有多个git存储库,可以进行更细粒度的配置。