5

我正在将我的 svn 存储库转换为 git。这是一个非常大的 repo,它一直在失败,因此我只需要克隆它的一部分。我使用了以下命令:

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

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

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

编辑:添加错误消息

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

4

2 回答 2

6

如果你想要整个历史,为什么不从你的 svn repo 的 rev 1 开始呢?当然这需要一段时间,但你可以分部分进行。例如:

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

一旦完成 cd 进入项目并运行:

git svn fetch svn -r10000:20000

你甚至可以重叠:

git svn fetch svn -r9997:20000

它会跳过它已经得到的部分。您可能只是不想制造差距。

而且我认识到您之前曾尝试在没有任何 -r 规范的情况下将其全部拉出并出现错误,但也许在部分中进行操作会克服这一点。如果确实出现错误,请尝试再次运行相同的命令。在过去的使用git svn clone中,我遇到过很多它失去连接或出现随机错误的情况,但是 cd-ing 进入项目和git svn fetchor rebase-ing (有时重复)似乎继续从之前停止的地方继续。

于 2013-07-21T01:19:22.147 回答
1

使用 git 你不能在你已经拥有的东西“前面”添加历史。每个 git commit 都引用了它的后继者 ALL COMMITS EVER(通过包含这些提交的哈希)。可以重写历史记录(并在前面添加新的提交),但这会为您提供全新的提交(更改的哈希),而不是您想要在积极使用的存储库中执行的操作。

您应该尽可能多地获取历史记录并将其声明为“初始导入”,或者尝试解决导入问题。当您谈论天数时,听起来好像您可以从靠近 svn 存储库中受益,即在 svn 服务器本身上运行命令以节省网络开销/延迟。

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

于 2013-07-17T08:28:08.250 回答