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

Migrate multiple svn repositories as branches of one git repository

我的团队目前正在处理两个项目,每个项目都有一个单独的 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. 我是不是以错误的方式处理了这种情况?

谢谢!

如果项目是独立的项目,我认为你不应该将它们合并到一个 repo 中。如果它们只是同一个项目的不同变体,那么将它们放在同一个 repo 中可能没问题。如果没有,最好将公共代码设为两个项目都使用的库。

至于迁移,你根本不应该使用 git-svn 而应该使用 svn2git,而是正确的。见 e。 G。我在 的回答了解更多细节和推理。

有了正确的 svn2git,您还可以轻松地将您的两个 SVN 项目变成一个 Git 存储库,其中常见的提交在最终结果中是相同的提交。使用 git-svn 或错误的 svn2git 则不会出现这种情况。