svn“Previous operation has not finished; run 'cleanup' if it was interrupted

weixin_34138377發表於2016-10-21

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

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

  1. 內嵌資料庫一般是用sqlite進行輕量級管理的。sqlite-shell-win32-x86-3081101.zip

  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了。果然成功了。

如果你是Mac電腦,你就看這裡吧!

  1. 第一步找到你的wc.db檔案
726092-c17240015940402d.png
螢幕快照 2016-10-21 下午2.31.50.png
  1. 使用資料庫軟體開啟wc.db。

  2. 找到欄位work_queue資料表,可以看到你之前的下載操作記錄。

  3. 清楚該記錄,你可能刪除不了,因為檔案是隻讀的,修改檔案許可權的命令:chmod 755 wc.db。

  4. 現在可以放心的刪除了,這樣操作就完成了,你可以重新進入管理svn的工具開啟目錄,進行clean了,問題解決了,是不是很方便呢?

相關文章