Part 1 svn下載及安裝
1.下載subversion以及依賴文件
(1)subversion url : http://mirrors.hust.edu.cn/apache/subversion/subversion-1.8.19.tar.gz
(2)apr : http://archive.apache.org/dist/apr/apr-1.4.6.tar.bz2
(3)apr-util : http://archive.apache.org/dist/apr/apr-util-1.5.1.tar.bz2
(4)sqlite: http://www.sqlite.org/sqlite-amalgamation-3071501.zip
(5)zlib:http://sourceforge.net/projects/libpng/files/zlib/1.2.8/zlib-1.2.8.tar.gz
2.將文件從windows移到redhat
(1)下載pscp.exe : https://the.earth.li/~sgtatham/putty/latest/w64/pscp.exe #需配置好Putty的環境變量
(2)cd到文件壓縮包的目錄,輸入 :
pscp subversion-1.8.19.tar.gz [email protected]:/home
pscp apr-1.4.6.tar.bz2 [email protected]:/home
pscp apr-util-1.5.1.tar.bz2 [email protected]:/home
pscp sqlite-amalgamation-3071501.zip [email protected]:/home
pscp zlib-1.2.8.tar.gz [email protected]:/home
3.進入42服務器
(1)cd /home
(2)解壓(tar.b2和tar.gr解壓時有一定區別)
tar zxvf subversion-1.8.19.tar.gz
tar zxvf zlib-1.2.8.tar.gz
tar jxvf apr-1.4.6.tar.bz2 ./subversion-1.8.19/
tar jxvf apr-util-1.5.1.tar.bz2 ./subversion-1.8.19/
unzip sqlite-amalgamation-3071501 ./subversion-1.8.19/sqlite-amalgamation #sqlite-amalgamation-3071501這裏一定要改名(sqlite-amalgamation ),不然在編譯subversion會有問題
(3)cd到apr、apr--util、subversion、zlib文件夾內,編譯。
(1)./configure --prefix=/usr/local/dyw/apr
(2)make && make install
(3)./configure --prefix=/usr/local/dyw/apr-util --with-apr=/usr/local/dyw/apr
(4)make && make install
(5)./configure --prefix=/usr/local/dyw/zlib --with-apr=/usr/local/dyw/apr --with-apr-util=/usr/local/dyw/apr-util
(6)make && make install
(7)./configure --prefix=/usr/local/dyw/svn1.8 --with-apr=/usr/local/dyw/apr --with-apr-util=/usr/local/dyw/apr-util with-zlib=/usr/local/zlib
(8)make && make install
(4)測試svn是否安裝完成
(1)cd /usr/local/dyw/svn1.8/bin
(2)./svnserve --version #能顯示出一些版本信息則表示安裝正確
(5)將svn加入環境變量中
(1)vi /etc/profile
(2)在文件最後加上一句:export PATH=$PATH:/usr/local/dyw/svn1.8/bin
(3)source /etc/profile
(4)保存並退出(wq)
(6)測試svn是否安裝完成
svnserve --version #能顯示出一些版本信息則表示環境變量設置成功,無論在那個文件夾都可使用svn命令
Part 2 SVN搭建
1建立svn根目錄
mkdir -p /usr/lcoal/dyw/svn1.8data3/repositories
2將該目錄設爲SVN倉庫(下面若無特殊聲明,都在目錄/repositories下操作)
svnadmin create /usr/local/svn1.8data3/repositories #完成後repositories中會生成一些文件
3修改版本配置文件
(1)vi ./conf/svnserve.conf、authz、passwd修改內容如下(其他未做操作的不用修改,注意每一句前不能有空格)
1.svnserve.config
anon-access =none
password-db =passwd
authz-db = authz
2.passwd
yiwend = aaaaaa.1
zhangsan= aaaaaa.1
lisi= aaaaaa.1
wanger= aaaaaa.1
3.authz
[groups]
ns_lo_team = yiwend,zhangsan,lisi,wanger
[/]
@ns_lo_team =rw
yiwend =rw
zhangsan=rw
4.啓動SVN
svnserve -d -r /usr/local/dyw/svn1.8data3/repositories #默認的啓動端口號爲3690
5.檢查啓動情況
netstat -tunlp | grep svn
# tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 29818/svnserve 會出現這樣的信息
6.取消防火牆對於svn的限制
1.iptables -I INPUT -i eth0 -p tcp --dport 3690 -j ACCEPT
2.iptables -I OUTPUT -o eth0 -p tcp --sport 3690 -j ACCEPT
3./etc/rc.d/init.d/iptables save
4./etc/init.d/iptables status #查看狀態
7.停止svn
killall svnserve
Part 3 svn代碼庫的遷移
svnadmin dump命令用於導出整個Repository或Repository下的某個範圍的修訂版本。REPOS_PATH是版本庫的路徑。
[-r LOWER[:UPPER]]用於指定導出的修訂版本範圍,由參數-r和兩個用:號隔開阿拉伯數字組成。
例如:-r 0:50表示導出才版本0到版本50之間的所有修訂版,-r是revision的縮寫。
而另一個關鍵參數是--incremental。 它使用增量方式來導出版本,即每次都只導出自上一個版本以來的修改。
這樣的好處是第一:可以把一個大的文 件切分成若干個小的文件。
第二:在版本庫已經存在的情況下,我們只需要每次導出修改的部分,不需要每次都導出整個版本庫的內容。
甚至可以通過hook腳本 每天晚上自動將當天的修改dump出來做備份用。
2.svnadmin load
svnadmin load REPOS_PATH
svnadmin load命令用於從標準輸入流/其它流中導入版本庫,REPOS_PATH是要導入的目標版本庫。
3.svn switch命令語法
svn switch URL [PATH]
switch --relocate FROM TO [PATH]
svn switch命令用於更新工作副本的URL。意即指向新的版本庫位置。首先要注意的一點是我們即可以將整個工作副本指向新的URL,也可將工作副本下的某個目錄指向新的URL。
另外一個重要的參數就是--relocate。這個參數是否使用對於結果如何有很大影響,使用不當甚至可能會造成版本庫不可用。其中有兩條重要的規則:
A.假如工作副本只是映射到同一個版本庫內的不同位置,那麼使用svn switch即可
B.假如工作副本已是映射到不同的版本庫,那麼必須使用svn switch --relocate
遷移實例:
(1)進入41服務器進行dump操作
svnadmin dump /usr/local/repositories > /usr/local/repositories-dump
(2)進入42服務器利用自帶命令scp進行將41上的文件repositories-dump移植(注意防火牆,可以ping測試)
scp [email protected]:/usr/local/repositories-dump /usr/local/dyw/svn1.8data3/
(3)創建資源文件夾
svnadmin create /usr/local/dyw/svn1.8data3/repositories
(4)進行load操作(在/usr/local/dyw/svn1.8data3中,下面如無特殊制定都在這個目錄操作)
svnadmin load ./repositories < ./repositories-dump --bypass-prop-validation #後面--bypass-prop-validation的目的是忽略錯誤,出現這個錯誤的原因是工程師在輸入日誌時回車被記錄的是(Control+M / ^M)。在SVN老版本升級成1.6以上的新版本時特別常見。 規避方案是使用svnsync我要做的操作是把老的版本庫遷移的新的高版本的服務器。所以以上操作是在新的服務器上執行的:
(5)創建一個用來修復上面問題的版本庫
svnadmin create repositories-fixed
並在hooks中創建編輯文本
vi ./repositories-fixed/hooks/pre-revprop-change
內容爲:
#!/bin/sh
exit 0
(6)添加執行權限
chmod a+x pre-revprop-change
(7)初始化svnsync的目標配置庫,即repositories-fixed
svnsync init file:///usr/local/dyw/svn1.8data3/repositories-fixed file:///usr/local/dyw/svn1.8data3/repositories
(8)拷貝整個存儲庫
svnsync sync file:///usr/local/dyw/svn1.8data3/repositories-fixed
(9)進行dump操作
svnadmin dump ./repositories-fixed > ./repositories-fixed-dump
(10)重新創建行的repositories 資源文件夾
rm -rf ./repositories
svnadmin create ./repositories
(11)進行load操作,刪除repositories-fixed以及./repositories-fixed-dump
svnadmin load ./repositories < ./repositories-fixed-dump
(12)設置svnserve啓動文件夾
svnserve -d -r /usr/local/dyw/svn1.8data3/repositories