1. 程式人生 > >記錄一次svn報錯:[Previous operation has not finished; run 'cleanup' if it was interrupted] 的排錯過程

記錄一次svn報錯:[Previous operation has not finished; run 'cleanup' if it was interrupted] 的排錯過程

       前言:由於目前客戶習慣使用SVN管理程式碼,所以仍在使用SVN做程式碼管理,管理方式雖然落伍,但客戶粑粑就是上帝~~

       今天在改完十幾個類檔案批量提交時,在程式碼提交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專案可以正常使用了;

好了,東西不難,但如果久不用容易忘,特記錄下,方便自己以及後來者!