svn报错:[Previous operation has not finished; run 'cleanup' if it was interrupted] 的排错过程
今天在打开某一文档的情况下,使用SVN更新文档,在更新的过程中报错,提示需要执行clean up,果断右键执行clean up,又提示一个新的错误:"Previous operation has not finished; run 'cleanup' if it was interrupted",此后又尝试了该项目目录树不同目录进行更新或者提交,甚至把该项目删除重新check out,都会出现同样的问题;
这个时候查阅了一下资料得知:本地的SVN客户端中有一个嵌入式DB(里面大约有10多个表)SQLite,来保存SVN中管理的文件类型,项目结构树,用户操作进度等,所以我们可以大胆假设下,上述我们提交代码过程中,SVN客户端用户代码提交操作非正常的终止,导致sqlite中某个表中用来记录用户对项目A的操作(增删改等)的数据来不及更改,由于我们后续的所有针对项目A的操作,都优先从该表中检查项目A是否有未完成的操作,如果存在未完成操作就会提示"Previous operation has not finished",顺着这个思路,如果我们找到这个表,且把这个表中相关记录删除,是不是就可以解决这个问题,通过查阅相关资料发现:
在使用了svn的项目中,在项目根目录会有一个.svn文件夹,点击进入后结构如下:
就是箭头指向的这个文件,它就是SQLite数据库文件,我们可以用SQLite3.exe打开它,下面开始解决上述问题:
1、首先我们去https://www.sqlite.org/download.html 页面下,找到下载解压缩后,得到如下这么个目录,里面有个sqlite3.exe,我们就可以使用命令行的方式打开这个文件;
2、将sqlite3.exe复制到项目根目录中,通wc.db文件同目录,如下:
3、通过命令行切换到项目根目录,并彩种sqlite3 wc.db命令查看wc.db文件内容,.table命令查看wc.db中所有的表,其中WORK_QUEUE表就是用来记录用户操作如下:
命令解释:
sqlite3 wc.db:表示采用sqlite3工具打开wc.db文件,就像你使用microsoft office打开word文档一样
.table:可以认为wc.db是一个数据库文件,这个文件的本身就是一个微型数据库,.table命令表示查看这个微型数据库中的所有table
4、既然是表,那么我们可以采用sql执行增删改查就可以,在此处执行DELETE FROM WORD_QUEUE;命令执行删除;
5、4处操作完毕后,选中项目,执行svn的clean up操作,然后SVN项目可以正常使用了;
注:如果此时clean up仍然报错:
(1)我们可以输入以下命令,查看阻塞表内容:select * from work_queue;
(2)查看lock表内容:select * from wc_lock;
(3)输入命令 delete from work_queue;
(4)输入命令 delete from wc_lock;
然后重新启动项目,再次clean up;问题解决!