學習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
- SVN更新自動周知,MSN郵件或者簡訊周知。
- 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
- SVN更新自動周知,MSN郵件或者簡訊周知。
- 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、