Git Svn克隆特定版本,并在将来继续克隆其他版本

5
我正在将我的svn仓库转换为git。这是一个非常大的仓库,而且它一直在失败,因此我只能克隆其中的一部分。我使用了以下命令:
git svn clone -r100000:HEAD https://svn.myserver.com/project/ .

它已经成功完成,但我只有最新的几个提交。有没有办法继续克隆早期的提交?
附注:在没有-r的情况下克隆整个仓库总是导致RA层请求失败:“svn/project/!svn/vcc/default”上的REPORT请求失败: …无法读取块大小:安全连接被截断…有时是几天后...所以我决定放弃它,只部分克隆。
编辑:添加错误信息
RA层请求失败:“/svn/project/!svn/vcc/default”上的REPORT请求失败: REPORT of '/svn/project/!svn/vcc/default': Could not read chunk size: Secure connection truncated (https://svn.myserver.com) at /usr/lib/perl5/site_perl/Git/SVN/Ra.pm line 282
2个回答

6
如果您想要完整的历史记录,为什么不从svn仓库的第1个版本开始呢?尽管这可能需要一些时间,但您可以分步骤来完成。例如:
git svn clone -r1:10000 https://svn.myserver.com/project/ .

完成后进入project目录并运行:

git svn fetch svn -r10000:20000

你甚至可以重叠:

git svn fetch svn -r9997:20000

并且它将跳过已经获取到的部分。您可能不想创建间隙。
我知道您之前尝试过没有-r规范,但是分段执行可能会避免这种情况。如果出现错误,请尝试再次运行相同的命令。在以前使用 git svn clone 时,我遇到过许多失去连接或产生随机错误的情况,但是进入项目并 git svn fetch rebase (有时是反复)似乎可以继续从上次结束的地方继续。

遗憾的是,它再次以相同的错误消息失败了: 索引不匹配: 907786790b14a445c2b5eef420311bea543b597c!=09b95548bc4f106b1bb57be669737878067e1f4c 重新读取 ac49f8e7dbfaeaa3cf500b946c6ebe50abb735ee M App/asset/gui/ReadMe.txt RA层请求失败: 在'/svn/sg/!svn/vcc/default'上的报告请求失败:'/svn/sg/!svn/vcc/default' 的报告:无法读取块大小:安全连接被截断 (https://192.168.1.107) at /usr/lib/perl5/site_perl/Git/SVN/Ra.pm line 282 - Zennichimaro

1
使用git时,无法在已有的历史记录“前面”添加历史记录。每个git提交都引用了它是继任者的所有提交(通过包含这些提交的哈希值)。虽然可以重写历史记录(并在前面添加新提交),但这将给你全新的提交(更改的哈希值),并不是你想在活跃的存储库中做的事情。
你应该尽可能多地获取历史记录,并将其称为“初始导入”,或尝试解决导入问题。当你谈到天数时,听起来你可以从靠近svn存储库的位置获益,即在svn服务器上运行命令以节省网络开销/延迟。
此外,提供有关实际错误的更多信息可能会有所帮助。

1
那么,这是否意味着如果我从R.100000开始克隆,我在Git存储库中拥有的最早历史记录是R.100000?在初始克隆之后,没有办法获取更早的历史记录(提交)了吗? - Zennichimaro
至少很难将最高10万个分支与从10万开始的分支集成。如果您独立创建它们,则需要在将其附加到最高10万个分支时重新编写从10万开始的分支,这将导致所有通常的重写历史问题,或者您可以使用嫁接(请注意我从未使用过它们):https://git.wiki.kernel.org/index.php/GraftPoint --- 如果可能,远远最好的解决方案是将整个东西作为一个整体导入。 - mnagel

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