最近因公司測試環境需要做遷移,除了應用需要遷移外,項目中平時用到的軟件都得遷,涉及到nginx,redis , active MQ ,jenkins 以及SVN。SVN的遷移涉及到了代碼的同步,在網上搜了很多SVN遷移相關的文章,發現雜而亂,最終還是完成了測試環境的SVN遷移。遷移完成後,發現整個過程是非常清晰以及有序的,遂記之。
步驟:將SVN從一臺服務器(源服務器)遷移到另一臺服務器(新服務器)上,操作分爲兩步:
1 ) 按照源服務器的版本,在新服務器安裝同樣的版本的SVN;
2 ) 同步源服務器的SVN庫到新服務器上;
SVN安裝:(以1.6.11版本爲例)
1 ) 下載 subversion-1.6.11.tar.bz2 subversion-deps-1.6.11.tar.bz2 這兩個文件
wget http://subversion.tigris.org/downloads/subversion-1.6.11.tar.bz2
wget http://subversion.tigris.org/downloads/subversion-deps-1.6.11.tar.bz2
2) 解壓
tar jxvf subversion-1.6.11.tar.bz2
tar jxvf subversion-deps-1.6.11.tar.bz2
解壓完成後,會出現一個名爲 subversion-1.6.11的文件夾 如下圖:
3 ) 安裝:( 分爲三個操作 配置安裝路徑 編譯 安裝 )
進入到 subversion-1.6.11 這個目錄下,( PS : 三個操作都在此目錄下操作 )
配置安裝路徑: ./configure --prefix=/home/yst/svn ( /home/yst/svn 這個是指定安裝到哪個目錄 )
編譯: make
安裝: make install
( PS : 編譯 和 安裝 也可以 合併成一句命令 make && make install )
至此 新服務SVN服務的 安裝已經完成了。這裏再推薦下另外的方式( 需要 root權限 ):
1) 萬能的 yum
yum install subversion
2 ) apt-get
apt-get install subversion
接下來,檢查SVN 是否安裝成功。
svn --version ( 出現version,表示安裝成功 )
如果 svn 命令找不到的話:( 就用 svn命令的全路徑去執行 svn命令在 安裝目錄(home/yst/svn)的 bin目錄下 )
SVN的遷移: ( 建議遷移的時候,將所有源庫SVN所有賬號的權限改成只讀,或者停掉SVN服務器 )
SVN的遷移有兩種方式:
1) dump出源機器SVN的代碼庫,然後load到新服務器上去。
2) 使用 svnsync 直接同步源機器代碼庫。
比較這兩種遷移的方式,我比較推薦第二種——使用svnsync進行遷移。第一種使用dump出源機器代碼庫,
dump完,看了一下dump文件,幾十個G,太大了。兩種操作的方式具體操作如下:
一、採用dump遷移SVN代碼庫:
1) dump 出源機器的SVN代碼庫: ( 依照SVN數據量的大小,時間可能會很長 )
svnadmin dump repos/ > 2414.dump (dum出文件)
repos/ 源機器上SVN代碼庫目錄
2)使用 scp(secure copy)命令,將dump出來的文件傳到 新機器上。
scp -r /home/svn-admin/repos [email protected]:/home/yst/svn/svn-admin
scp -r 源機器SVN倉庫目錄 新機器用戶名@新機器IP地址:傳到新機器的指定目錄
然後輸入新機器 linux用戶名的密碼,就在傳dump文件了。
3 ) 在 新機器上建立 倉庫
svnadmin create /home/yst/svn/svn-admin/repos4
4) 將 dump 文件 load 進 新服務的倉庫中:
/home/yst/svn/bin/svnadmin load /home/yst/svn/svn-admin/repos4 < 2414.dump
將 2414.dump < ( 寫入 ) 到 新服務器上剛剛新建的倉庫中去。
5) 啓動新機器的SVN服務:
svnserve -d -r repos4
6)查看 SVN服務是否 啓動:
ps -ef | grep svn ( 如下圖 )
PS : SVN服務的默認啓動端口是 3690, 可以通過 svnserve --listen-port 8899 -d -r repos4(SVN倉庫路徑)指定端口啓動。
二、使用 svnsync 遷移SVN代碼庫 ( 推薦使用這種方式 )
1)在新服務器上創建 代碼倉庫
svnadmin create /home/yst/svn/svn-admin/repos5
2)修改新建倉庫中hooks 下的 名爲 pre-revprop-change 的文件:
cp pre-revprop-change.tmpl pre-revprop-change
chmod 777 pre-revprop-change ( 給pre-revprop-change文件 賦執行權限 )
修改 pre-revprop-change 腳本最後一行 爲 exit 0
3)svnsync init file:///home/yst/svn/svn-admin/repos5 svn://xx.xx.xx.xx ( 初始化 )
svnsync init file:// 新機器倉庫目錄路徑 源服務器的IP(可以通過 http 協議,還可以通過svn協議)
(PS : 這塊需要輸入密碼驗證,新服務器的密碼 源服務器SVN的賬號密碼,此賬號應該有倉庫所有代碼的讀取權限)
4) svnsync sync file:///home/yst/svn/svn-admin/repos5 ( 同步 )
5) 等待同步完成,啓動SVN服務器即可。至此,SVN服務就已經遷移完了。
遷移完成之後,發現提交代碼有問題,報錯如下:
解決方式是: 將原倉庫的 uuid 複製過來,覆蓋新服務器上的UUID
參考鏈接:
SVN權限控制
https://blog.csdn.net/cuiyaoqiang/article/details/51784391
SVN sync同步:
http://blog.chinaunix.net/uid-25266990-id-2953695.html
SVN 實時同步:
http://blog.51cto.com/php2012web/1852311
https://blog.csdn.net/xyw591238/article/details/51914908