2010-01-08 34 views
20

我想使用的Git作为一个前端到SVN仓库,以便能够使用Git的不错的功能简单的分支,积攒等Git-svn可用于大型分支存储库吗?

的问题是SVN存储是相当大(8000个转速)并包含大量的分支和标签(旧的和新的)。

这是一个接近标准的布局,配置包含提取,分支和标签指令。

由于最旧的分支和标签引用了版本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 clone -s完成时,我预计svn fetch是一个快速操作。

回答

3

您正确使用它:一个Subversion版本库有很多历史记录的初始导入将非常缓慢。

坏消息是因为Subversion的分支和标签仅仅是目录,git-svn被迫采用了从每个分支中读取每个分支一路回到第一个修订版的悲观路线。是的,如果你在使用Subversion方面受到了严格的规定,这将导致很多相同数据的提取,但是现实世界的使用模式使得这种情况不太可能发生。

在晚上开始克隆,并在第二天早上回到一个不错的git回购!

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

This may take a while on large repositories

Subversion是简单的和愚蠢的,所以Git有拿东西慢。

+1

感谢您的回答。我没有问题,即初始克隆需要时间,但是之后的每次获取操作都必须经历几乎所有的修订,这似乎是错误的。 – 2010-01-08 20:22:13

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

+0

如果您尝试在无法完全切换的环境中尝试使用git来解决svn的缺点,这是一个很好的解决方法。你并不需要它是一个完整的颠覆客户端,只是为了给你一些git的力量。很好的写作。 – captncraig 2011-08-05 14:22:26

+0

我也喜欢@Jordan发布的链接中描述的“git + svn”方法。但NetBeans(7.0.1)似乎无法使用它。它将项目标识为颠覆性检出,但无法看到其中的git回购。 – michael 2011-11-10 10:56:08

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修订版发生更改,否则没有理由不应每次都提取相同的修订版。

+0

感谢您将此列出。很多人都在寻找与其他源码控制系统一起使用Git的方法。 – Jordan 2010-03-04 15:15:17

+1

在我的SVN回购中有很多提交,上面的命令很痛苦 - 它强制git-svn回到回购的开始寻找历史。 – MikeHoss 2011-03-07 18:30:22

+0

工作副本的HEAD版本为: 'git svn find-rev HEAD' 因此,将最后一次获取的修订版本取回到远程的HEAD版本的最短途径是: 'git svn fetch -r \'git svn find-rev HEAD \ ':HEAD' – 2015-03-30 13:17:45

0

你在SVN回购中有符号链接吗? 如果没有,你有没有试过这种设置:

svn.brokenSymlinkWorkaround

这将禁用潜在的昂贵检查要解决破 符号链接住进通过打破 客户SVN。如果你使用 来追踪一个SVN仓库,并且有许多 不是符号链接的空blob,请将此选项设置为“false”。 此选项可能会更改,而git svn正在运行,并在 下一个修订版本上生效。如果未设置,git svn假定此选项为“true”。

相关问题