2013-07-17 86 views
5

我正在将我的svn回购转换为git。这是一个非常大的回购协议,并且它保持失败,因此我只需克隆其中的一部分。我使用了下面的命令:Git Svn克隆某些版本,并继续克隆将来的其他版本

git svn clone -r100000:HEAD https://svn.myserver.com/project/ . 

它成功完成,但我只有最新的几个提交。无论如何继续克隆早期的提交?

PS:克隆整个回购没有-r总是导致RA层请求失败:'svn/project /!svn/vcc/default'上的REPORT请求失败:...无法读取块大小:安全连接被截断......有时,几天后...所以我决定放弃它,并克隆只有部分

编辑:添加错误消息

RA层请求失败:报告请求失败的“/ SVN/project /!svn/vcc/default':REPORT of'/ svn/project /!svn/vcc/default':无法读取块大小:安全连接被截断(https://svn.myserver.com)位于/ usr/lib/perl5/site_perl/Git /SVN/Ra.pm line 282

回答

1

与git你不能添加历史“在”你已经有了什么。每一个git提交引用所有提交,它是一个继承者(通过包含这些提交的散列)。可以重写历史记录(并在前面添加新的提交),但是这会给你全新的提交(改变哈希),而不是你想在积极使用的回购中做什么。

您应该尽可能多地抓取历史记录,并声称它是“初始导入”,或尝试修复导入问题。当你谈论几天的时候,听起来好像你可以从更接近svn repo中获益,即在svn服务器本身上运行命令以节省网络开销/延迟。

也可能有助于提供有关您遇到的实际错误的更多信息。

+1

那么,这是否意味着如果我从R10000开始克隆,那么我在Git仓库中的最早历史记录是R.100000?在最初的克隆之后没有办法获取较早的历史记录(提交)? – Zennichimaro

+0

至少难以将高达10万个分支与100万个分支开始集成。如果你独立创建它们,你需要重新写入100k分支,当你将它粘贴到高达100k的分支上时,这会导致重写历史的所有常见问题,或者可以使用移植(nb我从未使用过他们):https://git.wiki.kernel.org/index.php/GraftPoint ---如果可能的话,最好的解决方案是将整件事整合到一块。 – mnagel

5

如果你想要整个历史,为什么不从你的svn回购的rev 1开始?授予它将需要一段时间,但你可以分开做。例如:

git svn clone -r1:10000 https://svn.myserver.com/project/ . 

一旦完成光盘放入项目并运行:

git svn fetch svn -r10000:20000 

你甚至可以重叠:

git svn fetch svn -r9997:20000 

,它会跳过的作品,它已经得到。你可能不想创造空白。

而且我认识到,你已经尝试过在没有任何-r规范的情况下完成所有操作,并且出现了错误,但是也许会在部分中做到这一点。如果出现错误,请尝试再次运行相同的命令。在过去使用git svn clone时,我曾经遇到很多失去联系或发生随机错误的情况,但是对该项目进行的CD-git svn fetchrebase -ing(有时反复)似乎在继续前进。

+0

谢谢!我从来没有尝试过,就会给它一个镜头 – Zennichimaro

+0

可悲的是,它具有相同的错误消息再次失败:指数不匹配:907786790b14a445c2b5eef420311bea543b597c = 09b95548bc4f106b1bb5 7be669737878067e1f4c 重读ac49f8e7dbfaeaa3cf500b946c6ebe50abb735ee 中号应用/资产/ GUI/ReadMe.txt中 RA层请求失败:'/ svn/sg /!svn/vcc/default'上的REPORT请求失败:R '/ svn/sg /!svn/vcc/default'的EPORT:无法读取块大小:安全连接 截断(https://192.168.1.107)at /usr/lib/perl5/site_perl/Git/SVN/Ra.pm line 282 – Zennichimaro