SVN恢复中止的检出

57

情况 - 拥有庞大的代码仓库,连接缓慢且不可靠(即VPN会不时断开)。

我们经常需要分支、移动代码,因此每隔一段时间就需要从代码库中获取整个新分支(checkout)。

是否有一种方式可以“恢复”已经中断的checkout操作?使用相同参数执行svn checkout是否安全,期望它跳过已下载的内容并下载未下载的内容?


你考虑过使用DVCS作为Subversion的客户端吗? - Rudi
非常好的问题,仍然合法。也就是说,我现在必须从svn检出一些公开可用的源代码,但链接也很糟糕 - 因此,在没有分布式版本控制系统的情况下,这也有用例。 - Zlatko
7个回答

86

遇到了同样的问题。我不得不中断一个结账流程,因为它花费了极长的时间。当我去“恢复”结账时,不清楚是重新启动结账还是只需执行 svn update

尝试使用 svn update 恢复结账时,出现了一个错误信息,指出该目录被“锁定”。我尝试从Tortoise SVN发出“释放锁定”,但这并没有帮助。

最终,我不得不发出一个 svn cleanup 来解除Subversion所占用的任何束缚。之后,我能够通过再次执行更新(svn update或从Tortoise SVN上下文菜单中选择“SVN Update”)来继续我之前启动的结账。


但是如果在检出完成之前没有要进行 SVN 更新的项目怎么办?那该怎么办呢?如果我尝试重新检出,它会说无法对非空文件夹执行此操作...我不想再从空文件夹开始了...因为可能会再次断开连接...如何恢复? - CthulhuJon
好的,问题解决了...打开首选项...关闭它,打开上一个项目(如果你有多个项目在进行),然后重新打开Smart SVN。接着选择“重新打开现有的工作副本”,并浏览到部分检出的文件夹。这将在您的列表中创建一个新项目,然后您可以执行“修改->清理”和“更新”操作。 - CthulhuJon
对于一些旧客户端,它无法正常工作(例如1.6.16版本)。 - Sandburg

33

来自Subversion文档

如果您中断了检出过程(或者其他因素中断了您的检出,例如失去连接等),则可以通过再次发出相同的检出命令或更新不完整的工作副本来重新开始。


9
我认为它们是相同的。这段话来自Subversion邮件列表:http://svn.haxx.se/users/archive-2005-04/1908.shtml,其中Ben Collins-Sussman说:“没有区别。在幕后,它们是相同的代码。” - D Krueger
@Marc的回答中提到的svn cleanup可能是必要的,但你提供的文档参考更有价值! - Kalle Richter
1
无法完成此操作...它会抱怨文件夹不为空。 - CthulhuJon

13
svn update

这个可以为你完成工作。


1
如果最初的 svn checkout 命令已经完成了项目目录和其 .svn 隐藏仓库信息的创建,否则您将不得不重新发出 svn checkout 命令。 - Jesse Chisholm

2
我也遇到了同样的问题,最终解决方法是: 步骤1:在根目录中右键单击空白处,选择“TortoiseSVN > 清理...”,然后勾选弹出窗口中的所有选项并运行此操作。 步骤2:右键单击空白处,选择“SVN 更新...” 现在它开始恢复了。

1

移动到复制目录中

svn update    
svn cleanup
cd..

svn checkout download_path

1

我必须在一个不可靠的连接上checkout一个大型代码库,所以 co 失败了很多次。基于这里的回答,我最终得到了一个小的循环,不断尝试checkout(适用于bash和其他Unix shell):

while ! svn co http://myserver/svn/myrepo/
do
    (cd myrepo; svn cleanup)
done

如果您想知道需要多少次重试,可以使用相同的方式进行一些装饰:
i=0
while ! svn co http://myserver/svn/myrepo/
do
    i=$[i+1]
    (cd myrepo; svn cleanup)
done
echo $i


1

在我看来,有三种可能性:

  • 它可以正确完整地检出,让你无需头疼。问题解决了。

  • 它会检查上次未被检出的所有内容。你只需要执行 'svn update' 就行了。

  • 它会发现一些已经被检出但是被修改过的文件,会报错并中止操作。你需要手动删除冲突的文件。

无论如何,任何成功从代码库检出的文件都会在本地树中关联元数据,这将确保 'svn update' 可以获取到最新版本。


所以您的意思是在第一次“checkout”之后,我只需要不断运行“update”,直到我拥有整个项目? - Daniel Mošmondor
我建议您再次运行svn checkout……我不确定会发生什么。我还建议您在成功检出后立即运行svn update。 - Eugene Smith
svn checkout 一次只有1%的成功率,因为上述连接问题... - Daniel Mošmondor

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