为什么git svn fetch这么慢?

16

我正在尝试对我的repo执行git svn fetch,以执行git rebase -i。我正在本地执行fetch,为什么速度这么慢?创建1000个修订版本真的需要那么长时间吗?似乎这个过程只是在一个文件上"睡眠",然后突然出现了一大堆活动。


2
SVN 本质上是慢的。请记住,Git 需要在本地存储整个历史记录,因此它会从 SVN 检出每个修订版本。SVN 不会下载整个仓库,只会下载特定的修订版本。 - vcsjones
即使我没有进行任何远程操作? - Doug Chamberlain
你说的“本地执行获取”是什么意思?git svn fetch会从svn仓库中获取修订版本。即使你已经获取了所有的修订版本,它也会检查svn仓库以查看是否已经获取了所有修订版本。 - Tyler
抱歉,我表达不太清楚。我的意思是,我很惊讶在运行svn的同一台服务器上使用git执行所有操作,并从c:\ svn \ subversion复制到c:\ git \ subversion如此缓慢。你说这就是事情的本质。 - Doug Chamberlain
4个回答

26
这似乎是关于“git svn”的Windows端口的问题,更具体地说,是关于Windows/Cygwin上“git svn”中的Perl库之一。
克隆一个大小为12MB、包含75个版本的svn仓库。
  linux: 45 seconds
  windows (cygwin): 25 minutes

2
两年零八个月后,问题仍然存在。可能有一点点改善。今天早上,在Linux上克隆相同的存储库只需44秒,而在各种Windows机器上平均需要12分钟。 - Jan de Vos
1
当然这(我认为)就是问题所在,不确定为什么被接受的答案没有提到这点。难道没有任何方法可以修复吗?记录一下,我正在运行 Linux 控制台模拟器 Cmdr 并且它也有同样的问题。 - grom
5
2019年,使用git-scm版本2.22.0.windows.1,在运行"git svn fetch"时遇到了相同的极其缓慢的问题。 - Andry
2
2022年,git版本为2.35.1.windows.2。 - ceztko

6

我经过相同的尝试后,发现在Linux上比在Windows的Cygwin上运行更快。建议你也可以尝试一下。


是的,Cygwin通常会比较慢。但是难道Windows上没有适用的git吗? - styfle
1
具体来说,Perl 的速度很慢,我不知道 msysgit 是否也有同样的问题。 - gtrak
4
刚刚尝试在Windows和(运行于)Linux的虚拟机中运行相同的git svn clone命令(从本地svn repo克隆)。Git版本:Win: 1.8.3.msysgit.0,Linux: 1.8.3.2。与Windows相比,Linux速度非常快!我没有预料到这一点。 - Cristian Diaconescu
2
谢谢。使用VirtualBox启动Linux虚拟机,在其中执行git svn clone,然后将其克隆到cygwin中(并带上git-svn配置),这样可以节省我几个小时的时间。 - Jay K
2
通过使用“进程资源管理器”查看幕后的进程,它会重复生成“pearl.exe”来完成工作。 - Dan Dar3

4

git svn fetch(和clone)需要处理大量工作,并创建整个存储库,与svn通信并在本地计算机上创建git存储库。您可以在同一台服务器上执行此操作,其中包含svn服务器(这是我认为您所指的“本地”),但是git svn客户端仍然必须处理大量修订版本,逐个处理它们并创建存储库。1000个修订版本是很多的,可能需要一段时间。请耐心等待并让其完成工作。当您在存储库上工作时,请确保经常提取/重新基于最新版。


3
两天时间,两个服务器重启,1个硬盘空间不足,24小时后,我终于让它完成了。 - Doug Chamberlain
1
28000个修订版本更多了;( - grom
4
不需要进行重体力劳动,这只是"git svn"在Windows版本中的性能问题。需要修复此问题。 - harmv

3

对于Windows来说,这个问题仍然存在:拉取/获取卡住了,什么都没有发生。

除了之前所有的回答,我可以建议在您的Windows机器上使用WSL。您将惊喜地发现fetch的速度非常快。它像魔法一样工作。

最初的回答:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接