如何将包含许多项目和公共库的SVN存储库迁移到Git / Gitlab?

时间:2014-10-27 11:08:29

标签: git svn gitlab

我们正在考虑从SVN迁移到Git / Gitlab,但是我希望之前完成此项迁移的任何人都可以提供一些建议,以确定以下两个工作流程中的哪一个最适合我们,或者是否有更好的方法这样做。

我们的SVN存储库目前看起来像这样:

\tags
    \product1_v2
        \product_1
        \common
    \product2_v1
\trunk
    \product_1
    \product_2
    \common

根据我的阅读,使用git的正确方法是将product_1product_2common分成不同的存储库。我已经阅读过各种文章,建议使用submodulesubtree是链接到我的公共代码的好策略。与将我们的所有代码简单地放在一个存储库中相比,这两者听起来都是很多开销。

一般来说,我们同时对各种产品和公共库进行更改(我们的常用库仍在不断发展)。

我知道gitlab有一个项目概念,但我找不到一个明确的答案,即多个项目是否可以共享一个存储库(如果我们要在一个地方使用所有代码)。

所以我的问题是;您建议采用哪种方法来产生最少的开销和头痛?

1 个答案:

答案 0 :(得分:1)

我对此没有明确的答案,但我们的方式类似,所以我想分享我们已经做过的事情。

  • 我们正在使用GitBlit(而不是GitLab),但我不认为这会产生影响。
  • 我们有一些分布式团队网络连接不良,因此尺寸可能相关。

以下规则帮助了我们:

  • Git通常用于较小的存储库。任何可能由其他东西独立构建的东西,或者可能由不同的团队以不同的发布周期进行更改的东西都应保留在不同的存储库中。
  • 我们还没有使用到目前为止的子模块,这是一本关于公司Git使用的(德国)书籍的引用:
  

使用子模块,您可以将Git存储库包含到其他Git存储库中。 ...子模块可用于划分独立模块中的大项目。

因此,根据整个代码库的粗略大小,如果所有人都在同一个团队中工作并且一直需要所有文件,则不需要拆分存储库。有食谱可供选择后如何做到这一点。

GitBlit具有“项目”和“存储库”的结构,它们是分层的。我试图为GitLab找到类似的东西,this是我能找到的最好的东西。那里的项目似乎与存储库类似。

尝试做一个实验:

  • 在存储库的主干上执行git svn。那可管理吗?大小怎么样?
  • 尝试命令的不同参数。了解存储库的大小如何变化,具体取决于您要迁移的历史记录的大小。

所以最后,我会尝试只使用一个存储库,因为我没有看到任何分裂它的原因。只要是这种情况,坚持下去。因此,您可以保留大部分开发过程,构建过程,并可以在以后进行调整。