将多个svn存储库迁移为一个git存储库

时间:2017-11-07 08:10:26

标签: git svn version-control git-svn

我的团队目前正在开发两个项目,每个项目都有一个单独的svn存储库,其标准布局如下:

Project1/
   Trunk
   Branches/
     module1
     module2(ext)
   Tags
 Project2/
   Trunk/
   Branches/
     module1
     module2(ext)
   Tags

每个项目在某个时间点都来自共同的祖先。在我看来,使用git作为版本控制是很自然的,因为一些错误修复和模块应该应用于两个项目。今天,我们所能做的最好的事情是共享一些外部模块(如示例中所示的module2),并将它们作为单独的svn存储库进行管理。这很好,只要我们使我们的外部完全通用,但它不允许在所有其他 - 不同但不是那么不同 - 模块(如module1)中共享更改。

  1. 有没有办法将两个项目迁移到一个git存储库,每个项目的主干和分支都是这样的分支:

    COMMON_PROJECT_REPO
      Ancestor
         |____________
         |            \
      Project1     Project2
         |             |
         |             |
      __/|             |\__
     |   |             |   |
     |   |             |   |
    br1  |             |  br2     
    

    您认为这是正确的布局吗?

  2. 如何将我的外部作为文件夹包含在我的git存储库中?

  3. 我是以错误的方式接近这种情况吗?
  4. 谢谢!

1 个答案:

答案 0 :(得分:0)

如果项目是独立项目,我不应该在一个回购中将它们合并在一起。如果它们只是同一项目的不同变体,则可以将它们放在同一个仓库中。如果没有,最好使公共代码成为两个项目使用的库。

至于迁移,您不应该在所有情况下使用git-svn,而应使用svn2git,但应使用正确的svn2git。见e。 G。我在Disconnected GIT branches after migrating from SVN的回答了解更多细节和推理。

使用右git-svn,您还可以轻松地将两个SVN项目放在一个Git存储库中,其中常见提交在最终结果中是相同的提交。对于svn2git或错误的{{1}},情况并非如此。