我们正在考虑从 SVN 迁移到 Git/Gitlab,但我想向之前做过此迁移的人提供一些建议,了解以下两个工作流程中哪一个最适合我们,或者是否有更好的方法这样做。
我们的 SVN 存储库目前看起来像这样:
\tags
\product1_v2
\product_1
\common
\product2_v1
\trunk
\product_1
\product_2
\common
根据我的阅读,使用 git 的正确方法是将 product_1
、product_2
和 common
分解为单独的存储库。我读过各种文章,建议使用 submodule
或 subtree
是链接到我的公共(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/