git - 如何将包含大量项目和公共(public)库的SVN存储库迁移到Git/Gitlab?

标签 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 是链接到我的公共(public)代码的好策略。与简单地将所有代码放在一个存储库中相比,这两个听起来都是很大的开销。

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

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

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

最佳答案

对此我没有明确的答案,但我们的情况类似,所以我想分享一下我们已经做了什么。

  • 我们正在使用 GitBlit(不是 GitLab),但我认为这没有什么区别。
  • 我们有一些分布式团队的网络连接状况不佳,因此规模可能与此相关。

到目前为止,以下规则对我们有所帮助:

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

With Sub-Modules, you are able to include Git-repositories into other Git-repositories. ... Submodules are useful to divide big projects in independent modules.

因此,根据整个代码库的粗略大小,并且如果所有人都在同一个团队中工作并且始终需要所有文件,则不需要拆分存储库。有一些食谱可以帮助您事后做到这一点。

GitBlit具有“项目”和“存储库”的结构,并且它们是分层的。我试图为 GitLab 找到类似的东西,this是我能找到的最好的。该项目看起来类似于存储库。

尝试做一个实验:

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

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

关于git - 如何将包含大量项目和公共(public)库的SVN存储库迁移到Git/Gitlab?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26586227/

相关文章:

git - 如何找出在哪个提交中添加了特定代码?

git - Git 中的自动超链接 Jira 问题在 SourceTree 中提交

git - 为什么使用 Git 看似可能的 merge 会产生冲突?

git - 如何将非标准 svn 存储库克隆到 git?

gitlab - 将 Gitlab 上的私有(private)仓库的单个文件公开访问

git - MAC + git gui->软件包 "Tcl": have 8. 5.9版本冲突,需要8.6

git - 结合 SVN 和 Git

WordPress 插件在 SVN 提交后未显示最新版本

具有非标准端口的 GitLab 远程存储库

git - 自动将 git 存储库的部分内容推送到谷歌云存储桶