我使用svn2git测试svn repo到git的迁移。
现在我的SVN是这样建的myproj
包含
repo1 /
repo2 (obsolete)/
old/
每个回购协议都包含自己的分支、标签等。
我只需要回购协议中的所有东西。
当我开始这个过程时,我会得到:
svn2git https://server/myproj/repo1 --username LVO
输出:
Initialized empty Git repository in /folder/.git/
Using higher level of URL: https://server/myproj/repo1 => https://server/myproj
然后这个过程就开始了。恐怕它也要拿走所有其他的旧回购协议。这是开始的正确方法吗?以下内容:
$ svn2git https://server/myproj/repo1 --username xxx --trunk=/repo1 --branches=/repo1 --tags=/repo1
(尤其是后备箱的事我不清楚)。当我的repo在这棵树中时,如何启动svn2git。
最佳答案
对于一次性迁移,git-svn
不是用于转换存储库或部分存储库的正确工具。如果您想使用Git作为现有的VPN服务器的前端,这是一个很好的工具,但是对于一次性转换,您不应该使用git-svn
,但是svn2git
它更适合这个用例。
您使用的svn2git
工具基于git-svn
,因此遭受了大多数相同的缺点,只在克隆后操作中修复了一些缺陷。
有很多称为svn2git
的工具,最好的可能是https://github.com/svn-all-fast-export/svn2git中的kde工具。我强烈建议使用svn2git
工具。这是我所知道的最好的,它可以很灵活地处理它的规则文件。
您将很容易配置svn2git
s规则文件,从当前svn布局(包括任何复杂的历史记录)生成所需的结果。
如果您不是100%了解存储库的历史,svneverever
fromhttp://blog.hartwork.org/?p=763是一个很好的工具,可以在将svn存储库迁移到git时调查其历史。
即使git-svn
(或基于它的svn2git
)更容易开始,这里还有一些进一步的理由,为什么使用KDE svn2git
而不是git-svn
是优越的,除了它的灵活性:
通过svn2git
(如果使用正确的方法)可以更好、更清晰地重建历史,对于分支和合并等更复杂的历史尤其如此
标记是真正的标记,而不是git中的分支。
使用git-svn
时,标记包含一个额外的空提交,这也会使它们不属于分支,因此正常的fetch
在您将--tags
交给命令之前不会获取它们,因为默认情况下,也只获取指向已获取分支的标记。有了合适的svn2git标签
如果您在svn中更改了布局,您可以使用svn2git
轻松配置它,使用git-svn
您最终将丢失历史记录
使用svn2git
还可以轻松地将一个svn存储库拆分为多个git存储库
或者将同一个svn根目录中的多个svn存储库轻松组合到一个git存储库中
正确的svn2git
比正确的git-svn
转换快上百万倍。
你看,git-svn
更差,kdesvn2git
更优的原因有很多。:-)