SVN 提交报错:“Previous operation has not finished; run 'commit' if it was interrupted”
今天碰到了个郁闷的问题,svn执行提交文件的时候报错“Previous operation has not finished; run 'commit' if it was interrupted”。无论你到那个父层次的目录提交文件,都是报一样的错。看来是进入死循环了。
类似的情况,其实之前也碰到过。之前将整个svn checkout的主目录都删掉,重新checkout来解决的。但是随着项目的深入开展,要更新的文件越来越多,每次这样做实在是耽误时间,印象工作效率,反正以后可能都会碰到,这次就寻找办法试着把这个问题解决了。网上百度发现一般出现这种问题是因为:出现了死锁的地方,要解锁才行。网上查了下资料发现:svn的operation是存放在“work queue’“里的。而“work queue’是在内嵌数据库wc.db的work_queue表中的。看看work_queue表中放了些什么,再做处理。
1. 内嵌数据库一般是用sqlite进行轻量级管理的。网上可以下到sqlite-shell-win32-x86: sqlite3.exe
2. 为了方便命令行执行,将sqlite3.exe放到svn 项目的主目录下,和.svn目录同级下。
3. 运行cmd 进入到项目目录下,比如,我的项目是在D:\WorkSpace\registry_mys这个目录
在cmd的dos框输入如下操作:
(1)d: 进入D:/文件目录
(2)cd WorkSpace\registry_mys 使用cd命令进入项目目录
4. 执行 sqlite3 .svn/wc.db "select * from work_queue".看到有4条记录。就是刚才我执行的一些操作。
503|(dir-remove target/classes/com 1 1)
5. 执行 sqlite3 .svn/wc.db "delete from work_queue". 把队列清空。
6. 执行 sqlite3 .svn/wc.db "select * from work_queue". 确认一下是否已经清空队列,发现已经没有记录显示,说明已经清空了。
7. 最后再试一下,看是否可以 提交文件了。果然成功了。