天天看點

linux svn伺服器搭建、用戶端操作、備份與恢複 推薦

    Subversion(SVN)是一個開源的版本控制系統,管理着随時間改變的資料。這些資料放置在一個中央資料檔案庫中,這個檔案庫很像一個普通的檔案伺服器,它會記住每一次檔案的變動,這樣就可以把檔案恢複到舊的版本,或是浏覽檔案的變動曆史。

本文目錄:

linux svn伺服器部署

linux svn用戶端指令操作

linux svn備份與恢複

1、安裝svn

[root@yang~]#yum install -y subversion

[root@yang~]#svnserve--version

svnserve,version 1.6.11 (r934486)

2、建立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/`  #此處是查詢工程目錄的最新版本

echo  $curr >/tmp/svn_revision

2、增量備份

old=`cat  /tmp/svn_revision`

new=`svnlook   youngest /data/svn/project/`

3、svn恢複

恢複順序從低版本逐個恢複到高版本;即,先恢複最近的一次完整備份,然後恢複緊挨着這個檔案的增量備份。

svnadmin   create test2 

svnadmin   load test2 < /data/svnback/20110719/0-1112svn.bak  

svnadmin   load test2 < /data/svnback/20110719/1113-1120svn.bak