git svn 需要永远,svn 需要一个小时

git svn takes forever, svn takes an hour

在大型项目中使用svn。我可以毫无问题地检查项目的主干。需要 30 分钟/1 小时。我是这样做的:

    svn checkout https://myrepo.com:port/svn/trunk/

但如果我尝试使用 git,它需要很长时间。在结帐时出现错误后,我已经做了 git svn fetch 两天了,因为我阅读了类似问题的一些答案,但什么也没有。我使用的命令是

    git svn clone https://myrepo.com:port/svn/trunk/

问题(我认为)是 git 试图克隆 一切(所有分支)加上我不想要的其他东西。在目录 svn 上,有 trunk 和 branches,还有其他我不需要的目录。我只想要后备箱。

这是正常行为吗?

使用您的命令,它只会克隆主干,因为您指定了主干 URL。但是它仍然通过一个接一个地获取所有修订然后从中进行 Git 提交来克隆其整个历史。这需要很长时间,特别是如果您不在 SVN 存储库位于文件系统上的服务器上执行此操作。这是我不鼓励使用基于 git-svngit-svn 的工具进行 one-time 迁移的众多原因之一。

您可以将 --revision 参数用于 git svn clone 以仅导入部分历史记录,例如。 G。最后 10 次提交。

git svn clone 运行速度慢得多,主要是因为它克隆到 non-bare 存储库中。您可以使用 bare 存储库显着提高克隆速度。

注意:记得为迁移生成作者文件。

这些额外的步骤将加快 svn → git 迁移的过程:

  1. git svn clone https://myrepo.com:port/svn/ --stdlayout <deleteMe.git> 带有所有额外参数,例如 --ignore-paths 等等。
  2. 然后取消步骤1中的git svn clone操作,只是为了后面使用.git/config文件
  3. git init --bare <useMeBare.git>
  4. <useMeBare.git>/config替换为<deleteMe.git>.git/config
  5. 编辑<useMeBare.git>/config更改bare = falsebare = true
  6. cd <useMeBare.git>
  7. 现在,运行 git svn fetch 并注意速度的提高。
  8. 获取完成后,您可以通过运行ning git clone <useMeBare.git> <migrated.git>
  9. 检查文件内容
  10. 您还可以将新的 git 远程添加到 <useMeBare.git> 并将其推送到本地 GitLab 服务器项目 / GitHub.
  11. 如果您稍后想重命名迁移的分支/标签,这个 link 可能会有帮助。

注意:要获得尽可能好的 git svn clone / fetch 速度,请在本地复制 svn 存储库并对其进行 svnserve,然后从中 git svn clone。但是这个方法需要你使用这个参数--rewrite-root 所以你克隆的git 仓库在评论中保持原来的svn URL

希望这对您有所帮助。