Git-svn可以用于大型分支存储库吗?

Hen*_*and 20 svn git git-svn tortoisegit

我正在尝试使用Git作为SVN存储库的前端,以便能够使用Git的简单分支,存储等优秀功能.

问题是SVN存储库非常大(8,000转)并且包含许多分支和标记(旧的和新的).

它是一个接近标准的布局,配置包含fetch,branches和tags指令.

由于最旧的分支和标记引用了修订版10,因此它意味着每个都svn fetch从修订版10和转发中读取整个存储库历史记录,这可能需要数小时的慢速连接.

如果我只跟踪主干,那么它很好,但我仍然想让git意识到新的分支和标签.

我通常会查看我所在git log -1的分支并从评论中获取SVN修订版,因此我可以做git svn fetch -r7915:HEAD或类似.我猜那是什么git svn fetch --parent.但为什么我需要这样做呢?

我在Windows上,并使用TortoiseGit,它有很好的支持git-svn,但由于TortoiseGit只运行git svn fetch我有点卡住.

难道我做错了什么?我希望svn fetch在第一次svn clone -s完成时能够快速运行.

小智 12

谢谢你的回答.但他们并没有真正帮助我.

到目前为止,此命令是最佳解决方案:

git svn log --all -1 | \
  sed -n '2s/r\\([0-9]*\\).*/\\1/p' | \
  xargs --replace=from git svn fetch -r from:HEAD

它用于git svn log --all查找到目前为止获取的最高SVN修订号,并从该点开始提取所有内容.

我希望git svn fetch可以选择这样做.除非更改SVN修订版,否则没有理由git svn每次都要反复获取相同的修订版.


Jor*_*dan 5

如果您不需要在git存储库中拥有完整的历史记录,我建议您查看下面链接中详细介绍的"git + svn"方法,而不是标准的git-svn集成.您最初导入git应该非常快,因为您不会导入历史记录.

请务必阅读标题为"福利,缺点和经验教训"的部分.

http://www.lostechies.com/blogs/derickbailey/archive/2010/02/03/branch-per-feature-how-i-manage-subversion-with-git-branches.aspx


Gre*_*con 3

您使用正确:具有大量历史记录的 Subversion 存储库的初始导入将会非常慢。

坏消息是因为 Subversion 的分支和标签只是目录,git-svn被迫采取悲观的路线,从头开始读取每个分支一直回到第一个修订版。是的,如果您在使用 Subversion 时遵守纪律,这将导致多次获取相同的数据,但现实世界的使用模式使这种情况不太可能发生。

晚上启动克隆,第二天早上就会看到一个漂亮的 git 仓库!

一旦你克隆了,git svn fetch甚至会警告你:

在大型存储库上这可能需要一段时间

Subversion 既简单又愚蠢,所以 git 必须慢慢来。