目錄
4.2、checkout與export的區別於使用... 33
1、Linux上subversion下載
在Linux上運行的SVN 是將服務端和客戶端綁定在subversion裏面的,所以下載的時候只需要下載一個subversion的tar包。
Windows上SVN客戶端官網:https://tortoisesvn.net/
Linux上SVN官網:http://subversion.apache.org/
進入SVN客戶端TortoiseSVN官網(也可以直接進入Linux上SVN官網)
點擊Apache™ Subversion (SVN)® 進入Apache的版本控制頁
點擊Source Download 進入下載頁
或者在該下載頁的下面有當前最新版和當前上一個版本,以及發佈存檔庫
點擊archive download site進入舊版本倉庫
選擇需要的版本直接點擊下載,或者複製鏈接保存,再到Linux上進行下載。
複製subversion-1.10.2.tar.gz版本鏈接
http://mirrors.hust.edu.cn/apache/subversion/subversion-1.10.2.tar.gz |
複製subversion-1.9.9.tar.gzz版本鏈接
http://mirrors.hust.edu.cn/apache/subversion/subversion-1.9.9.tar.gz |
2、Linux上subversion的安裝
2.1、查詢系統之前安裝的舊版本
svn --version |
自己決定是否卸載
卸載命令
yum remove subversion |
查看是否卸載完成
[root@localhost ~]# svn --version |
卸載完成
2.2、yum安裝yum源默認版本
查看yum源中subversion的版本
[root@localhost ~]# yum list subversion |
執行yum源安裝subversion
[root@localhost ~]# yum -y install subversion |
查詢安裝是否完成
[root@localhost ~]# svn --version |
安裝完成。
2.3、yum安裝自定義版本
在yum源配置文件中配置自己需要的軟件版本yum源。
http://opensource.wandisco.com/這個網址是wandisco整理的rpm包,在這個網址下有各種版本的subversion。
subversion1.10版本的rpm包地址:
http://opensource.wandisco.com/centos/7/svn-1.10/RPMS/
在該路徑下是subversion通過yum源安裝的配置文件和rpm包以及當前版本的依賴。
卸載舊版本
[root@localhost ~]# yum remove subversion |
清除yum緩存
yum 會把下載的軟件包和header存儲在cache中,而不自動刪除。如果覺得佔用磁盤空間,可以使用yum clean指令進行清除,更精確 的用法是yum clean headers清除header,yum clean packages清除下載的rpm包,yum clean all一全部清除。
[root@localhost ~]# yum clean all |
在yum配置文件中添加設置subversion1.10的yum源
查看系統yum源配置文件
[root@localhost ~]# cd /etc/yum.repos.d/ |
備份系統默認的yum配置文件(複製一份並添加文件後綴名爲.back)
[root@localhost yum.repos.d]# cp CentOS-Base.repo CentOS-Base.repo.back |
備份完成
用編輯器打開該配置文件
[root@localhost yum.repos.d]# vi CentOS-Base.repo |
在文件中追加配置
[WandiscoSVN]
|
保存退出
查看添加配置後yum源中可以安裝的subversion的版本
[root@localhost yum.repos.d]# yum list subversion |
安裝subversion
[root@localhost ~]# yum -y install subversion |
查看安裝
[root@localhost ~]# svn --version |
安裝高版本替換低版本成功
3、Linux上SVN服務端和客戶端環境搭建
3.1、服務端命令與客戶端命令
在subversion中包含有服務端和客戶端,在執行命令時需要分清服務端命令和客戶端命令。
服務端命令:
svnserver #控制svn系統服務的啓動等
svnadmin #svn版本庫的創建/導入/導出/刪除等
svnlook #查看版本庫的信息
客戶端命令:
svn #版本庫的檢出/更新/提交/重定向等
3.2、版本庫的創建與刪除
創建保存版本庫的目錄
例:
在/usr/local/創建svn的保存版本庫的目錄SvnRepository
[root@localhost ~]# mkdir /usr/local/SvnRepository |
創建svn版本庫
svnadmin create 路徑
版本庫沒有指定一定需要創建在某個目錄下
[root@localhost ~]# svnadmin create /usr/local/SvnRepository/testrpo
|
在創建的這個版本庫下會自動創建svn相關的配置文件
創建版本庫時可以配置的參數:
--fs-type #用來指定版本庫數據保存類型,該參數的類型有fsfs和dbd,推薦使用fsfs數據類型。
例如:在/usr/local/SvnRepository/目錄下創建testrpo1版本庫並指定版本庫保存數據的類型爲fsfs。
刪除版本庫:
rm -rvf 版本庫路徑
直接使用Linux的刪除命令將版本庫刪除即可
例:刪除/usr/local/SvnRepository/目錄下的testrpo2版本庫
[root@localhost SvnRepository]# rm -rvf testrpo2 |
3.3、版本庫配置及權限分組
版本庫的配置:
版本庫的配置文件位於創建的版本庫的目錄下的conf目錄下
該目錄下文件保存的信息分別爲:
authz:配置用戶組合用戶組的權限
passwd:配置用戶名和用戶密碼
svnserve.conf:配置默認權限、權限配置文件及密碼配置文件
svnserve.conf配置文件
使用編輯器打開svnserve.conf文件
[root@localhost conf]# vi svnserve.conf |
將註釋掉的重要配置信息解註釋,更改未通過驗證的用戶權限爲none,其他配置爲默認
更改完成保存退出。
passwd配置文件:
使用編輯器打開passwd文件
[root@localhost conf]# vi passwd |
添加用戶zxr密碼爲123456
添加完成保存退出。
authz配置文件:
使用編輯器打開authz文件
[root@localhost conf]# vi authz |
用戶組(group)配置,該配置的格式爲組名等於用戶名列表,每個用戶需要用逗號隔開,每一行表示一個用戶組。
配置組的權限時需要在組的前面加上@符號
例:
用戶組配置:
配置用戶組pm,組員爲zxr
配置用戶組dev,組員爲zxr0,zxr1,zxr2
配置用戶組rookie,組員爲zxr3
pm = zxr
|
指定根目錄配置用戶組權限:
pm組具有讀寫權限(rw),dev組只有讀權限(r),rookie組只有讀權限(r),
此處的讀(r)表示:在客戶端可以跟新服務器上的代碼到本地
此處的寫(w)表示:在客戶端可以提交代碼到服務器
[/]
|
指定版本庫配置權限:
配置testrpo版本庫權限爲pm組可讀寫(rw),用戶zxr1可讀寫(rw),用戶zxr2只能讀(r),用戶zxr3無權限
[testrpo:/]
|
指定版本庫下的某個目錄或文件權限配置:
配置testrpo版本庫下的test01目錄的權限爲所有人可讀寫(rw)
[testrpo:/test01]
|
全部配置如圖
配置完成保存退出。
3.4、版本庫的訪問
svn是屬於集中式的版本庫解決方案,訪問拓撲圖:
SVN是跨平臺的,可以在任何系統上訪問SVN服務器上的內容。
3.4.1、啓動
指定啓動運行創建的版本庫testrpo
[root@localhost ~]# svnserve -d -r /usr/local/SvnRepository/testrpo
3.4.2、windows客戶端的訪問:
在Windows上安裝與服務端相同版本的svn的客戶端(TortoiseSVN)。安裝完成之後創建一個文件夾存放從服務器檢出的svn版本庫。
創建版本庫爲SVNRepo
進入SVNRepo目錄,點擊鼠標右鍵,點擊SVN Checkout(檢出),填寫URL,點擊確定。
彈出用戶認證信息
填寫完成用戶信息點擊確定。彈出檢出過程。
檢出完成,點擊確定。此時該目錄下會出現一個隱藏文件.svn
此時鏈接svn的服務器端成功
注意:在此鏈接過程中,如果出現鏈接不上,首先需要先telnet一下當前svn服務器的3690端口號,看端口是否開通,如果端口是通的,可能是svn服務器與客戶端的版本不兼容,如果端口不通,需要開通svn服務器上的3690端口。
centos7使用的防火牆爲firewalld開放端口方法是:
[root@localhost ~]# firewall-cmd --zone=public --add-port=3690/tcp --permanent |
#開通防火牆3690端口號
[root@localhost ~]# systemctl restart firewalld.service |
#重啓防火牆服務
[root@localhost ~]# firewall-cmd --zone=public --list-ports |
#查看所有打開的端口
1、firewalld的基本使用
啓動: systemctl start firewalld
關閉: systemctl stop firewalld
查看狀態: systemctl status firewalld
開機禁用 : systemctl disable firewalld
開機啓用 : systemctl enable firewalld
3.4.3、Linux上客戶端的訪問
在Linux上svn服務器上保存的是二進制文件,所以在svn服務器的版本庫中看不到提交到svn服務器上的文件,只有通過Linux上的客戶端才能看到svn版本庫中的文件。
在/usr/local/目錄下創建svn工作副本文件svnwork
[root@localhost local]# mkdir /usr/local/svnwork
進入創建的工作副本svnwork
[root@localhost local]# cd svnwork/
檢出svn版本庫
[root@localhost svnwork]# svn checkout svn://192.168.244.128
查看工作副本中的文件
[root@localhost svnwork]# ls
更新版本庫(必須先進入到檢出的目錄下執行該更新命令,否則會報錯沒有找到工作副本)
[root@localhost svnwork]# svn update
提交文件
[root@localhost svnwork]# touch cl.txt #在當前svn工作副本中創建文件cl.txt
編輯cl.txt文件
[root@localhost svnwork]# vi cl.txt
編輯完畢保存退出
添加文件cl.txt文件到當前工作副本的svn庫中
[root@localhost svnwork]# svn add cl.txt
向svn服務器提交cl.txt文件
提交命令; svn commit -m "註釋" 需要提交的文件
[root@localhost svnwork]# svn commit -m "commit create file cl.txt" cl.txt
-m "commit create file cl.txt"表示註釋
提交成功,在Windows上的客戶端中檢測是否提交成功
進入Windows上的svn檢出工作副本,右鍵鼠標,點擊svn checkout
更新成功會,會看到在Linux上的客戶端提交的文件。
3.4.3、重啓
首先查看svn的進程:
查看進程命令:ps -ef(查看所有進程);要篩選的話用grep,
篩選svn的進程命令:ps -ef|grep svn
[root@localhost SvnRepository]# ps -ef|grep svn
殺死主進程:
殺死進程的命令用kill -9 進程id
[root@localhost SvnRepository]# kill -9 12444 #殺死進程ID12444
啓動svn:
啓動svn的命令用svnserve -d -r創建的版本庫路徑
-d表示svnserve.exe作爲服務程序運行在後臺;-r表示將創建的版本庫的目錄當作根目錄。
[root@localhost SvnRepository]# svnserve -d -r /usr/local/SvnRepository/testrpo
#啓動運行版本庫/usr/local/SvnRepository/testrpo
在此查看svn進程
重啓成功。
3.5、svn服務自動啓動
只需要在系統文件/etc/rc.local文件中添加啓動軟件的命令,就可以實現開機自動啓動,因爲系統啓動以後會加載這個文件。
啓動運行指定版本庫的命令:
svnserve -d -r /usr/local/SvnRepository/testrpo
使用編輯器打開/etc/rc.local文件進行編輯
[root@localhost ~]# vi /etc/rc.local
添加啓動命令
svnserve -d -r /usr/local/SvnRepository/testrpo
保存退出。
查看/etc/rc.local這個文件是否擁有執行權限,這個文件在centos7中默認是沒有執行權限的,如果沒有執行權限,開機是不能夠執行該文件的,因此需要賦予執行權限(x)
[root@localhost ~]# chmod +x /etc/rc.d/rc.local #授予/etc/rc.d/rc.local文件寫的權限,/etc/rc.local這個文件只是/etc/rc.d/rc.local的快捷方式。
[root@localhost ~]# reboot #重啓系統
[root@localhost ~]# ps -ef|grep svn #查看svn的進程
開機自動啓動成功
4、svn的基本操作
4.1、svn的常見術語及文件狀態
常見術語:
版本庫、檢出、工作副本、更新、提交、版本、版本號
文件狀態:
無版本控制、增加、修改、常規、衝突、刪除、鎖定
研發A在客戶端的工作副本中新建文件或文件夾後的狀態爲:無版本控制
此時該文件並未加入版本控制中
要對“無版本控制”的文件加入到版本控制中需要執行“增加(add)”操作
此時該文件狀態稱爲“增加”
要對“增加”的文件加入到版本控制中需要執行“提交(commit)”操作,
執行提交操作以後服務器收到該文件以後進行保存操作,完成後將版本號加1,並向工作副本發送一個反饋信號,客戶端收到該信號以後,也將自己的工作副本加1,同時將提交的文件又變成“常規”狀態
當研發B進行了更新操作
研發B對文件進行了修改,此時文件的狀態變爲“修改”狀態
此時研發B向服務端提交了這些文件
以後,服務端保存後,版本號加1,變爲了2,並且客戶端二的版本也變成了2,此時它的文件也變成“常規”狀態
當研發三執行更新操作,默認更新得到的數據就是最新版本的數據,因此更新到了版本2,直接跳過了版本1,如果在更新的時候指定參數版本號,可以指定更新到指定的版本。
4.2、checkout與export的區別於使用
checkout 表示檢出
export 表示導出
checkout檢出的工作副本目錄中包含.svn文件夾,也就是checkout檢出的工作副本中存在.svn的文件,檢出後的文件是在版本控制之下的
export導出的工作副本目錄中沒有.svn文件夾,也就是單存的項目文件,沒有.svn的文件夾,並且導出後的文件不在版本控制之下,所以export導出的文件不能稱之爲工作副本,因爲.svn文件標記着工作副本的一切變化,如果是需要導出項目給客戶演示的話,直接導出就可以了,就不需要用到版本控制。
例:
svn checkout -r 2 #檢出版本2
svn export -r 3 #導出版本3
4.3、add、ci、up、del
add:添加文件到版本控制
svn add 文件目錄名 --non-recursive #只增加指定的目錄,不增加文件目錄下的文件
svn add * #增加當前目錄下的所有文件到版本控制中,如果是目錄增加了,目錄下的文件沒有增加,那該命令不會掃描已增加的目錄下未增加的文件
svn add * --force #強制執行添加所有沒有添加到版本控制中的文件或文件目錄
commit(ci):提交修改到服務端(創建一個新版本號)
svn commit -m “備註” 文件名 #提交指定文件到svn服務器(-m參數是必須要加的參數)
svn commit -m “備註” * #提交當前目錄下所有修改過的文件
update(up):更新工作副本
svn update #更新工作副本(默認情況下,每個文件只會從服務端更新一次最新版本)
svn update * #強制更新所有文件爲最新版本
svn update -r 版本號 文件名 #指定更新到某個版本號
delete(del):從版本庫中刪除文件或目錄
svn delete 文件名 #從版本庫中刪除文件或目錄
svn delete -m “備註” 文件名 #刪除文件時添加備註
4.4、客戶端diff、mkdir、cat
diff:版本差異比較
svn diff 文件名 #比較本地操作過的工作副本和本地最後一次從服務器更新的副本
svn diff -r 版本號 文件名 #比較當前修改過的文件和指定的歷史版本
svn diff -r 版本號1:版本號2 文件名 #比較兩個歷史版本中文件的差異
svn diff #掃描所有修改過的文件和本地最後一次從服務器更新的副本比較
mkdir:創建目錄並增加到版本控制
svn mkdir test.txt #創建文件test.txt文件並添加到版本控制中
cat:不檢出工作副本,直接查看指定文件(可以脫離工作副本)
svn cat svn://192.168.244.128/index #在Linux系統上,不在svn的工作副本中,查看指定文件。
4.5、工作副本還原revert
將修改過的文件還原爲與最後一次跟新副本的文件一致(在未添加到版本控制之前),修改的內容是不保存的,也就是將本次的修改不生效,還原到最後一次更新的工作副本
svn revert 文件名 #指定還原文件
svn revert * #還原當前目錄下的所有文件或目錄
svn revert --resursive * #遞歸還原當前目錄下的所有文件或目錄
4.6、二進制衝突與樹衝突
二進制衝突:一些代碼文件中具體到某個文件的具體行數
如果開發B在09:20進行一次更新,那就是說,服務器已經默認開發B已經知道了開發A的修改,也就不會報衝突。
樹衝突:發生衝突的文件都不是二進制文本文件
樹衝突無法精確到行,並且處理樹衝突必須處理整個文件,就比如兩個開發人員在不同時間提交了相同圖片名的不同圖片。
處理衝突:
在協商之後處理完成衝突後需要告訴svn衝突已解決,
svn resolved 文件名 #告訴服務器衝突解決完畢,可以正常提交
4.7、鎖定lock與解鎖unlock
鎖定與解鎖就是爲了防止衝突的解決方案
svn lock 文件名 #鎖定文件,防止其他成員對文件進行修改,如果進行提交操作之後,會將該文件自動解鎖
svn commit -m “註釋” --no-unlock 文件名 #對鎖定的該文件提交後,依舊不解鎖。
svn unlock 文件名 #解鎖文件
5、svn的進階應用
5.1、ls、st、log、info
svn list #列出當前目錄下處於版本控制的所有文件
svn status #列出工作副本中的文件(夾)的狀態
文件的狀態的含義:
? #無版本控制
D #已被標記從版本庫中刪除
M #已被編輯過
A #已被標記增加到版本控制中
R #文件被替換
C #文件存在衝突
! #文件缺失
svn log #查看提交日誌(來自svn commit -m “註釋”)
svn info #工作副本及文件(夾)的詳細信息
5.2、多版本庫解決方案
TCP/IP協議的標準:
TCP/IP協議規定端口號範圍爲0-65535號
0-1023號爲公認端口
1024-49151號爲註冊端口
49152-65535號爲私有端口
5.1.1、不同端口啓動多個版本庫
在創建完版本庫後,啓動多個版本庫需要指定監聽的端口號
創建版本庫:
進入到svn版本庫的保存目錄下,創建多個版本庫
[root@localhost ~]# cd /usr/local/SvnRepository/
#進入到svn版本庫的保存目錄下
[root@localhost SvnRepository]# svnadmin create test01 #創建版本庫test01
[root@localhost SvnRepository]# svnadmin create test02 #創建版本庫test02
[root@localhost SvnRepository]# svnadmin create test03 #創建版本庫test03
[root@localhost SvnRepository]# ls #查看創建的版本庫
分別修改版本庫下面的配置文件
authz:配置用戶組合用戶組的權限
passwd:配置用戶名和用戶密碼
svnserve.conf:配置默認權限、權限配置文件及密碼配置文件
指定端口監聽啓動版本庫:
指定端口啓動運行版本庫
[root@localhost SvnRepository]# svnserve -d -r /usr/local/SvnRepository/test01 --listen-port 3691 #指定監聽端口爲3691,啓動版本庫test01
[root@localhost SvnRepository]# svnserve -d -r /usr/local/SvnRepository/test02 --listen-port 3692 #指定監聽端口爲3692,啓動版本庫test02
[root@localhost SvnRepository]# svnserve -d -r /usr/local/SvnRepository/test03 --listen-port 3693 #指定監聽端口爲3693,啓動版本庫test03
[root@localhost SvnRepository]# ps -ef|grep svn #查看svn的進程端口
這樣,三個新添加的svn版本庫都運行起來了
如果需要停止所得版本庫運行,執行kill svnserve
檢出多個版本庫
svn checkout svn://192.168.244.128:3691 /usr/local/svnwork/test013691
#檢出指定端口監聽的版本庫到指定工作副本中
5.1.2、一個端口啓動多個版本庫
多個版本庫放在同一個目錄下
在啓動運行版本庫時指定運行版本庫的父級目錄,這樣一次就可以運行啓動多個版本庫
[root@localhost SvnRepository]# svnserve -d -r /usr/local/SvnRepository/
檢出的時候需要哪個檢出哪個版本庫就在IP後面加上版本庫的名稱
[root@localhost svnwork]# svn checkout svn://192.168.244.128/testrpo
#指定檢出版本庫testrpo
[root@localhost svnwork]# svn checkout svn://192.168.244.128/testrpo1
#指定檢出版本庫testrpo1
5.3、svn的copy命令
功能:
工作副本à工作副本
svn cp 源文件名稱 目標文件名稱
如果在工作副本中使用svn的copy命令複製的文件,如果複製的源文件有版本控制,則複製完成的目標文件也是有版本控制的,如果是複製的源文件是沒有版本控制的,那麼複製完成的目標文件也是沒有版本控制的,此時需要使用svn的增加和提交命令纔能有版本控制。
svn cp -r 版本號 源文件名 目標文件名
指定複製版本號的文件
工作副本à版本庫
svn cp 源文件名 版本庫服務器地址(目標文件地址) -m “提交註釋”
複製一個工作副本直接提交到版本庫,不支持誇庫操作
此時服務器上的版本庫中有了這個新的文件,版本號會自動加1
版本庫à工作副本
svn cp 版本庫服務器地址(源文件地址) 本地工作副本目標地址
將服務器上版本庫中的文件複製到本地的工作副本中,該操作可以誇庫操作
版本庫à版本庫
svn cp 服務器上源文件地址 服務器上目標地址 -m “提交註釋”
不可誇庫操作,本地的工作副本,直接提交的。
5.4、主幹版本與分支版本
創建分支版本的過程是完全脫離工作副本進行的,使用版本庫到版本庫之間的copy操作,實現主幹和分支。
#複製服務器上的imooc版本庫到服務器上imooc版本庫中的trunk(主幹)目錄下,該目錄下存放的就是原來的所有文件。
#在imooc版本庫中複製一份主幹版本(trunk)到imooc版本庫中作爲分支版本(branch)。
6、svn的高級應用
6.1、hooks鉤子應用
鉤子:當執行某些特定操作時觸發執行預先設定好的任務。
在svn的版本庫中存在文件目錄hooks,裏面有很多的.tmp格式的模板文件,如果需要讓鉤子生效,只需要將對應的文件複製一份,把.tmp這個拓展名去掉,重啓svn服務,就可以啓動這個鉤子了,而鉤子文件就是一個shell腳本,這裏的執行對應任務,就是執行對應的shell腳本,可以在該腳本里面編寫自己需要執行的任何腳本。這些鉤子的前綴有start(數據傳輸開始之前),pre(數據傳輸之後,寫入版本庫之前),post(寫入版本庫之後),後半部分纔是對應的操作名,比如commit、lock、unlock等
例:在svn中每次提交完成以後,調用鉤子函數,利用Apache需要將版本庫的最新信息通過網頁可以直接訪問。
第一步:複製鉤子文件
進入到svn服務器的版本庫中找到hooks目錄
進入hooks目錄
複製一份提交完成後執行的鉤子函數模板在當前hooks文件目錄下,只需要將文件名的拓展名去掉。
查看鉤子文件post-commit的權限,如果沒有權限需要賦予執行權限
[root@localhost hooks]# ll
沒有執行權限需要加上執行權限
[root@localhost hooks]# chmod +x post-commit
#添加文件的執行權限
第二步、編寫鉤子函數腳本
使用編輯器打開該鉤子腳本post-commit進行編輯
[root@localhost hooks]# vi post-commit
寫入shell腳本函數
如果使自己寫的shell腳本,可以去掉該鉤子文件的最後幾行後
編寫需要執行的腳本
在每次提交完成後,每次需要將最新的版本庫的詳細信息保存成一個xml文件,放到Apache的目錄下,用戶可以通過網頁瀏覽版本庫的詳細信息。
svn info svn://192.168.244.128 --xml >> /var/www/html/repo.xml |
編輯完成,保存退出
第三步、重啓svn服務
[root@localhost hooks]# ps -ef|grep svn #查看svn的進程
[root@localhost hooks]# kill -9 2155 #殺死進程
[root@localhost hooks]# svnserve -d -r /usr/local/SvnRepository/testrpo #啓動svn服務
第四步、測試
在工作副本中進行一次提交操作
配置Apache默認訪問地址
[root@localhost ~]# cd /etc/httpd/conf.d/
[root@localhost conf.d]# ls
[root@localhost conf.d]# vi welcome.conf
配置完成,保存退出,重啓Apache
[root@localhost conf.d]# service httpd stop #停止Apache服務
[root@localhost conf.d]# service httpd start #啓動Apache服務
打開瀏覽器訪問svn鉤子生成的xml文件
http://192.168.244.128/repo.xml
6.2、版本庫精簡
版本庫的精簡也就是說把之前的老舊的一些版本號丟掉,達到精簡的目的。
[root@localhost svnwork]# svn info #查看當前的最大版本號
現在需要丟棄版本1到版本3,只留版本4到版本6
首先停止svn的服務
[root@localhost svnwork]# ps -ef|grep svn
[root@localhost svnwork]# kill -9 2487
把需要保留的版本數據備份出來
[root@localhost svnwork]# svnadmin dump /usr/local/SvnRepository/testrpo -r 4:6 > ~/testrpo.repo
#將版本庫/usr/local/SvnRepository/testrpo的4到6的版本備份到用戶目錄下的testrpo.repo
這裏的版本庫一定要寫版本庫文件系統的路徑
備份成功
創建新的版本庫,將備份的版本庫加載進去
[root@localhost SvnRepository]# svnadmin create /usr/local/SvnRepository/newrepo
#創建新的版本庫
將備份的版本庫加載到新創建的版本庫中
[root@localhost SvnRepository]# svnadmin load /usr/local/SvnRepository/newrepo/ < ~/testrpo.repo
#將備份的版本庫~/testrpo.repo加載到新創建的版本庫/usr/local/SvnRepository/newrepo/
版本庫精簡過後,它的版本號依然是從1開始的,它會將丟棄的版本號一次填充進來,但不填充數據。原來的版本4,現在變成了1,原來的版本號6,變爲現在的版本號3.
將原來的配置文件複製到新的版本庫的目錄下
[root@localhost SvnRepository]# cp -av /usr/local/SvnRepository/testrpo/conf/* /usr/local/SvnRepository/newrepo/conf/
現在局可以將原來的版本庫刪掉了。
svn啓動運行新的版本庫
[root@localhost SvnRepository]# svnserve -d -r /usr/local/SvnRepository/newrepo/
在做了版本精簡操作後原來的工作副本不能夠正常使用,因爲版本號已經對應不上了,所以需要重新檢出一份才能夠進行操作。
6.3、版本庫的遷移與重定向
6.3.1、版本庫的遷移
通常是服務器更換了,我們需要把數據遷移到新的服務器上。
第一種方法:
可以用版本庫精簡的方法,需要備份的文件充0到最新的版本號,再將備份文件複製到新的服務騎上,創建版本庫後,在加載到新建的版本庫。
第二種方法:
①停止svn版本庫的服務
ps -ef|grep svn #查詢svn的進程
kill -9 進程ID #關閉svn的服務
②把版本庫壓縮成.zip文件
③複製壓縮文件到新的服務器上解壓
④在新的服務器上啓動運行解壓的這個版本庫
6.3.2、版本庫的重定向
遷移了數據以後,需要在工作副本中將原來的服務器地址切換成新的服務器地址(也就是版本庫的重定向)
重定向的命令:
svn switch --relocat 原來的URL 新的URL
這樣就能夠重定向工作副本的地址
7、svn常見的坑
1、創建完版本庫之後忘記修改svnserve.conf文件
svnserve.conf文件,路徑爲創建的版本庫的目錄下的conf目錄下,需要在這個文件中指定每個配置文件的位置。
2、運行版本庫的路徑問題
在啓動運行svn服務的時候,如果沒有寫版本庫的名稱,在檢出時的URL後面一定需要跟上版本庫的名稱,也就是說運行的時候沒有寫,檢出的時候就必須寫,運行時寫了,檢出時就不用寫
3、svnadmin dump/load 管道符號的問題
備份的時候是大於號(>),加載的時候是小於號(<),如果在加載的時候寫錯了管道符號,數據會被覆蓋,相當於備份的數據被覆蓋刪除了,只要寫錯一次備份的數據就沒了。