1、介紹
Subversion是一個自由,開源的版本控制系統,這個版本庫就像一個普通的文件服務器,不同的是,它可以記錄每一次文件和目錄的修改情況。這樣就可以很方面恢復到以前的版本,並可以查看數據更改細節。目前,Subversion已成為主流的開源代碼版本管理軟件之一,簡稱SVN。
2、SVN相關命令了解
svn:命令行客戶端
svnadmin:用來創建、調整或修復版本庫的工具
svnserve:svn服務程序
svndumpfilter:過濾svn版本庫轉儲數據流的工具
svnsync:svn數據同步工具,實現另外存一份相同的
svnlook:用來查看辦本科中不同的修訂版和事務
3、兩種運行模式
3.1 利用svnserve作為獨立服務運行,通過svn協議訪問
3.2 借助mod_dev_svn模塊,由apache服務運行(Web/DAV),通過http或https協議訪問。想了解此運行模式可以參考着篇:http://www.linuxidc.com/Linux/2013-12/94315.htm
4、安裝與部署
對於Ubuntu來說,裝個SVN是件很容易的事,Ubuntu 14.04可以直接通過apt軟件包管理安裝。
4.1 直接安裝
# sudo apt-get install subversion
4.1 創建版本庫
# sudo mkdir /home/svn
# sudo svnadmin create /home/svn/repos
4.2 了解版本庫
# 進入版本庫查看生成的相關文件
# cd /home/svn/repos/
# ls
conf db format hooks locks README.txt
# 我們主要關心的是conf和db文件,conf文件夾下是存放主配置文件和用戶、權限位置,db文件夾是存放svn轉儲后的數據。
# cd conf/
# ls
authz passwd svnserve.conf
# authz文件是設置用戶權限,passwd文件是存儲用戶及密碼,svnserve.conf是主配置文件,先配置主配置文件。
4.3 配置版本庫
# sudo vi svnserve.conf #將以下參數去掉注釋
[general]
anon-access = none #匿名訪問權限,默認read,none為不允許訪問
auth-access = write #認證用戶權限
password-db = passwd #用戶信息存放文件,默認在版本庫/conf下面,也可以絕對路徑指定文件位置
authz-db = authz
# sudo vi passwd #格式是用戶名=密碼,采用明文密碼
[users]
xiaoming = 123
zhangsan = 123
lisi = 123
# sudo vi authz
[groups] #定義組的用戶
manager = xiaoming
core_dev = zhangsan,lisi
[repos:/] #以根目錄起始的repos版本庫manager組為讀寫權限
@manager = rw
[repos:/media] #core_dev對repos版本庫下media目錄為讀寫權限
@core_dev = rw
4.4 啟動svn服務
# sudo svnserve -d -r /home/svn
# 查看是否啟動成功,可看的監聽3690端口
# sudo netstat -antp |grep svnserve
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 28967/svnserve
# 如果想關閉服務,可使用pkill svnserve
4.5 訪問svn
# 訪問repos版本庫地址
svn://192.168.1.100/repos
# 訪問repos/media目錄地址
svn://192.168.1.100/repos/media
# Windows下客戶端訪問svn服務器
客戶端下載地址:http://tortoisesvn.net/downloads.html
連接方式:安裝客戶端后 --> 右擊桌面 --> 點TortoiseSVN --> 選擇Repo-breowser --> 輸入URL(svn://192.168.1.100/repos)--> 輸入manager組的xiaoming用戶和密碼登錄 --> 登錄后右擊即可上傳和刪除文件
5、常用svn命令
5.1 獲取當前最新修訂版本號
svnlook youngest /home/svn/repos
5.2 將服務器上代碼目錄同步到本地目錄
svn checkout svn://192.168.1.100/repos/media /svn --username zhangsan --password 123
#不指定同步到本地目錄(/svn)默認是當前目錄,也可以不指定用戶名和密碼,需要手動輸入。或使用簡寫svn co "svn://..."。
5.3 把新建文件提交到svn版本庫
具體步驟:
a) cd /svn #切換到本地代碼目錄,
b) svn add filename
#將文件加入svn管理,此時並未提交完成,另外提交文件也要在/svn目錄,否則報"svn: '..' is not a working copy"
c) svn ci filename
#添加注釋說明並提交文件,此時會用nano編輯器打開,添加注釋說明后按ctrl+x,再按y,最后回車完成提交
5.4 把修改后的文件提交到svn
svn commit -m "注釋說明" filename
5.5 更新代碼到最新版本
# 將代碼目錄所有文件更新到最新版本
svn update
# 將某個文件還原到某個版本
svn update -r 85 filename #85是修訂版號
5.6 對代碼加鎖/解鎖
# 加鎖
svn lock -m "注釋說明" filename
# 解鎖
svn unlock filename
5.7 代碼更新沖突
如果提交時提供過期的話,說明代碼沖突,需先svn update filename,再執行svn resolved filename,最后提交svn commit -m "注釋說明" filename
5.8 查看日志
svn log filename
5.9 查看文件信息
svn info filename
5.10 版本庫合並
把庫1合並到庫2中:先把庫2代碼checkout到本地目錄(svn co url2),再進此目錄執行遷移(svn merge url1)即可
6、備份方式
6.1 svnadmin dump是官方推薦的備份方式,適用於量小(100G左右)版本庫備份,可增量備份,備份恢復較慢。
6.2 svnadmin hotcopy是全量熱拷貝的工具,因此磁盤占用多,適用於量大(100G以上)版本庫備份,但不能達到增量備份效果,備份恢復快。
6.3 svnsync是一種實時備份方式,將數據完全復制到另一台版本庫,當這台機器故障,可迅速切換到備份那台。
7、備份與恢復
7.1 svnadmin dump備份
# 完整備份
svnadmin dump /home/svn/repos > YYmmdd_fully_backup.svn
# 完整壓縮備份
svnadmin dump /home/svn/repos | gzip > YYmmdd_fully_backup.gz
# 備份恢復
svnadmin load /home/svn/repos < YYmmdd_fully_backup.svn
zcat YYmmdd_fully_backup.gz | svnadmin load repos
### 增量備份 ###
# 先完整備份
svnadmin dump /home/svn/repos -r 0:100 > YYmmdd_incremental_backup.svn
# 再增量備份
svnadmin dump /home/svn/repos -r 101:200 --incremental > YYmmdd_incremental_backup.svn
7.2 svnadmin hotcopy備份
# 備份
svnadmin hotcopy /home/svn/repos YYmmdd_fully_backup --clean-logs
# 恢復
svnadmin hotcopy YYmmdd_fully_backup /home/svn/repos
Ubuntu 14.04 下搭建SVN服務器 svn:// http://www.linuxidc.com/Linux/2015-01/111956.htm
CentOS 6.2 SVN搭建 (YUM安裝) http://www.linuxidc.com/Linux/2013-10/91903.htm
CentOS 6.5部署Apache+SVN http://www.linuxidc.com/Linux/2013-12/94315.htm
Apache+SVN搭建SVN服務器 http://www.linuxidc.com/Linux/2013-03/81379.htm
Windows下SVN服務器搭建和使用 + 客戶端重新設置密碼 http://www.linuxidc.com/Linux/2013-05/85189p5.htm
Ubuntu Server 12.04 安裝 SVN 並遷移 Virtual SVN數據 http://www.linuxidc.com/Linux/2013-05/84695.htm
Ubuntu Server搭建svn服務以及遷移方法 http://www.linuxidc.com/Linux/2013-05/84693.htm