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


特別提示:本人博客部分有參考網絡其他博客,但均是本人親手編寫過並驗證通過。如發現博客有錯誤,請及時提出以免誤導其他人,謝謝!歡迎轉載,但記得標明文章出處: http://www.cnblogs.com/mao2080/

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

需要達到的目的是:

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

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

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

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

1、第一步

進入svn版本庫目錄
cd /opt/svndata
ls
#reposA reposB

2、第二步

將reposA導出到一個文件中
svnadmin dump reposA/ > f1.dump

3、第三步

將reposA中的code過濾出來,svndumpfilter include表示只保留制定的目錄和文件
svndumpfilter include dirB/code < f1.dump > f2.dump

4、第四步

將dumpfile2導入相應的目錄,也就是reposB/dirAA/,用parent-dir來指定
svnadmin load reposB --parent-dir dirAA < f2.dump
這個時候會有提示說

svnadmin: File not found: transaction '1-1', path 'dirAA/dirB/code'
這個時候,需要給reposB新建一個dirB文件夾

mkdir /path/to/reposB/dirAA/dirB
svn add /path/to/reposB/dirAA/dirB
svn ci -m "新增臨時文件夾" /path/to/reposB/dirAA/dirB
再次執行命令

svnadmin load reposB --parent-dir dirAA < f2
就會得到

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

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

參考網站:http://blog.csdn.net/tianshijianbing1989/article/details/41980675

5、常用命令

啟動svn服務:svnserve -d -r /home/svndata

關閉svn服務:ps -ef|grep svnserve 使用kill -9 殺進程號

關閉防火牆:systemctl stop firewalld.service


免責聲明!

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



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