如何在存储库上使用svn2git

Den*_*boy 2 svn migration git svn2git

我正在使用svn2git来测试svn存储库到git的迁移。现在我的svn像这样构建

myproj 包含

repo1 /
repo2 (obsolete)/
old/
Run Code Online (Sandbox Code Playgroud)

每个回购都包含自己的分支,标签等。我只需要repo1中的所有内容。当我开始流程时,我得到以下信息:

svn2git https://server/myproj/repo1 --username LVO
Run Code Online (Sandbox Code Playgroud)

输出:

Initialized empty Git repository in /folder/.git/
Using higher level of URL: https://server/myproj/repo1 => https://server/myproj
Run Code Online (Sandbox Code Playgroud)

并且比该过程开始。恐怕它也会占用所有其他旧仓库。这是启动它的正确方法吗?:

$ svn2git https://server/myproj/repo1 --username xxx --trunk=/repo1 --branches=/repo1 --tags=/repo1 
Run Code Online (Sandbox Code Playgroud)

(尤其是行李箱的东西对我来说还不清楚)。当我的仓库在这棵树中时,我该如何启动svn2git。

Vam*_*ire 6

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

svn2git您使用的工具基于git-svn,因此也遭受大多数相同的缺陷,仅修复了克隆后操作中的某些缺陷。

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

您将能够轻松配置svn2gits规则文件,以从当前SVN布局(包括任何复杂的历史记录)中生成所需的结果。

如果您不是100%知道存储库的历史记录,那么svnevereverhttp://blog.hartwork.org/?p=763中获取信息是一个很好的工具,可以在将SVN存储库迁移到Git时对其进行调查。


尽管git-svn(或svn2git基于它的)入门比较容易,但是还有以下一些原因,除了灵活性之外,为什么使用KDE svn2git而不是git-svn更好:

  • 通过svn2git(如果使用了正确的)历史记录,可以更好,更干净地重建历史记录,对于具有分支和合并等更复杂历史记录的情况尤其如此
  • 标签是真实标签,不是Git中的分支
  • 带有git-svn标签的标签包含一个额外的空提交,这也使它们不成为分支的一部分,因此在fetch您给出--tags命令之前,正常情况下不会得到它们,因为默认情况下,也仅会获取指向提取的分支的标签。带有正确的svn2git标签是它们所属的位置
  • 如果您在SVN中更改了布局,则可以轻松地使用进行配置svn2gitgit-svn最终会丢失历史记录
  • svn2git您还可以拆分一个SVN仓库分成多个Git仓库容易
  • 或将同一SVN根目录中的多个SVN存储库轻松组合到一个Git存储库中
  • 转换是正确的更快的一个极大时间svn2gitgit-svn

您会发现,有很多原因会导致性能git-svn下降,而KDE svn2git则更胜一筹。:-)