當我試圖加載/恢復我的SVN倉庫,我得到的錯誤:svnadmin的:將svndiff含有太大的窗口
svnadmin: Svndiff contains a too large window
我怎樣才能解決這個問題?
當我試圖加載/恢復我的SVN倉庫,我得到的錯誤:svnadmin的:將svndiff含有太大的窗口
svnadmin: Svndiff contains a too large window
我怎樣才能解決這個問題?
我發現了這個問題的原因,這可能會幫助你解決它 - 雖然這將很大程度上取決於你在存儲庫中的文件類型。
SVN中的文件通過名稱和文件哈希記錄(我相信它們是MD5'd)。如果您刪除文件然後嘗試再次上傳同一文件,SVN 會記住散列,而不是創建新的基本增量文件,它會將其指向它存在的先前修訂版本。
在存儲庫生命中的某個時刻,您的文件已變成「中毒」。任何匹配文件MD5的文件(不管提交路徑如何)都會導致svndiff進程失敗(原因仍然不完全清楚),因爲SVN會嘗試使用舊的和損壞的修訂版本。如果您想「修復」問題,請在本地修改文件(如果其代碼嘗試添加空白註釋),這將導致MD5更改。刪除文件並提交新的「固定」版本後,服務應該照常恢復。
現在,回到我的第一段 - 這種解決方案只能真正適用於您可以改變的文件。例如,如果你有一個100MB的視頻文件 - 那麼你需要修改它以某種方式更改散列。如果你使用可執行文件,它會變得更糟,因爲這些文件在編譯後非常難以執行。
我的建議如下:
我希望這有一些幫助,這是一個真正的痛苦到這個問題的底部。
因爲我碰到了今天這個......
有可能與FSFS數據庫中的svn庫一個損壞的修訂版本。
備份您的SVN存儲庫。
確定您的存儲庫是通過讀取$ {} REPO/DB /格式打包/分片
[[email protected] db]# cat format
4
layout linear
如果您FSFS數據庫「佈局分片」你需要獲得fsfs-reshard.py這裏: http://ymartin59.free.fr/wordpress/wp-content/2010/07/fsfs-reshard.py
(這是版本在1.6以上的版本庫工作,這傢伙的補丁仍然沒有移植到svn中繼)。
運行以下解壓庫:
./fsfs-reshard。PY $ {} REPO 0
運行驗證:
svnadmin verify ${REPO}
* Verified revision 13689.
* Verified revision 13690.
* Verified revision 13691.
svnadmin: E185001: Svndiff contains a too-large window
是有差錯出來的是修訂版1比最後校驗修訂更大的版本,我們的壞REV爲13692.
獲取fsfsverify。 py從Subversion中繼。 http://svn.apache.org/repos/asf/subversion/trunk/contrib/server-side/fsfsverify.py
在錯誤的修訂版上運行fsfsverify.py。您可能需要兩次或更多次運行-f選項。這會吐出大量的數據,但最終它會變得乾淨。
[[email protected] archive]# ./fsfsverify.py -f ${REPO}/db/revs/13692
Copy 464bytes from offset 1006867
Write 464bytes at offset 1003542
Fixed? :-) Re-run fsfsverify without the -f option
[[email protected] archive]# ./fsfsverify.py ${REPO}/db/revs/13692
運行svnadmin再次驗證。重複上述過程進一步修改錯誤。
一旦你有一個驗證庫,你可以通過運行
./fsfs-reshard.py ${REPO} 1000
運行svnadmin的又一次驗證改裝!
你的SVN倉庫應該沒關係!
不知道,如果這個工作,但純粹努力+ 1 – demoncodemonkey 2013-07-24 19:20:34
謝謝。這有助於我的情況。 – radmen 2016-04-20 11:44:50
我對所有解決方案都非常感興趣,看起來這是一個介於1.6.4之後的bug,從那以後從未得到解決:/ – Capsule 2011-02-10 09:12:27
您的存儲庫包含哪些大小文件?我處於相同的情況,並且在回購中有大約20MB的文件。 – plasmid87 2011-04-20 10:46:39