0

我们有一个旧的 SVN 存储库,有 30 000 次修订。它包含一个带有 3 个分支的 projectX,其名称为 branchA、branchB、branchC

自修订版 20 000 以来存在 3 个分支。

我们的 repo 的设置如下:

https://server/repo/projectX/

branches/
changes/
projects/
releases/
tags/

分支包含 BranchA、branchB 和 branchC,并且标签包含很多标签。如您所见,没有后备箱。

现在我们要迁移所有数据(没有旧的分支、标签等),从一开始到修订版 20 000。从 20 000 我们要迁移到带有标签、分支和主干(branchA 分支)的末尾。

这就是我想用svn2git做的。

# svn2git https://server/repo/ProjectX --notrunk --nobranches --notags --revision 0:20000 --metadata

# svn2git https://server/repo/ProjectX --trunk branches/branchA --branches branches --tags tags --revision 22545:HEAD --metadata 

这会给出正确的结果还是在 svn2git 迁移期间没有更改主干(可能会混淆),我应该--notrunk在 git 中保留并决定什么是我的主人?欢迎其他意见。

4

1 回答 1

2

您使用的svn2git工具基于git-svn.

因为一次性迁移git-svn不是转换存储库或部分存储库的正确工具。如果您想使用 Git 作为现有 SVN 服务器的前端,这是一个很棒的工具,但对于一次性转换,您不应该使用,但它更适合这个用例。git-svnsvn2git

有很多称为svn2git的工具,可能最好的是来自https://github.com/svn-all-fast-export/svn2git的 KDE 工具。我强烈建议使用该svn2git工具。这是我所知道的最好的,并且在你可以用它的规则文件做什么方面非常灵活。

您将能够轻松配置svn2gits 规则文件以从当前 SVN 布局中生成您想要的结果,包括可能存在的任何复杂历史。

您还可以轻松地在一次运行中为同一 SVN 根目录中的不同项目创建单独的 Git 存储库。

如果您不是 100% 了解存储库的历史,那么在将 SVN 存储库迁移到 Git 时,svnevereverhttp ://blog.hartwork.org/ ?p=763是一个调查 SVN 存储库历史的好工具。


尽管git-svn(或svn2git您使用的)更容易开始,但除了灵活性之外,还有一些其他原因说明为什么使用 KDEsvn2git而不是git-svn更优越:

  • 通过(如果使用正确的),历史被重建得更好,更清晰,svn2git对于具有分支和合并等的更复杂的历史尤其如此
  • 标签是真正的标签,而不是 Git 中的分支
  • 标签包含git-svn一个额外的空提交,这也使它们不是分支的一部分,因此在fetch您提供命令之前,正常情况下不会获取它们,--tags因为默认情况下也只会获取指向已获取分支的标签。使用正确的 svn2git 标签是它们所属的地方
  • 如果您更改了 SVN 中的布局,您可以轻松地配置它svn2gitgit-svn最终您将失去历史
  • 您还可以轻松地svn2git将一个 SVN 存储库拆分为多个 Git 存储库
  • 或轻松将同一个 SVN 根目录中的多个 SVN 存储库合并到一个 Git 存储库中
  • svn2git正确的转换比使用正确的要快无数倍git-svn

你看,有很多原因导致git-svnKDE 更差而 KDEsvn2git更胜一筹。:-)

于 2017-05-18T13:56:29.767 回答