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
我试图在 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