svn“Previous operation has not finished; run 'cleanup' if it was interrupted“報錯的解決方法

今天碰到了個鬱悶的問題,svn執行clean up命令時報錯“Previous operation has not finished; run 'cleanup' if it was interrupted”。無論你到那個父層次的目錄執行“clean up “,都是報一樣的錯。執行cleanup時候,提示要cleanup。看來是進入死循環了。

可能是頻繁做了一些改名,文件打開的時候更新或者提交操作,導致svn罷工了。這個也該算是svnbug吧。類似的情況,其實之前也碰到過。之前都是圖省事,把整個svn checkout的主目錄都刪掉,重新checkout來解決的。但是隨着項目的深入開展,要更新的文件越來越多。這個問題遲早要解決的,試試看吧。問題的關鍵看來需要找到死鎖的地方,解鎖才行。網上查了下資料。Svnoperation是存放在“work queue’“裏的。而“work queue’是在內嵌數據庫wc.dbwork_queue表中的。看看work_queue表中放了些什麼,再做處理。

1.    內嵌數據庫一般是用sqlite進行輕量級管理的。網上可以下到sqlite-shell-win32-x86: sqlite3.exe

2.    爲了方便命令行執行,將sqlite3.exe放到svn 項目的主目錄下,和.svn目錄同級下。

3.    執行  sqlite3 .svn/wc.db "select * from work_queue".看到有4條記錄。就是剛纔我執行的一些操作。

226539|(sync-file-flags 93目錄名 文件名)

226540|(file-remove 21 .svn/tmp/svn-7B43C232)

226541|(sync-file-flags 目錄名 文件名)

226542|(file-remove 21 .svn/tmp/svn-7B48224E)

4.    執行  sqlite3 .svn/wc.db "delete from work_queue". 把隊列清空。

5.    執行 sqlite3 .svn/wc.db "select * from work_queue". 確認一下是否已經清空隊列,發現已經沒有記錄顯示,說明已經清空了。

6.    最後再試一下,看是否可以  clean up了。果然成功了。

另外還有一種方法別人也推薦,但因爲這個成功了就沒再試。就是使用命令行工具svn.exe 執行cleanup svn項目目錄。因爲默認安裝的時候,這個命令行工具是不被安裝的,所以需要啓動安裝程序,選擇修改,選上命令行工具才行。估計這個命令的實際效果和上面一種方法是類似的。不過應該比圖形界面的右鍵菜單的更強大些吧。有興趣可以試試。  

 

順便補充一下, sqlite是一個非常常用的嵌入式數據庫,就是一個db文件。像手機qq等這些軟件都會內置一個這樣的數據庫進行多條數據的管理。

文章來源: http://blog.csdn.net/superch0054/article/details/38668017

僅作自己留檔參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章