git-svn...更像蜗牛邮件

git-svn...more like snail mail

今天在工作中,由于某些限制,我需要使用 git-svn 克隆某个项目,而我用来执行此操作的命令是 git svn clone -T --no-minimize-url URL_OF_THE_REPO。长话短说......这一直很慢,而且由于 git 中的一些错误而一直可靠地失败......这自然让我通过重新启动命令继续克隆,我不能就这样离开它并且知道它会在我回来时完成克隆工作。所以把它变成夜班是不可能的。

  1. 天啊,为什么这么慢,
  2. 我怎样才能加快(结帐)过程,
  3. 我如何计划夜间工作来完成这些繁重的克隆工作并确信它们会在早上完成(我重申,我必须密切注意结帐以防失败)

1 我认为这是因为 svn 没有设计成 git 的工作方式(获取的对象被压缩并在一个块中发送)。 git-svn 必须逐个修订以将 svn branches/tags 的内容复制到 git 等价物。

2 和 3 是相关的:您可以尝试要求获取过程从您知道已经检索到的修订版开始,这样 git-svn 就不必每次都从头开始.你可以做类似 git svn fetch -r 10000:HEAD.

的事情

您可以初始化(不是完全克隆)回购空。

编辑 repo。git/config 过滤要提取的分支和标签。

然后获取。

Why in the name of god is it so slow,

因为在 Git 中,您总是克隆一个完整的存储库,而不仅仅是一次提交。这意味着,要进行完整的 git-svn 克隆,git-svn 必须单独下载每个 SVN 修订版并将其转换为 Git 提交。这只是需要时间。这就是为什么我不鼓励大家使用 git-svn 进行一次性迁移但只推荐 git-svn 作为 SVN 的前端的原因之一,你需要从 Git 提交回 SVN 服务器] 克隆,这就是 git-svn 的创建目的。

How can I speed the (checkout) process,

结帐过程很快。我猜你的意思是克隆/获取过程。那么在使用 git-svn.

时你只能做两件事
  1. 如果可能,请在 SVN 服务器计算机上进行克隆/获取,这样可以节省协议开销和网络延迟。但是请确保使用正确的参数组合,以便最终在提交消息元数据中使用远程 SVN URL,否则稍后从工作站更新/提交时会遇到问题。

  2. 做一个 "shallow" 克隆。您可以告诉 git-svn 要获取哪些修订。因此,如果您对 git-svn 克隆中的完整历史记录不感兴趣,请告诉克隆命令从哪个修订版开始。如果你G。只获取最后 5 次提交,你只需要几秒钟就可以完成。

How can I planify night-jobs to do these heavy checkouts and be confident they would have completed in the morning(I reiterate, I have to keep a watchful eye over the checkout in case it fails)

一旦克隆命令开始实际获取 SVN 修订版,您应该能够使用 git svn fetch 恢复该过程。所以只要循环执行 git svn fetch 直到克隆完成,if 它就完成了。我写 if,因为它可能会遇到 git-svn 中的错误或一些不兼容问题,例如可能使进程在同一修订版中可靠地失败的错误命名的分支或标记。在这种情况下,您当然必须手动处理,因为恢复将不起作用。