一、问题描述
前提条件,使用的版本控制工具是 SVN。
今天需要更新接口文档,所以就使用svn客户端(俗称小乌龟)update了一下,结果了如下错误:
Error : Previous operation has not finished; run ‘cleanup’ if it was interrupted.
Error : Please execute the ‘Cleanup’ command.
二、报错原因
本地的SVN客户端中有一个嵌入式 wc.db(里面大约有10多个表)SQLite,来保存SVN中管理的文件类型,项目结构树,用户操作进度等。当SVN客户端用户代码提交操作非正常的终止,导致sqlite中某个表中用来记录用户对项目A的操作(增删改等)的数据来不及更改,由于我们后续的所有针对项目的操作,都优先从该表中检查项目A是否有未完成的操作,如果存在未完成操作就会提示 “Previous operation has not finished”。
三、解决方案
3.1 执行 Cleanup 命令
根据报错信息提示,需要执行 Cleanup 命令,于是就按照提示去执行 Cleanup 命令,
但是又报错了,需要构选 “Break write locks” 命令。
于是根据提示信息把 “Break write locks” 打上勾,再次执行 cleanup 命令
结果神奇般的好了,成功了。Cleanup has successfully processed the following paths: …
至此,对于我来说这个问题已经解决了,但是我是执行了很多次 Cleanup 命令之后,然后电脑重启又执行了好几次 Cleanup 命令,最终得以解决。
如果对于屏幕前的你来说还没有解决,请继续往下看其他解决方案…
3.2 删除WORK_QUEUE表中数据
在使用了svn的项目中,在项目根目录会有一个.svn文件夹,这个是隐藏文件夹, 需要开启显示隐藏文件功能才能看到此文件夹。
.SVN文件夹中有个 wc.db 文件,该文件是sqlite的文件型数据库,使用相关工具即可打开,例如 Navicat 等。
打开数据库后,可以看到表 WORK_QUEUE,删除此表中的数据即可。
上述操作完成后,然后在执行 svn 的 cleanup 操作。
3.3 重新Checkout整个工程
将**.svn文件删除,重新checkout工程下来。在这里可以保留当前已有的项目代码,说svn在checkout**过程中检测到已有文件存在时不会再重新下载,下载速度会比较快一些。
但是这样感觉还是不太好,万一checkout的文件出现问题,倒不如全部删除项目,完完全全的checkout一份下来。
本文完结!