Subversion(SVN)是一個開源的版本控制系統,管理着隨時間改變的數據。這些數據放置在一箇中央資料檔案庫中,這個檔案庫很像一個普通的文件服務器,它會記住每一次文件的變更,這樣就能夠把檔案恢復到舊的版本,或是瀏覽文件的變更歷史。php
本文目錄:html
linux svn服務器部署linux
linux svn客戶端命令操做web
linux svn備份與恢復django
1、安裝svn服務器
[root@yang~]#yum install -y subversion網絡
[root@yang~]#svnserve--versiondom
svnserve,version 1.6.11 (r934486)ide
2、建立SVN版本庫svn
[root@yang~]# mkdir /data/svn
[root@yang~]# svnadmin create /data/svn/project
[root@yangproject]# ls /data/svn/project/
conf db format hooks locks README.txt
3、配置SVN
[root@yangproject]# cd /data/svn/project/conf/
[root@yangconf]# ls
authz passwd svnserve.conf
文件說明:
1)svnserve.conf: svn服務配置文件下。
2)passwd: 用戶名密碼文件。
3)authz: svn權限配置文件。
svnserve.conf文件
該文件配置項分爲如下5項:
anon-access: 控制非鑑權用戶訪問版本庫的權限。
auth-access: 控制鑑權用戶訪問版本庫的權限。
password-db: 指定用戶名口令文件名。
authz-db: 指定權限配置文件名,經過該文件能夠實現以路徑爲基礎的訪問控制。
realm: 指定版本庫的認證域,即在登陸時提示的認證域名稱。若兩個版本庫的認證域相同,建議使用相同的用戶名口令數據文件
配置以下:
[root@yangconf]# grep -E "anon-access =|auth-access =|password-db =|authz-db =|realm=" svnserve.conf
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = /data/svn/project
passwd文件
做用是配置用戶名和密碼
[root@yangconf]# cat passwd
[users]
yangyun= yangyunpasswd
test = testpasswd
authz文件
配置用戶訪問權限
[root@yangconf]# cat authz |grep -v '#'
[aliases]
[groups]
project_w=yangyun
project_r=test
[/]
project_w=rw
project_r=r
4、啓動svn服務
[root@yangconf]# svnserve -d -r /data/svn
5、初始化svn數據
[root@yangdjango]# svn import mysite file:///data/svn/project/ -m 'initial import'
將會拷貝目錄mysite到版本庫的project下
[root@yangdjango]# svn list file:///data/svn/project
manage.py
mysite/
static/
templates/
web02/
在導入以後,原來的目錄樹並無轉化成工做拷貝,爲了開始工做,仍是須要運行svn checkout導出一個工做拷貝。
1、將文件checkout到本地目錄
svn checkout path(path是服務器上的目錄)
簡寫:svn co
例:
svn co svn://115.28.24.178/project --username=yangyun --password=yangyunpasswd
#指定版本的文件
svn co svn://115.28.24.178/project --username=yangyun --password=yangyunpasswd -r 5
2、往本地版本庫中添加新的文件
svn add file #此命令得在checkout出來的路徑裏才能操做
例如:
cp /root/123.txt./
svn add 123.txt #把123.txt加入到本地庫中
A 123.txt
3、將改動的文件提交到版本庫
svn commit -m "LogMessage" [-N] [--no-unlock] PATH(若是選擇了保鎖,就使用--no-unlock開關)
簡寫:svn ci
例:
svn commit 123.txt -m 'add 123.txt' #只提交123.txt
svn commit -m 'add 123.txt' #默認提交當前目錄下的因此文件
svn commit *.txt -m 'add 123.txt' #也能夠正則匹配文件提交
4、加鎖/解鎖
svn lock -m "LockMessage" [--force] PATH
例如:
svn lock -m "lock test file" test.php
svn unlock PATH
5、更新到某個版本
svn update -r m path
例如:
svn update若是後面沒有目錄,默認將當前目錄以及子目錄下的全部文件都更新到最新版本。
svn update -r 200 test.php(將版本庫中的文件test.php還原到版本200
svn update test.php(更新,於版本庫同步。若是在提交的時候提示過時的話,是由於衝突,須要先update,修改文件,而後清除svn resolved,最後再提交commit
簡寫:svn up
6、刪除文件
svn delete path -m "delete test fle"
例如:svn delete svn://192.168.1.1/pro/domain/test.php -m "delete testfile"
或者直接svn delete test.php 而後再svn ci -m 'delete testfile‘,推薦使用這種
簡寫:svn (del, remove, rm)
7、查看日誌
svn log path
例如:svn log test.php 顯示這個文件的全部修改記錄,及其版本號的變化
8、查看文件詳細信息
svn infopath
例如:svn info test.php #可知道路徑版本,時間,提交者等信息
9、比較差別
svn diff path(將修改的文件與基礎版本比較)
例如:svn diff test.php
svn diff -r m:n path(對版本m和版本n比較差別)
例如:svn diff -r 200:201 test.php #可知道修改了哪些內容
簡寫:svn di
10、將兩個版本之間的差別合併到當前文件
svn merge -r m:n path
例如:svn merge -r 200:205 test.php(將版本200與205之間的差別合併到當前文件,可是通常都會產生衝突,須要處理一下)
11、SVN 幫助
svn help
svn help ci
12、版本庫下的文件和目錄列表
svn list path #顯示path目錄下的全部屬於版本庫的文件和目錄
簡寫:svn ls
13、建立歸入版本控制下的新目錄
svn mkdir:建立歸入版本控制下的新目錄。
用法:
svn mkdirPATH #效果等同:mkdir test;svn add test;
14、恢復本地修改
svn revert:恢復原始未改變的工做副本文件 (恢復大部份的本地修改)。
revert:
用法: revert PATH...
注意: 本子命令不會存取網絡,而且會解除衝突的情況。可是它不會恢復被刪除的目錄
1、全量備份:
curr=`svnlook youngest /data/svn/project/` #此處是查詢工程目錄的最新版本
svnadmin dump /data/svn/repos/test --revision 0:$cur --incremental >0-"$curr"svn.bak
echo $curr >/tmp/svn_revision
2、增量備份
old=`cat /tmp/svn_revision`
new=`svnlook youngest /data/svn/project/`
svnadmin dump /data/svn/repos/test --revision $old:$new --incremental >$old"-"$new"svn.bak
3、svn恢復
恢復順序從低版本逐個恢復到高版本;即,先恢復最近的一次完整備份,而後恢復緊挨着這個文件的增量備份。
cd /data/svn/repos/
svnadmin create test2
svnadmin load test2 < /data/svnback/20110719/0-1112svn.bak
svnadmin load test2 < /data/svnback/20110719/1113-1120svn.bak