1. 程式人生 > >學習SVN03 SVN版本控制系統最佳實踐

學習SVN03 SVN版本控制系統最佳實踐

SVN版本控制系統最佳實踐

 

第1章SVN介紹及應用場景

1.1什麼是SVN(Subversion)

Svn(subversion)是近年來崛起非常優秀的版本管理工具,與CVS管理工具一樣,SVN是一個跨平臺的開源的版本控制系統。Svn版本管理工具隨著時間改變的各種資料。這些資料防止在一個中央資料檔案庫(repository)中,這個檔案庫很像一個普通的檔案伺服器或者FTP伺服器,但是,與其他伺服器不同,SVN會備份並記錄每個檔案每一次的修改更新變動。這樣就可以把任意一個時間點的檔案恢復到想要的某一箇舊的版本,當然也可以直接瀏覽指定檔案的更新歷史記錄。

官方解釋:為什麼會有SVN這樣一個專案?為了接管CVS的使用者基礎,確切的說,我們寫了一個新的版本控制系統,它和CVS很相似,但是它修正了以前CVS所沒有解決的許多問題。具體檢視SVN官方首頁。

SVN是一個非常通用的軟體系統,它常被用來管理程式原始碼,但是它也可以管理任何型別的檔案,如文字、視訊、圖片等等。

1.2SVN與Git的區別

1.2.1SVN集中式版本控制系統

SVN版本控制系統是集中式的資料管理,存在一箇中央版本庫,所有開發人員本地開發所使用的程式碼都是來自於這個版本庫,提交程式碼也都必須提交到這個中央版本庫。

SVN版本控制系統工作流程如下:

1.在中央庫上建立或從主幹複製一個分分支。

2.從中央庫check out下這個分支的程式碼。

3.增加自己的程式碼檔案,修改現存的程式碼或者刪除程式碼檔案。

4.commit程式碼,假設有人在剛剛的分支上提交了程式碼,你就會被提示程式碼過期,需要先up你的程式碼後再提交。up程式碼的時候如果出現衝突,需要解決好後再進行提交。

1.2.2Git分散式版本控制系統

git中沒有了中央版本庫的說法,但是為了開發小組的程式碼共享,我們通常還是會搭建一個遠端git倉庫。

但是和svn不同的是,開發者本地也包含了一個完整的git倉庫,從某種程度上說本地的倉庫和遠端的倉庫在身份上是等價的,沒有主從之分。

如果是閉源專案,或者你習慣於以往的集中式的管理模式的話,那麼在git下你也可以像SVN那樣的工作,只是流程中可能會增加一些步驟。

1.你本地建立一個git庫,並將其add到遠端git庫中。

2.你在本地新增或者刪除檔案,然後commit,當然commit操作都是提交到本地的git庫中。(其實提交到git目錄下的objects目錄中)

3.將本地git庫的分支push到遠端git庫的分支,如果這個時候遠端git庫中已經有別人push過,那麼遠端git庫將不允許你push,這時候你需要先pull,如果有衝突,先處理好衝突,commit到本地git庫後,再push到遠端git庫。

從上面的描述我們可以看到,我們每個開發人員的本地都會有一個git庫,我們可以隨時進行commit而不需要聯網,可以隨時檢視歷史版本,當某一個功能點開發完了之後我們可以將commit後的內容push到遠端git庫了,如果遠端git庫的版本在你上次clone或者pull之後變化了,那麼需要進行pull並處理衝突,提交之後,在push到遠端git庫。

1.3SVN企業應用場景

SVN任是當前企業的主流。git正在發展,未來會成為主流。如果大家精力足夠,建議同時掌握。

1.4運維人員掌握版本管理

對於版本管理系統,運維人員需要掌握的技術點:

1、安裝、部署、維護、拍障。

2、簡單使用,很多公司都是由開發來管理,包括建立倉庫和新增刪除賬號。

3、對於版本控制系統,運維人員相當於開發商,開發人員是業主,運維搭建的系統為開發人員服務。

1.5SVN服務執行模式與訪問方式

1.5.1Svn服務端執行方式

SVN服務常見的執行訪問方式有3種:

1、獨立伺服器訪問

訪問地址如:svn://svn.xuliangwei.com/sadoc;

2、藉助Apache等http服務

訪問地址如:http://svn.xuliangwei.com/sadoc;

單獨安裝Apache+svn

CSVN(apache+svn)是一個單獨的整合軟體,帶web介面管理的SVN軟體。

