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

Git svn可以用于大型分支存储库吗?,svn,git,git-svn,tortoisegit,Svn,Git,Git Svn,Tortoisegit,我试图将Git用作SVN存储库的前端,以便能够使用Git的优秀特性,如简单的分支、隐藏等 问题是SVN存储库相当大(8000 revs),包含大量分支和标记(新旧) 这是一个近乎标准的布局,配置中包含fetch、branchs和tags指令 由于最旧的分支和标记指向修订版10,这意味着每个svn fetch都会从修订版10和以后读取整个存储库历史记录,这可能需要数小时的慢速连接 如果我只跟踪trunk,那没关系,但我仍然想让git知道新的分支和标记 我通常在我所在的分支上查看git log-1,

我试图将Git用作SVN存储库的前端,以便能够使用Git的优秀特性,如简单的分支、隐藏等

问题是SVN存储库相当大(8000 revs),包含大量分支和标记(新旧)

这是一个近乎标准的布局,配置中包含fetch、branchs和tags指令

由于最旧的分支和标记指向修订版10,这意味着每个
svn fetch
都会从修订版10和以后读取整个存储库历史记录,这可能需要数小时的慢速连接

如果我只跟踪trunk,那没关系,但我仍然想让git知道新的分支和标记

我通常在我所在的分支上查看
git log-1
,并从评论中获取SVN修订版,因此我可以执行
git SVN fetch-r7915:HEAD
或类似操作。我想这就是git svn fetch--parent所做的。但我为什么要这么做

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


我做错什么了吗?当第一个
svn克隆-s
完成时,我希望
svn fetch
是一个快速的操作。

您正确地使用了它:具有大量历史的Subversion存储库的初始导入将非常缓慢

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

晚上开始克隆,第二天早上再来一个不错的git回购

克隆完成后,
git svn fetch
甚至会警告您:

This may take a while on large repositories 对于大型存储库,这可能需要一段时间
Subversion既简单又愚蠢,所以git必须慢慢来。

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

确保阅读标题为“优点、缺点和经验教训”的部分


谢谢你的回答。不过,他们并没有真正帮助我

此命令是迄今为止最好的解决方案:

git svn log --all -1 | \ sed -n '2s/r\\([0-9]*\\).*/\\1/p' | \ xargs --replace=from git svn fetch -r from:HEAD git svn日志——全部为-1|\ sed-n'2s/r\\([0-9]*\\)./\\1/p'\ xargs--replace=from git svn fetch-r from:HEAD 它使用
gitsvnlog--all
查找到目前为止获取的最高svn修订号,并从该点开始获取所有内容


我希望
gitsvnfetch
有这样一个选项。除非SVN修订版被更改,否则没有理由每次都重复获取相同的修订版。

在SVN报告中是否有符号链接? 如果没有,您是否尝试过此设置:

svn.brokensymlink解决方案

这将禁用可能昂贵的检查以解决问题 已通过断开连接将符号链接签入SVN 客户。如果出现以下情况,请将此选项设置为“false” 您可以跟踪一个SVN存储库,其中包含许多 不是符号链接的空blob。 在git运行时,此选项可能会更改 svn正在运行并在上生效 已获取下一个修订版。如果未设置,则为git svn假定此选项为“真”


谢谢你的回答。我没有问题,初始克隆需要时间,但之后的每个获取操作都必须经过几乎所有的修改,这似乎是错误的。感谢您在这里发布这篇文章。很多人都在寻找将Git与其他源代码管理系统结合使用的方法。在我的SVN repo上,它有大量的提交,上面的命令速度非常慢——它迫使git svn返回到repo的开始以查找历史记录。工作副本的头版本是:
git svn find rev HEAD
,因此将最后获取的版本提取到remote的头版本的最短方法是:
git svn fetch-r`git svn find rev HEAD`:HEAD
,这是一个好方法如果您试图在无力进行完全切换的环境中使用git来克服svn的缺点,那么可以采取变通办法。你并不需要它成为一个完全的subversion客户端,只是为了让你拥有git的一些功能。写得不错。我也喜欢@Jordan发布的链接中描述的“git+svn”方法。然而,NetBeans(7.0.1)似乎无法使用它。它将项目标识为subversion签出,但看不到其中的git repo。