今天在打開某一文檔的情況下,使用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;問題解決!