3、本地直接訪問(例如:file:///application/svndata/sadoc)

咱們主要學習第一種方式以及第二種方式的CSVN web管理方式。

1.6Svn客戶端訪問方式

Svn客戶端可以通過多種訪問方式訪問伺服器端,例如:本地磁碟訪問,或各種各樣不同的網路協議訪問,但一個版本庫地址永遠都是一個URL,URL反映了訪問方法。

訪問方式

說明

svn://

通過TCP/IP自定義協議訪問svnserve伺服器。

http://

通過WebDAV協議訪問支援Subversion的Apache伺服器

https://

與http://相似,但是用SSL加密訪問。

file://

直接通過本地磁碟或者網路磁碟訪問版本庫。

svn+ssh://

通過認證並加密的TCP/IP自定義協議訪問svnserve伺服器

1.7SVN檔案庫資料格式

SVN儲存版本資料有2中方式:BDB(一種事物安全性表型別)和FSFS(一種不需要資料庫的儲存系統)。因為BDB方式在伺服器中斷時,有可能鎖住資料,所以還是FSFS方式更安全一點。

BDB:

伯克利DB(BerkeleyDB),版本庫可以使用的一種經過充分測試的後臺資料庫實現,不能在通過網路共享的檔案系統上使用,伯克利DB是Subversion1.2版本以前的預設版本庫格式。

FSFS:

一個專用於Subversion版本庫的檔案系統後端,可以使用網路檔案系統(例如NFS或SMBFS)。是1.2版本及其後的預設版本庫格式。

1.8SVN版本控制系統優點

1、管理方便,邏輯清晰明確,符合一般人思維習慣。

2、易於管理,集中式svn伺服器更能保證資料安全性。

3、程式碼一致性非常高。

4、適合開發人數不多的專案開發。

5、普及度高,大部分軟體配置管理的大學教材都是SVN。

第2章SVN版本系統最佳實踐

2.1SVN安裝部署

檢查作業系統環境,以及核心版本

[[email protected] ~]# cat /etc/redhat-release  #檢視系統版本

CentOS release 6.7 (Final)

[[email protected] ~]# uname -r #檢視核心

2.6.32-573.el6.x86_64

SVN屬於功能性軟體,yum安裝即是最佳實踐。

[[email protected] ~]# yum install subversion #安裝Svn

[[email protected] ~]# rpm -qa subversion #檢查svn是否安裝完畢

subversion-1.6.11-14.el6.x86_64

2.2建立SVN目錄

建立svn版本庫資料儲存根目錄(svndata)及使用者、密碼許可權目錄(svnpasswd)

[[email protected] ~]# mkdir -p /application/svndata  #資料儲存根目錄

[[email protected] ~]# mkdir -p /application/svnpasswd  #使用者、密碼許可權目錄

2.3建立專案版本庫

建立一個新的Subversion專案sadoc,類似sadoc這樣的專案可以建立多個,每個專案對應不同的程式碼,這裡只是以建立一個專案為例演示:

[[email protected] ~]# svnadmin create /application/svndata/sadoc #使用svnadmin建立專案版本庫,以及初始化版本庫

2.4調整SVN配置檔案及許可權檔案

下面對svn全域性配置檔案進行配置管理:注意:修改位置頂格不能有空格,否則報錯

[[email protected] ~]# cd /application/svndata/sadoc/conf/

[[email protected] conf]# cp svnserve.conf svnserve.conf.ori #備份SVN主配置檔案,方便對比

[[email protected] conf]# egrep -v "^$|#" svnserve.conf #開啟如下注釋的行

[general]

anon-access = none  #read(匿名訪問) none(不讓匿名訪問)

auth-access = write #授權使用者可寫

password-db = /application/svnpasswd/passwd  #使用哪個檔案作為帳號密碼檔案

authz-db = /application/svnpasswd/authz  #使用哪個檔案作為許可權檔案

realm = My xuliangwei First Repository  #認證空間名,版本所在目錄(可選)

[[email protected] conf]# mv authz passwd/application/svnpasswd/ #把密碼認證及許可權模板拷到相關目錄

[[email protected] conf]# chmod 600 /application/svnpasswd/{authz,passwd} #修改許可權,不允許其他使用者讀寫執行許可權

快速修改替換方法:

sed -i 's/# anon-access = read/anon-access=none/' svnserve.conf

sed -i 's/# auth-access = write/auth-access=write/g' svnserve.conf

sed -i '[email protected]# password-db = [email protected] = /application/svnpasswd/[email protected]' svnserve.conf

sed -i '[email protected]# authz-db = [email protected] = /application/svnpasswd/[email protected]' svnserve.conf

2.5配置svn使用者及密碼

配置賬戶及密碼   格式: user=passwd

[[email protected] svnpasswd]# egrep -v "^$|#" /application/svnpasswd/passwd

[users]

xuliangwei = xlw123

xiaomi = xiaomi123

stu001 = 123

stu002 = 456

提示:

1.等號前為SVN賬號,等號後為SVN密碼,密碼是明文的,注意密碼許可權

2.更改svnserve.conf時,需要重起SVN,更改authz,passwd檔案時不需要重啟

2.6配置svn使用者及許可權

許可權使用的使用者名稱,必須在passwd檔案裡面存在,許可權配置檔案的修改立即生效,不必重啟SVN;

使用者組格式:

[groups]

xuliangwei26 = stu001,stu002

其中,1個組可以包含1個使用者或者多個使用者,使用者間以逗號分隔。

 

版本庫目錄格式:

[<版本庫>:/專案/目錄]

@<使用者組名> = <許可權>

<使用者名稱> = <許可權>

 

方括號內部分可以有多種寫法:

[/] #表示根目錄及以下,根目錄是sevnserve啟動時指定的,我們指定為/application/svndata [/]就是表示對全部版本庫設定許可權;

[sadoc:/] #表示對版本庫sadoc設定許可權;

[sadoc:/linux] #表示對版本庫sadoc中的linux專案設定許可權;

[sadoc:/linux/centos] #表示對版本庫sadoc中的linux專案的centos目錄設定許可權;

 

許可權主體可以是使用者組、使用者或者*,使用者組在前面加@,*表示全部使用者。

許可權可以是r、w、rw和空,空表示沒有任何許可權。

如下許可權體系的控制

[[email protected] svnpasswd]# egrep -v "#" /application/svnpasswd/authz   

[aliases]

 

[groups]

xuliangwei26 = stu001,stu002

 

[sadoc:/]

xuliangwei = rw

 

[sadoc:/linux]

xiaomi = rw

 

[sadoc:/linux/centos]

@xuliangwei26 =r

根目錄只有xuliangwei可以讀寫,匿名使用者沒有任何許可權。

二級Linux目錄只有xiaomi可以讀寫,匿名使用者沒有任何許可權。

三級centos目錄只有xuliangwei26組可讀,但是xuliangwei可讀寫,xiaomi也可讀寫。

2.7svn啟動命令詳解

svn啟動命令詳解

[[email protected] sadoc]# svnserve --help

usage: svnserve [-d | -i | -t | -X] [options]

 

Valid options:

  -d [--daemon]            : daemon mode #以守護程序執行

  -i [--inetd]             : inetd mode #以inetd模式執行

  -t [--tunnel]            : tunnel mode #以隧道模式執行

  -X [--listen-once]       : listen-once mode (useful for debugging) #除錯模式

  -r [--root] ARG          : root of directory to serve #指定根目錄

  -R [--read-only]         : force read only, overriding repository config file #只讀,覆蓋庫的配置檔案

  --config-file ARG        : read configuration from file ARG #從檔案讀取配置

  --listen-port ARG        : listen port #指定監聽svn埠

                             [mode: daemon, listen-once]

  --listen-host ARG        : listen hostname or IP address #監聽主機名或者IP地址

                             [mode: daemon, listen-once]

  -T [--threads]           : use threads instead of fork [mode: daemon] #執行緒的使用

  --foreground             : run in foreground (useful for debugging) #在前臺執行(除錯模式)

                             [mode: daemon]

  --log-file ARG           : svnserve log file #指定日誌檔案

  --pid-file ARG           : write server process ID to file ARG #指定pid檔案路徑

                             [mode: daemon, listen-once]

  --tunnel-user ARG        : tunnel username (default is current uid's name) #隧道使用者名稱(預設UID的名稱)

                             [mode: tunnel]

  -h [--help]              : display this help #檢視幫助

  --version                : show program version information #顯示程式版本資訊

2.8配置並啟動svn服務

[[email protected] sadoc]# svnserve -d -r /application/svndata/#-d代表後臺執行 -r 指定根目錄

[[email protected] sadoc]# netstat -lntup|grep 3690 #檢視SVN埠

tcp        00 0.0.0.0:36900.0.0.0:*                   LISTEN      1855/svnserve

第3章SVN客戶端管理

3.1Windows客戶端管理

windows客戶端下載TortoiseSVN軟體進行程式碼的上傳、下載、提交、更新、等操作管理。

 

使用xuliangwei使用者來checkout

 

checkout 成功

 

新增新的檔案,進行提交

 

通過browse瀏覽成功

3.2Linux客戶端管理

3.2.1SVN建立目錄樹

[[email protected] /]# mkdir -p /tmp/dir/linux/centos

[[email protected] /]# svn import /tmp/dir/ svn://10.0.0.3/sadoc/ -m "import svntree" #匯入svn目錄樹

Adding         /tmp/dir/linux

Adding         /tmp/dir/linux/centos

3.2.2從SVN庫提取資料

將檔案checkout到本地目錄

[[email protected] ~]# mkdir /svn-data

[[email protected] ~]# cd /svn-data

[[email protected] svn-data]# svn co svn://10.0.0.7/sadoc/ /svn-data/ --username xuliangwei --password xlw123

3.2.3從本地提交到SVN

客戶端提交檔案至SVN伺服器,如下

[[email protected] svn-sadoc]# mkdir stu00{10..12}

[[email protected] svn-data]# svn add *

A         stu0010

A         stu0011

A         stu0012

[[email protected] svn-sadoc]# svn ci -m "Message data" --username xuliangwei --password xlw123

Adding         stu0010

Adding         stu0011

Adding         stu0012

 

Committed revision 5.

第4章SVN備份實踐

[[email protected] svn-sadoc]# svnadmin --help

general usage: svnadmin SUBCOMMAND REPOS_PATH[ARGS & OPTIONS ...]

Type 'svnadmin help <subcommand>' for help on a specific subcommand.

Type 'svnadmin --version' to see the program version and FS modules.

 

Available subcommands:

   crashtest

   create

   deltify

   dump

   help (?, h)

   hotcopy

   list-dblogs

   list-unused-dblogs

   load

   lslocks

   lstxns

   pack

   recover

   rmlocks

   rmtxns

   setlog

   setrevprop

   setuuid

   upgrade

   verify

第5章SVN鉤子實踐

5.1SVN鉤子指令碼簡介

鉤子指令碼的具體寫法就是作業系統中shell指令碼程式的寫法,可根據自己的SVN所在的作業系統和shell程式進行相對應的開發。

鉤子指令碼就是被某些版本庫事件觸發的程式,例如:建立新版本或修改未被版本控制的屬性。每個鉤子都能掌管足夠的資訊來了解發生了什麼事件,操作物件是什麼以及觸發事件使用者的賬號。

根據鉤子的輸出或者返回狀態,鉤子程式能夠以某種方式控制該動作繼續執行,停止或者掛起。

5.2SVN的hooks模板

常見鉤子指令碼

鉤子指令碼

說明

post-commit

在提交完成成功建立版本之後執行該鉤子,提交已經完成,不可更改,因此,本指令碼的返回值被忽略。提交完成時觸發事物

pre-commit

提交完成前觸發執行指令碼

start-commit

在客戶端還沒有向伺服器提交資料之前,即還沒有建議txn之前,執行該指令碼(提交前觸發事務)

5.3SVN鉤子生產應用場景

pre-commit

1.閒置上傳副檔名及大小啊,控制提交要輸入的資訊等。

post-commit

  1. SVN更新自動周知,MSN郵件或者簡訊周知。
  2. SVN更新觸發checkout程式,然後實現rsync推送到伺服器等。

5.4SVN鉤子生產應用實踐

5.4.1單臺svn同步web目錄

安裝web服務

yum –y instal httpd                      使用yum一鍵安裝apache

service httpd start                      啟動apache服務測試

配置檔案修改

cd /svndata/code1/hooks/                                    進入倉庫鉤子目錄

cp post-commit.tmpl post-commit                    複製模版

chmod 755 post-commit                                       新增執行許可權

> post-commit                                                                 清空配置資訊

vim post-commit

#! /bin/sh

export LANG="zh_CN.UTF-8"
        svn=/usr/bin/svn

$svn update /var/www/code1      --username admin --password admin

同步svn至/var/www/目錄下       (admin使用者必須對根目錄有可讀可寫)

將Apache虛擬主機指向/var/www/code1  即可訪問

關聯Web目錄

cd /var/www/

svn checkout svn://192.168.1.200/code1                      checkout更新svn

首次checkout需要輸入root的密碼

其次輸入post-commit裡面定義同步的使用者和密碼

使用者:admin

              密碼:   admin

首次需要確認是否儲存密碼  輸入yes即可

5.4.2rsync與svn鉤子結合實現資料實時同步

1、建立同步WEB目錄

2、將SVN中內容checkout到WEB目錄一份

[[email protected] ~]# mkdir -p /data/www #建立同步Web目錄

[[email protected] ~]# svn co svn://10.0.0.7/sadoc /data/www/ --username=xuliangwei --password=xlw123  #將SVN中內容checkout到WEB目錄一份

A    /data/www/linux

A    /data/www/linux/centos

Checked out revision 7.

5.5SVN鉤子注意事項

1、鉤子指令碼的許可權要允許svn執行,一般可以設定chmod 755 post-commit

2、寫鉤子指令碼時要儘可能定義環境變數,主要是需要用命令的路徑。因為SVN考慮安全問題,不會呼叫系統環境變數,所以如果發現手動執行post-commit沒有問題,但是SVN自動執行也可能會無法執行。

3、在SVN upate之前一定要先手動checkout一份出來,還有儘可能要加上使用者和密碼,如果只是手動一樣會更新,但自動觸發可能就不能更新了。

第6章大中小型企業上線解決方案

SVN目錄組織結構說明

branch #分支,為測試時使用,幾天以上的專案必須開分支,測試需要本分支通過,主線合併到分支通過,才能合併到主線進行測試

tags #版本記錄

 

trunk #主線,與正式線相對應,當天不上線檔案不允許提交。

 

第1章SVN介紹及應用場景

1.1什麼是SVN(Subversion)

Svn(subversion)是近年來崛起非常優秀的版本管理工具,與CVS管理工具一樣,SVN是一個跨平臺的開源的版本控制系統。Svn版本管理工具隨著時間改變的各種資料。這些資料防止在一個中央資料檔案庫(repository)中,這個檔案庫很像一個普通的檔案伺服器或者FTP伺服器,但是,與其他伺服器不同,SVN會備份並記錄每個檔案每一次的修改更新變動。這樣就可以把任意一個時間點的檔案恢復到想要的某一箇舊的版本,當然也可以直接瀏覽指定檔案的更新歷史記錄。

官方解釋:為什麼會有SVN這樣一個專案?為了接管CVS的使用者基礎,確切的說,我們寫了一個新的版本控制系統,它和CVS很相似,但是它修正了以前CVS所沒有解決的許多問題。具體檢視SVN官方首頁。

SVN是一個非常通用的軟體系統,它常被用來管理程式原始碼,但是它也可以管理任何型別的檔案,如文字、視訊、圖片等等。

1.2SVN與Git的區別

1.2.1SVN集中式版本控制系統

SVN版本控制系統是集中式的資料管理,存在一箇中央版本庫,所有開發人員本地開發所使用的程式碼都是來自於這個版本庫,提交程式碼也都必須提交到這個中央版本庫。

SVN版本控制系統工作流程如下:

1.在中央庫上建立或從主幹複製一個分分支。

2.從中央庫check out下這個分支的程式碼。

3.增加自己的程式碼檔案,修改現存的程式碼或者刪除程式碼檔案。

4.commit程式碼,假設有人在剛剛的分支上提交了程式碼,你就會被提示程式碼過期,需要先up你的程式碼後再提交。up程式碼的時候如果出現衝突,需要解決好後再進行提交。

1.2.2Git分散式版本控制系統

git中沒有了中央版本庫的說法,但是為了開發小組的程式碼共享,我們通常還是會搭建一個遠端git倉庫。

但是和svn不同的是,開發者本地也包含了一個完整的git倉庫,從某種程度上說本地的倉庫和遠端的倉庫在身份上是等價的,沒有主從之分。

如果是閉源專案,或者你習慣於以往的集中式的管理模式的話,那麼在git下你也可以像SVN那樣的工作,只是流程中可能會增加一些步驟。

1.你本地建立一個git庫,並將其add到遠端git庫中。

2.你在本地新增或者刪除檔案,然後commit,當然commit操作都是提交到本地的git庫中。(其實提交到git目錄下的objects目錄中)

3.將本地git庫的分支push到遠端git庫的分支,如果這個時候遠端git庫中已經有別人push過,那麼遠端git庫將不允許你push,這時候你需要先pull,如果有衝突,先處理好衝突,commit到本地git庫後,再push到遠端git庫。

從上面的描述我們可以看到,我們每個開發人員的本地都會有一個git庫,我們可以隨時進行commit而不需要聯網,可以隨時檢視歷史版本,當某一個功能點開發完了之後我們可以將commit後的內容push到遠端git庫了,如果遠端git庫的版本在你上次clone或者pull之後變化了,那麼需要進行pull並處理衝突,提交之後,在push到遠端git庫。

1.3SVN企業應用場景

SVN任是當前企業的主流。git正在發展,未來會成為主流。如果大家精力足夠,建議同時掌握。

1.4運維人員掌握版本管理

對於版本管理系統,運維人員需要掌握的技術點:

1、安裝、部署、維護、拍障。

2、簡單使用,很多公司都是由開發來管理,包括建立倉庫和新增刪除賬號。

3、對於版本控制系統,運維人員相當於開發商,開發人員是業主,運維搭建的系統為開發人員服務。

1.5SVN服務執行模式與訪問方式

1.5.1Svn服務端執行方式

SVN服務常見的執行訪問方式有3種:

1、獨立伺服器訪問

訪問地址如:svn://svn.xuliangwei.com/sadoc;

2、藉助Apache等http服務

訪問地址如:http://svn.xuliangwei.com/sadoc;

單獨安裝Apache+svn

CSVN(apache+svn)是一個單獨的整合軟體,帶web介面管理的SVN軟體。

3、本地直接訪問(例如:file:///application/svndata/sadoc)

咱們主要學習第一種方式以及第二種方式的CSVN web管理方式。

1.6Svn客戶端訪問方式

Svn客戶端可以通過多種訪問方式訪問伺服器端,例如:本地磁碟訪問,或各種各樣不同的網路協議訪問,但一個版本庫地址永遠都是一個URL,URL反映了訪問方法。

訪問方式

說明

svn://

通過TCP/IP自定義協議訪問svnserve伺服器。

http://

通過WebDAV協議訪問支援Subversion的Apache伺服器

https://

與http://相似,但是用SSL加密訪問。

file://

直接通過本地磁碟或者網路磁碟訪問版本庫。

svn+ssh://

通過認證並加密的TCP/IP自定義協議訪問svnserve伺服器

1.7SVN檔案庫資料格式

SVN儲存版本資料有2中方式:BDB(一種事物安全性表型別)和FSFS(一種不需要資料庫的儲存系統)。因為BDB方式在伺服器中斷時,有可能鎖住資料,所以還是FSFS方式更安全一點。

BDB:

伯克利DB(BerkeleyDB),版本庫可以使用的一種經過充分測試的後臺資料庫實現,不能在通過網路共享的檔案系統上使用,伯克利DB是Subversion1.2版本以前的預設版本庫格式。

FSFS:

一個專用於Subversion版本庫的檔案系統後端,可以使用網路檔案系統(例如NFS或SMBFS)。是1.2版本及其後的預設版本庫格式。

1.8SVN版本控制系統優點

1、管理方便,邏輯清晰明確,符合一般人思維習慣。

2、易於管理,集中式svn伺服器更能保證資料安全性。

3、程式碼一致性非常高。

4、適合開發人數不多的專案開發。

5、普及度高,大部分軟體配置管理的大學教材都是SVN。

第2章SVN版本系統最佳實踐

2.1SVN安裝部署

檢查作業系統環境,以及核心版本

[[email protected] ~]# cat /etc/redhat-release  #檢視系統版本

CentOS release 6.7 (Final)

[[email protected] ~]# uname -r #檢視核心

2.6.32-573.el6.x86_64

SVN屬於功能性軟體,yum安裝即是最佳實踐。

[[email protected] ~]# yum install subversion #安裝Svn

[[email protected] ~]# rpm -qa subversion #檢查svn是否安裝完畢

subversion-1.6.11-14.el6.x86_64

2.2建立SVN目錄

建立svn版本庫資料儲存根目錄(svndata)及使用者、密碼許可權目錄(svnpasswd)

[[email protected] ~]# mkdir -p /application/svndata  #資料儲存根目錄

[[email protected] ~]# mkdir -p /application/svnpasswd  #使用者、密碼許可權目錄

2.3建立專案版本庫

建立一個新的Subversion專案sadoc,類似sadoc這樣的專案可以建立多個,每個專案對應不同的程式碼,這裡只是以建立一個專案為例演示:

[[email protected] ~]# svnadmin create /application/svndata/sadoc #使用svnadmin建立專案版本庫,以及初始化版本庫

2.4調整SVN配置檔案及許可權檔案

下面對svn全域性配置檔案進行配置管理:注意:修改位置頂格不能有空格,否則報錯

[[email protected] ~]# cd /application/svndata/sadoc/conf/

[[email protected] conf]# cp svnserve.conf svnserve.conf.ori #備份SVN主配置檔案,方便對比

[[email protected] conf]# egrep -v "^$|#" svnserve.conf #開啟如下注釋的行

[general]

anon-access = none  #read(匿名訪問) none(不讓匿名訪問)

auth-access = write #授權使用者可寫

password-db = /application/svnpasswd/passwd  #使用哪個檔案作為帳號密碼檔案

authz-db = /application/svnpasswd/authz  #使用哪個檔案作為許可權檔案

realm = My xuliangwei First Repository  #認證空間名,版本所在目錄(可選)

[[email protected] conf]# mv authz passwd/application/svnpasswd/ #把密碼認證及許可權模板拷到相關目錄

[[email protected] conf]# chmod 600 /application/svnpasswd/{authz,passwd} #修改許可權,不允許其他使用者讀寫執行許可權

快速修改替換方法:

sed -i 's/# anon-access = read/anon-access=none/' svnserve.conf

sed -i 's/# auth-access = write/auth-access=write/g' svnserve.conf

sed -i '[email protected]# password-db = [email protected] = /application/svnpasswd/[email protected]' svnserve.conf

sed -i '[email protected]# authz-db = [email protected] = /application/svnpasswd/[email protected]' svnserve.conf

2.5配置svn使用者及密碼

配置賬戶及密碼   格式: user=passwd

[[email protected] svnpasswd]# egrep -v "^$|#" /application/svnpasswd/passwd

[users]

xuliangwei = xlw123

xiaomi = xiaomi123

stu001 = 123

stu002 = 456

提示:

1.等號前為SVN賬號,等號後為SVN密碼,密碼是明文的,注意密碼許可權

2.更改svnserve.conf時,需要重起SVN,更改authz,passwd檔案時不需要重啟

2.6配置svn使用者及許可權

許可權使用的使用者名稱,必須在passwd檔案裡面存在,許可權配置檔案的修改立即生效,不必重啟SVN;

使用者組格式:

[groups]

xuliangwei26 = stu001,stu002

其中,1個組可以包含1個使用者或者多個使用者,使用者間以逗號分隔。

 

版本庫目錄格式:

[<版本庫>:/專案/目錄]

@<使用者組名> = <許可權>

<使用者名稱> = <許可權>

 

方括號內部分可以有多種寫法:

[/] #表示根目錄及以下,根目錄是sevnserve啟動時指定的,我們指定為/application/svndata [/]就是表示對全部版本庫設定許可權;

[sadoc:/] #表示對版本庫sadoc設定許可權;

[sadoc:/linux] #表示對版本庫sadoc中的linux專案設定許可權;

[sadoc:/linux/centos] #表示對版本庫sadoc中的linux專案的centos目錄設定許可權;

 

許可權主體可以是使用者組、使用者或者*,使用者組在前面加@,*表示全部使用者。

許可權可以是r、w、rw和空,空表示沒有任何許可權。

如下許可權體系的控制

[[email protected] svnpasswd]# egrep -v "#" /application/svnpasswd/authz   

[aliases]

 

[groups]

xuliangwei26 = stu001,stu002

 

[sadoc:/]

xuliangwei = rw

 

[sadoc:/linux]

xiaomi = rw

 

[sadoc:/linux/centos]

@xuliangwei26 =r

根目錄只有xuliangwei可以讀寫,匿名使用者沒有任何許可權。

二級Linux目錄只有xiaomi可以讀寫,匿名使用者沒有任何許可權。

三級centos目錄只有xuliangwei26組可讀,但是xuliangwei可讀寫,xiaomi也可讀寫。

2.7svn啟動命令詳解

svn啟動命令詳解

[[email protected] sadoc]# svnserve --help

usage: svnserve [-d | -i | -t | -X] [options]

 

Valid options:

  -d [--daemon]            : daemon mode #以守護程序執行

  -i [--inetd]             : inetd mode #以inetd模式執行

  -t [--tunnel]            : tunnel mode #以隧道模式執行

  -X [--listen-once]       : listen-once mode (useful for debugging) #除錯模式

  -r [--root] ARG          : root of directory to serve #指定根目錄

  -R [--read-only]         : force read only, overriding repository config file #只讀,覆蓋庫的配置檔案

  --config-file ARG        : read configuration from file ARG #從檔案讀取配置

  --listen-port ARG        : listen port #指定監聽svn埠

                             [mode: daemon, listen-once]

  --listen-host ARG        : listen hostname or IP address #監聽主機名或者IP地址

                             [mode: daemon, listen-once]

  -T [--threads]           : use threads instead of fork [mode: daemon] #執行緒的使用

  --foreground             : run in foreground (useful for debugging) #在前臺執行(除錯模式)

                             [mode: daemon]

  --log-file ARG           : svnserve log file #指定日誌檔案

  --pid-file ARG           : write server process ID to file ARG #指定pid檔案路徑

                             [mode: daemon, listen-once]

  --tunnel-user ARG        : tunnel username (default is current uid's name) #隧道使用者名稱(預設UID的名稱)

                             [mode: tunnel]

  -h [--help]              : display this help #檢視幫助

  --version                : show program version information #顯示程式版本資訊

2.8配置並啟動svn服務

[[email protected] sadoc]# svnserve -d -r /application/svndata/#-d代表後臺執行 -r 指定根目錄

[[email protected] sadoc]# netstat -lntup|grep 3690 #檢視SVN埠

tcp        00 0.0.0.0:36900.0.0.0:*                   LISTEN      1855/svnserve

第3章SVN客戶端管理

3.1Windows客戶端管理

windows客戶端下載TortoiseSVN軟體進行程式碼的上傳、下載、提交、更新、等操作管理。

 

使用xuliangwei使用者來checkout

 

checkout 成功

 

新增新的檔案,進行提交

 

通過browse瀏覽成功

3.2Linux客戶端管理

3.2.1SVN建立目錄樹

[[email protected] /]# mkdir -p /tmp/dir/linux/centos

[[email protected] /]# svn import /tmp/dir/ svn://10.0.0.3/sadoc/ -m "import svntree" #匯入svn目錄樹

Adding         /tmp/dir/linux

Adding         /tmp/dir/linux/centos

3.2.2從SVN庫提取資料

將檔案checkout到本地目錄

[[email protected] ~]# mkdir /svn-data

[[email protected] ~]# cd /svn-data

[[email protected] svn-data]# svn co svn://10.0.0.7/sadoc/ /svn-data/ --username xuliangwei --password xlw123

3.2.3從本地提交到SVN

客戶端提交檔案至SVN伺服器,如下

[[email protected] svn-sadoc]# mkdir stu00{10..12}

[[email protected] svn-data]# svn add *

A         stu0010

A         stu0011

A         stu0012

[[email protected] svn-sadoc]# svn ci -m "Message data" --username xuliangwei --password xlw123

Adding         stu0010

Adding         stu0011

Adding         stu0012

 

Committed revision 5.

第4章SVN備份實踐

[[email protected] svn-sadoc]# svnadmin --help

general usage: svnadmin SUBCOMMAND REPOS_PATH[ARGS & OPTIONS ...]

Type 'svnadmin help <subcommand>' for help on a specific subcommand.

Type 'svnadmin --version' to see the program version and FS modules.

 

Available subcommands:

   crashtest

   create

   deltify

   dump

   help (?, h)

   hotcopy

   list-dblogs

   list-unused-dblogs

   load

   lslocks

   lstxns

   pack

   recover

   rmlocks

   rmtxns

   setlog

   setrevprop

   setuuid

   upgrade

   verify

第5章SVN鉤子實踐

5.1SVN鉤子指令碼簡介

鉤子指令碼的具體寫法就是作業系統中shell指令碼程式的寫法,可根據自己的SVN所在的作業系統和shell程式進行相對應的開發。

鉤子指令碼就是被某些版本庫事件觸發的程式,例如:建立新版本或修改未被版本控制的屬性。每個鉤子都能掌管足夠的資訊來了解發生了什麼事件,操作物件是什麼以及觸發事件使用者的賬號。

根據鉤子的輸出或者返回狀態,鉤子程式能夠以某種方式控制該動作繼續執行,停止或者掛起。

5.2SVN的hooks模板

常見鉤子指令碼

鉤子指令碼

說明

post-commit

在提交完成成功建立版本之後執行該鉤子,提交已經完成,不可更改,因此,本指令碼的返回值被忽略。提交完成時觸發事物

pre-commit

提交完成前觸發執行指令碼

start-commit

在客戶端還沒有向伺服器提交資料之前,即還沒有建議txn之前,執行該指令碼(提交前觸發事務)

5.3SVN鉤子生產應用場景

pre-commit

1.閒置上傳副檔名及大小啊,控制提交要輸入的資訊等。

post-commit

  1. SVN更新自動周知,MSN郵件或者簡訊周知。
  2. SVN更新觸發checkout程式,然後實現rsync推送到伺服器等。

5.4SVN鉤子生產應用實踐

5.4.1單臺svn同步web目錄

安裝web服務

yum –y instal httpd                      使用yum一鍵安裝apache

service httpd start                      啟動apache服務測試

配置檔案修改

cd /svndata/code1/hooks/                                    進入倉庫鉤子目錄

cp post-commit.tmpl post-commit                    複製模版

chmod 755 post-commit                                       新增執行許可權

> post-commit                                                                 清空配置資訊

vim post-commit

#! /bin/sh

export LANG="zh_CN.UTF-8"
        svn=/usr/bin/svn

$svn update /var/www/code1      --username admin --password admin

同步svn至/var/www/目錄下       (admin使用者必須對根目錄有可讀可寫)

將Apache虛擬主機指向/var/www/code1  即可訪問

關聯Web目錄

cd /var/www/

svn checkout svn://192.168.1.200/code1                      checkout更新svn

首次checkout需要輸入root的密碼

其次輸入post-commit裡面定義同步的使用者和密碼

使用者:admin

              密碼:   admin

首次需要確認是否儲存密碼  輸入yes即可

5.4.2rsync與svn鉤子結合實現資料實時同步

1、建立同步WEB目錄

2、將SVN中內容checkout到WEB目錄一份

[[email protected] ~]# mkdir -p /data/www #建立同步Web目錄

[[email protected] ~]# svn co svn://10.0.0.7/sadoc /data/www/ --username=xuliangwei --password=xlw123  #將SVN中內容checkout到WEB目錄一份

A    /data/www/linux

A    /data/www/linux/centos

Checked out revision 7.

5.5SVN鉤子注意事項

1、鉤子指令碼的許可權要允許svn執行,一般可以設定chmod 755 post-commit

2、