這兩天在使用 Subversion 控管中某個專案的 "Show Log" 功能時,每每出現要我選擇是否使用離線查看Log的功能,如果一直選擇否的話,最後就跳出一個『有缺陷的檔案』的錯誤訊息,當時直覺認為可能是自已的專案目錄有什麼問題而造成,因為Update 和 commit 是正常的,由於正在趕著把某項功能做出來,所以暫時沒有花時間去解決它。沒多久,其他同事也發現Check Out整個專案的目錄也無法成功,最後出現一樣的錯誤訊息『有缺陷的檔案』。由於訊息並不明確,所以問題為何實在令人費解。 上網搜尋了一下『有缺陷的檔案』,發現有相關訊息的文章實在少得可憐,而且似乎都沒有較好的解決方式。如果直接還原備份的Subversion檔案,這樣一定是可以解決的(前提是必需先知道從哪天開始就出現這樣的問題),且必需冒著遺失這幾天Commit版本的風險,所以當下並不是最好的解決方式。既然中文訊息找不到,那改成搜尋英文的訊息看看呢?前題是得先知道對應的英文訊息是什麼(通常這種程式訊息,直接用翻譯軟體是找不出正確的對應訊息的,千萬別犯傻了!);所幸找到一段svn的程式碼如下:
#: include/svn_error_codes.h:951 msgid "Malformed file" msgstr "有缺陷的檔案"網址:http://svn.apache.org/repos/asf/subversion/branches/artem-soc-work/subversion/po/zh_TW.po
由此可以得知對應的英文訊息為『Malformed file』,上網再搜尋一下,馬上發現有許多的文章,看了幾篇文章以後,發現錯誤的問題可能在於某個版本Commit上去的時候出現了問題,導致一遇到該版本時,SVN就會回出這樣的錯誤訊息,不過因為事情已經發生了幾天,中間大概也commit了上百個版本,所以實在不知道問題在哪裡。後來找到StackOverflow中也有人提出這樣的問題,原來svnadmin 工具有個Dump的功能,可以藉此跑過所有的版本,來確認問題是出在哪一版本上,用法如下:
svnadmin dump /SVN目錄/MyProject > nul

這樣就會依序Dump所有的版本號碼出來,如果遇到錯誤的版本,就會跳出錯誤訊息,這麼一來要解決問題就不是難事了(看了幾篇討論的結果,也知道File Base的 Repository 能夠針對該版本進行修改(最好是用前一版覆蓋錯誤的版本,以免改錯)。 Dump 的結果,錯誤發生在10號版本,到SVN Server的目錄下(\SVN目錄\MyProject\db\revprops\)一查,果然該版本內容都是NULL Code,顯然檔案內容不正確(經過確認,在Client端,如果使用離線瀏覽Log時,最早的版本也停在11)刪掉該版本檔案後,用前一版9複製成10以後,問題解決,免除掉一段可能遺失的回憶修改記錄的感覺真好!
特別提醒一下,由於操作SVN檔案事關重大,為免發生不可回復的問題,務必事先備份SVN檔案再進行俢復的操作。
0 意見:
張貼意見