今天碰到了個郁悶的問題,svn執(zhí)行clean up命令時報錯“Previous operation has not finished; run 'cleanup' if it was interrupted”夸盟。無論你到那個父層次的目錄執(zhí)行“clean up“蛾方,都是報一樣的錯。執(zhí)行cleanup時候上陕,提示要cleanup桩砰。看來是進(jìn)入死循環(huán)了释簿。
可能是頻繁做了一些改名亚隅,文件打開的時候更新或者提交操作,導(dǎo)致svn罷工了庶溶。這個也該算是svn的bug吧煮纵。類似的情況,其實之前也碰到過偏螺。之前都是圖省事行疏,把整個svn checkout的主目錄都刪掉,重新checkout來解決的套像。但是隨著項目的深入開展酿联,要更新的文件越來越多。這個問題遲早要解決的夺巩,試試看吧贞让。問題的關(guān)鍵看來需要找到死鎖的地方,解鎖才行柳譬。網(wǎng)上查了下資料喳张。Svn的operation是存放在“work queue’“里的。而“work queue’是在內(nèi)嵌數(shù)據(jù)庫wc.db的work_queue表中的美澳∠浚看看work_queue表中放了些什么摸航,再做處理。
1.內(nèi)嵌數(shù)據(jù)庫一般是用sqlite進(jìn)行輕量級管理的柴墩。網(wǎng)上可以下到sqlite-shell-win32-x86: sqlite3.exe
2.為了方便命令行執(zhí)行忙厌,將sqlite3.exe放到svn項目的主目錄下,和.svn目錄同級下江咳。
3.執(zhí)行sqlite3 .svn/wc.db "select * from work_queue".看到有4條記錄。就是剛才我執(zhí)行的一些操作哥放。
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.執(zhí)行sqlite3 .svn/wc.db "delete from work_queue".把隊列清空歼指。
5.執(zhí)行sqlite3 .svn/wc.db "select * from work_queue".確認(rèn)一下是否已經(jīng)清空隊列,發(fā)現(xiàn)已經(jīng)沒有記錄顯示甥雕,說明已經(jīng)清空了踩身。
6.最后再試一下,看是否可以clean up了社露。果然成功了挟阻。
另外還有一種方法別人也推薦,但因為這個成功了就沒再試峭弟。就是使用命令行工具svn.exe執(zhí)行cleanup svn項目目錄附鸽。因為默認(rèn)安裝的時候,這個命令行工具是不被安裝的瞒瘸,所以需要啟動安裝程序坷备,選擇”修改“,選上”命令行工具“才行情臭。估計這個命令的實際效果和上面一種方法是類似的省撑。不過應(yīng)該比圖形界面的右鍵菜單的更強大些吧。有興趣可以試試俯在。
順便補充一下竟秫,sqlite是一個非常常用的嵌入式數(shù)據(jù)庫,就是一個db文件跷乐。像手機(jī)qq等這些軟件都會內(nèi)置一個這樣的數(shù)據(jù)庫進(jìn)行多條數(shù)據(jù)的管理肥败。