2009-09-28 79 views

回答

7

你應該svnadmin的轉儲你的資料庫,處理轉儲文件和svnadmin的負載在一個空的回購協議處理的文件。沒有需要svndumpfilter

svnadmin dump /repos/path > old.dump 

轉儲文件可以用Sed或其他工具(確保二進制數據不會被破壞)進行處理並更換目錄名。例如:

sed -b -e "s#^\(Node.*path\): dir1/dir_old#\1: dir1/dir_new#" old.dump > new.dump 

一旦你處理完轉儲文件:

svnadmin create /newrepos/path 
svnadmin load /newrepos/path < new.dump 
+2

不像svn dump那樣使用像sed這樣的簡單工具來處理複雜的數據結構。沒有人保證你的字符串':dir1'永遠不會出現在別的地方。 – reto 2011-10-19 17:36:44

+2

在這種情況下,加載處理後的文件時會出現「Checksum mismatch」錯誤。請參閱轉儲文件格式:http://svn.apache.org/repos/asf/subversion/trunk/notes/dump-load-format.txt – fglez 2011-10-21 07:47:07

+0

這太棒了。有用。它是唯一的簡單方法如何在svn dump中移動文件夾! – qub1n 2014-04-29 12:22:04

3

我肯定建議使用SED,因爲它是不知道的文件格式,你可能很容易使SVN轉儲文件無法使用。

此外,如果您想要更換一點而不僅僅是一個路徑,則需要更新或者直接刪除SHA1和MD5校驗碼。

修改SVN轉儲並不像開始時那樣微不足道。

昨天我有同樣的問題,我爲此寫了一個小程序。我在這裏公佈給大家使用:

https://github.com/nlmarco/svndumptransformer

它是免費軟件,並歡迎您來修改它,如果你想/需要更多的功能。

該程序僅修改文本內容(如果文件 - 例如圖像 - 被標記爲具有MIME類型「application/octet-stream」,則不會被修改)。而且由於它真的讀取和理解SVN轉儲格式,因此它不會修改屬於SVN轉儲的結構數據 - 與上面的sed命令不同。

對我來說,這個程序目前在重命名產品方面效果很好 - 導致所有路徑以及項目配置文件(=> gradle)和幾十個Java類被重命名。

我希望這個程序對其他人也有用。

Btw。我知道這個問題很老,但我希望我的答案現在可以幫助其他遇到這個問題的人。

相關問題