SVN跨版本庫遷移目錄並保留提交日志


現在有一份代碼code在版本庫reposA/dirB/下,現在想把它移動到reposB/dirAA/下,本來打算交給SA做,沒想到SA似乎 也不太懂的樣子。於是,自己在VPS搭建了一個svnserver,然后在網上查了一下資料,確實沒有明確的攻略,不過,綜合一下,卻也解決了問題。

需要達到的目的是:

1. 將代碼移動到新的版本庫

2. 將原始的提交記錄保留

版本庫的結構如下,有reposA和reposB這兩個版本庫,然后紅色的reposA/dirB/code就是需要移動的代碼目錄。本來打算用 svn move來做的,后來發現因為是不同的版本庫,所以這個想法被淘汰了。於是就要在server上想辦法了,svnadmin有兩個參數dump和load 可以將版本庫提取出來/加載進去,還有命令svndumpfilter可以過濾某些不想要/只想要的目錄,這些就足以達到目的了。

版本庫的結構如下,要將code移動到reposB/dirAA下邊:

 

於是,要開始嘍
注意,svn命令是在svn client端執行的,svnadmin svnserver svndumpfilter都是在svn server端執行的。

1 2 3 4 5 6 7 8 9 10 11 12 13 14
#進入svn版本庫目錄 cd /opt/svndata   ls #reposA reposB   #將reposA導出到一個文件中 svnadmin dump reposA/ > f1   #將reposA中的code過濾出來,svndumpfilter include表示只保留制定的目錄和文件 svndumpfilter include dirB/code < f1 > f2   #將dumpfile2導入相應的目錄,也就是reposB/dirAA/,用parent-dir來指定 svnadmin load reposB --parent-dir dirAA < f2

這個時候會有提示說

1
svnadmin: File not found: transaction '1-1', path 'dirAA/dirB/code'

這個時候,需要給reposB新建一個dirB文件夾

1 2 3
mkdir /path/to/reposB/dirAA/dirB svn add /path/to/reposB/dirAA/dirB svn ci -m "新增臨時文件夾" /path/to/reposB/dirAA/dirB

再次執行命令

1
svnadmin load reposB --parent-dir dirAA < f2

就會得到

1 2 3 4
... * adding path : dirAA/dirB/code ... done. * adding path : dirAA/dirB/code/fileA ... done. ...

然后,code文件夾現在在reposB/dirAA/dirB/code/這個路徑,可以使用svn mv在客戶端移動目錄

1
svn mv /path/to/reposB/dirAA/dirB/code/ /path/to/reposB/dirAA/

這樣就把reposA/dirB/code/轉移到了reposB/dirAA/code/,並且保留了相應的提交日志,目標達成。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM