2017-04-18 138 views
1

我正在使用git svn clone将一些SVN回购迁移到Bitbucket。看起来克隆在克隆修订版本不存在时会失败,因为它影响的分支在Subversion中不再存在。git svn克隆由于删除分支而失败

我做

git svn clone -authors-file=authors.txt https://my.svn.com/project001 project001 

日志显示

{...}  
    r12 = f16b3d1014109ccd1c7e24dd70bfa9df45362e48 (refs/remotes/git-svn) 
      M  trunk/xx.java 
      M  trunk/xx.java 
    r13 = 9e61cda58fb2f5afa0a97277a10fd92365f3d1e3 (refs/remotes/git-svn) 
      M  trunk/xx.java 
      M  trunk/xx.java 
    r14 = f9964ce0a8081cf0bf22ee8a5ba32afe725323c3 (refs/remotes/git-svn) 
      M  trunk/xx.java 
    r15 = ac1f5c4a61346601dd85fbca55bd585ce5fc358d (refs/remotes/git-svn) 
    fatal: .git\svn\refs\remotes\origin\https;C:\Program Files\Git\index: index file open failed: Invalid argument 
      (in cleanup) update-index -z --index-info: command returned error: 128 
    W: +empty_dir: branches/https:/my.svn.com/project001/branches 

探索SVN回购似乎修订#16指的是创建一个分支(错误命名https:/my.svn.com/project001/branches),其不存在了(它已被删除,修订版#18)。

我想这个问题是由于这个原因造成的,但是在阅读文档和浏览之后,我没有找到一种方法让git svn clone忽略它。如果可能,我正在寻找自动化的方法,因为我必须编写一个脚本来迁移几个GB的SVN回购。

+0

这是关于一次性迁移,然后只使用Git,或者你想从你的Git克隆提交回SVN回购? – Vampire

+0

@Vampire这是一次性迁移。 – Averroes

回答

2

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

有很多工具叫svn2git,可能最好的一个是从https://github.com/svn-all-fast-export/svn2git的KDE。我强烈建议使用svn2git工具。这是我所知道的最好的,并且它对你的规则文件可以做的非常灵活。

您将可以轻松配置svn2git的规则文件,以根据当前的SVN布局生成所需的结果。

如果您不是100%关于存储库的历史记录,svneverever from http://blog.hartwork.org/?p=763是一个很好的工具,用于在将SVN存储库迁移到Git时调查SVN存储库的历史。


即使git-svn比较容易下手,这里是为什么使用KDE svn2git代替git-svn优越,除了它的灵活性,一些深层次原因:

  • 历史重建更好的和更清洁通过svn2git(如果使用正确的),这是更复杂的分支和合并的历史尤其如此
  • 标签是真正的标签,而不是Git分支
  • git-svn标签包含一个额外的空提交这也使得分支机构他们不要的部分,所以直到你给--tags的命令,默认情况下只标记指向获取分支还端来一正常fetch不会得到他们。有了正确的svn2git标签是属于他们的地方
  • ,如果你在SVN改变布局,可以轻松地与svn2git配置此,与git-svn你将失去​​历史最终
  • svn2git你也可以拆分一个SVN仓库分成多个Git仓库容易
  • 或结合在相同的SVN根多个SVN储存库到一个Git仓库容易
  • 转换是用正确的svn2git速度比与极大数倍git-svn

你看,为什么git-svn更糟,KDE svn2git更好。 :-)

+0

谢谢。我尝试过使用svn2git(不是kde的,但是nirvdrum/svn2git,因为我在Windows上),但看起来像我被困在一个经常性的“问题”中运行命令:git checkout -f master error:pathspec'master'not匹配git已知的任何文件。' – Averroes

+1

nirvdrum'svn2git'在引擎盖下使用'git-svn',因此遭受大多数相同的缺点,只是在实际的'git-svn'克隆之后修复其中的一些。我也在Windows上使用KDE'svn2git',这里没有问题。 – Vampire

+0

谢谢!我要去试试KDE svn2git。 – Averroes