SVN 到 GIT,标签转换为分支

SVN to GIT with tags converted to branches

我试图在 SO 和其他地方找到类似的情况,但一无所获,但我无法想象这是独一无二的。

我正在努力将我的公司从 subversion 转变为 git (GitHub)。我们内部有一个大型 SVN 存储库(大约 60gb),我们将对其进行转换,我们的结构绝对不是标准的。我们的存储库看起来像这样:

branches\
  version_1.0
  version_1.1
  version_1.2
  version_1.3
  version_1.4
  version_1.5
tags\
  cust_a_test
  cust_a_prod
  cust_b_test
  cust_b_prod
  cust_c_test
  cust_c_prod
  cust_c_dev
  cust_d_test
  cust_d_prod
  cust_e_test
  cust_e_test_1.3
  cust_e_prod
  cust_f_test
  cust_f_prod

我们的每个客户都可以(可能)使用 branches\ 文件夹中的任何版本。然而,标签不是静态的,因此我们正在积极地提交客户标签(将它们与分支版本、修补程序、客户特定修改等同步)。结构也不一致,因为一些客户只有一个 test/prod 标签,而其他客户在测试时有 dev/test/prod 或特定于版本的标签。乱七八糟的。

我设想使用如下结构将我们转移到 git:

branches\
  master
  version_1.5_dev
  version_1.5_test
  version_1.5_prod
  version_1.4_dev
  version_1.4_test
  version_1.4_prod
  version_1.3_dev
  version_1.3_test
  version_1.3_prod
  version_1.2_dev
  version_1.2_test
  version_1.2_prod
  version_1.1_dev
  version_1.1_test
  version_1.1_prod
  version_1.0_dev
  version_1.0_test
  version_1.0_prod
  cust_a_prod
  cust_a_test
  cust_a_dev
  cust_b_prod
  cust_b_test
  cust_b_dev
  cust_c_prod
  cust_c_test
  cust_c_dev
  cust_d_prod
  cust_d_test
  cust_d_dev
  cust_e_prod
  cust_e_test
  cust_e_dev

我最初想为每个版本/客户创建一个单独的存储库(我们为支持的旧版本开发 fixes/additions,同时添加到我们的最新版本)但是在存储库之间合并更改有太多限制,它似乎分支更合适。

是否可以将我们的颠覆存储库导入 git,同时将标签转换为分支并(理想情况下)保留每个 branch/tag 的历史记录?

根据我们拥有的客户数量,可以手动创建分支机构,如果有点耗时,但不会包括历史记录。

我使用 svn2git 取得了巨大的成功。您可以导出到多个存储库,定义到 branches/tags/trunk 的自定义路径。 samples 目录有很好的例子。我确实找到了示例中未定义的功能。您可以定义前缀以添加到导出的任何路径。

match /branches/bar/
  repository my_repo
  branch bar
  prefx foo
end match

我分支 foo/bar 的最终结果是在 repo my_repo 中创建的。

https://github.com/svn-all-fast-export/svn2git

编辑:

由于该工具的灵活性,您可以轻松地将标签转换为分支

match /tags/cust_a_test/
  repository my_repo
  branch cust_a_test
end match