環境:
操作系統:CentOS 6.2 64bit
SVN版本:Version 1.6.11
Apache版本:Apache/2.2.15
一、SVN簡介
SubVersion(SVN)是近幾年崛起的版本管理軟件,是CVS的接班人,目前絕大多數開源軟件都使用SVN來進行版本管理。SVN支持Linux和Windows,但是較多安裝在Linux上。
SVN服務器有兩種運行方式:獨立服務器(svn://)、藉助於Apache(http://)
SVN的基本工作原理:在一臺服務器上簡歷一個源代碼庫,庫裏開源存放許多不同項目的源程序,由源代碼管理員統一管理。每個用戶在使用源代碼之前,首先要把源代碼下載到本地,然後開發人員直接在本地修改,之後提交到SVN服務器。
版本控制解決了:
代碼管理混亂
解決代碼衝突困難
在代碼整合期間引發bug
無法對代碼的擁有者進行權限控
項目不同版本發佈困難
SVN工作示意圖如下:
SVN版本庫目錄說明:
dav目錄:提供apache與mod_dav_svn使用的目錄,讓他們存儲內部數據
db目錄:所有版本控制的數據存放文件
hooks目錄:放置hook腳本文件的目錄
locks目錄:來放置subversion鎖定數據的目錄,用來追蹤存取文件庫的客戶端
format文件:一個文本文件,裏面只放了一個整數。表示當前文件庫配置的版本號
conf目錄: 這個倉庫的配置文件(倉庫的用戶訪問賬號、權限等)
二、SVN安裝
這裏爲了方便就直接使用yum安裝SVN等相關軟件了
# yum -y install subversion mysql-server httpd mod_dav_svn mod_perl sendmail wget gcc-c++ make unzip perl*
subversion:SVN服務器安裝軟件
Mysql-Server:用戶codestrike軟件(code review軟件)
httpd、mod_dav_svn、mod_perl:用戶web方式管理SVN
SendMail:發送郵件
其他:都是一些必備的軟件包
三、SVN的基本配置
新建svn版本庫
# mkdir -p /svn/mp3 # svnadmin create /svn/mp3
注意:svn版本庫可以創建多個
初始化版本庫的目錄
# mkdir -p test # touch test/kavin.txt test/kavin1.txt test/kavin12.txt # svn import test file:///svn/mp3app -m "初始化目錄"
SVN權限設置
因爲這裏SVN後期需要和Apache結合,這裏就不在權限設置了,不過還是需要下文件的相關設置,權限設置主要是在版本庫目錄下conf目錄下的問題,每個文件的作用如下:
passwd:添加刪除svn的用戶及密碼
authz:設置每個用戶的目錄權限
svnserve.conf:設置密碼文件及認證文件文件的路徑,也就是上面的兩個文件
svn的啓動與關閉
啓動:svnserve -d -r /svn
關閉: kill -9 [pid]
svn測試
# svn co svn://192.168.8.137/mp3 A mp3/kavin.txt A mp3/kavin1.txt A mp3/kavin12.txt
如上svn checkout成功,因爲這裏是沒有設置用戶權限的,所有直接顯示。如果有設置權限的話,需要輸入賬號密碼的。
四、配置SVN的Http支持
修改httpd.conf
在/etc/httpd/conf/httpd.conf文件最後添加如下內容:
# vim httpd.conf ··· <Location /svn> DAV svn #SVNPath /svn/ SVNListParentPath on SVNParentPath /svn AuthType Basic AuthName "Subversion Auth" AuthUserFile /svn/passwd AuthzSVNAccessFile /svn/authz Satisfy all Require valid-user </Location>
Apache啓動與關閉
啓動之前記得將svn版本庫的用戶權限都改成apache,因爲apache都是以這個賬號來運行的。
# chown -R apache:apache /svn #設置權限 # /etc/init.d/httpd start #啓動 # /etc/init.d/httpd stop #關閉
創建用戶
# htpasswd /svn/passwd kavin
修改版本庫訪問權限,如下:
# egrep -v "^#|^$" authz [aliases] [groups] admin = kavin [/] @admin = rw [mp3:/] @admin = rw
驗證
瀏覽器訪問效果圖如下:
五、配置郵件提醒支持
1、安裝Perl模塊Module::Build
# wget http://search.cpan.org/CPAN/authors/id/D/DA/DAGOLDEN/Module-Build-0.36_11.tar.gz # tar xvf Module-Build-0.36_11.tar.gz # cd Module-Build-0.36_11 # perl Build.PL # ./Build # ./Build test # ./Build install # cd ..
2、安裝Perl模塊Authen::SASL
# wget http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/Authen-SASL-2.15.tar.gz # tar xvf Authen-SASL-2.15.tar.gz # cd Authen-SASL-2.15 # perl Makefile.PL # make test # make install # cd ..
3、安裝Perl模塊Net::SMTP_auth
# wget http://search.cpan.org/CPAN/authors/id/A/AP/APLEINER/Net-SMTP_auth-0.08.tar.gz # tar xvf Net-SMTP_auth-0.08.tar.gz # cd Net-SMTP_auth-0.08 # perl Makefile.PL # make test # make install # cd ..
4、安裝Perl模塊SVN::Notify
# wget http://search.cpan.org/CPAN/authors/id/D/DW/DWHEELER/SVN-Notify-2.80.tar.gz # tar xvf SVN-Notify-2.80.tar.gz # cd SVN-Notify-2.80 # perl Build.PL # ./Build # ./Build test # ./Build install # cd ..
5、修改post-commit腳本:commit提交動作之後觸發的腳本
安裝完以上基本模塊之後,我們可與知道在SVN的每個版本庫的hooks都存在一些腳本模塊,如下:
# ll -h /svn/mp3/hooks/ total 112K -rw-r--r--. 1 apache apache 2.0K Nov 22 14:46 post-commit.tmpl -rw-r--r--. 1 apache apache 1.6K Nov 22 14:46 post-lock.tmpl -rw-r--r--. 1 apache apache 2.3K Nov 22 14:46 post-revprop-change.tmpl -rw-r--r--. 1 apache apache 1.6K Nov 22 14:46 post-unlock.tmpl -rw-r--r--. 1 apache apache 3.4K Nov 22 14:46 pre-commit.tmpl -rw-r--r--. 1 apache apache 2.4K Nov 22 14:46 pre-lock.tmpl -rw-r--r--. 1 apache apache 2.8K Nov 22 14:46 pre-revprop-change.tmpl -rw-r--r--. 1 apache apache 2.1K Nov 22 14:46 pre-unlock.tmpl -rw-r--r--. 1 apache apache 2.8K Nov 22 14:46 start-commit.tmpl
以上是不能夠直接使用的,需要對這些腳本模塊進行一些修改,我們這次需要對post-commit進行一定修改,使其能夠在commit成功之後發送通知郵件:
# cd /svn/mp3/hooks # cp -p post-commit.tmpl post-commit # chmod +x post-commit # cp -p /usr/share/doc/subversion-1.6.11/tools/hook-scripts/mailer/mailer.py . # cp -p /usr/share/doc/subversion-1.6.11/tools/hook-scripts/mailer/mailer.conf.example mailer.conf
以上將發送通知郵件必須的一些文件給copy過來了,最後剩下的就是修改post-commit、mailer.conf兩個文件了,修改之後的內容如下:
# cat post-commit #!/bin/sh REPOS="$1" REV="$2" #mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf /svn/mp3/hooks/mailer.py commit "$REPOS" "$REV" /svn/mp3/hooks/mailer.conf
# egrep -v "^#|^$" mailer.conf [general] smtp_hostname = staff.easou.com smtp_username = [email protected] smtp_password = yjh1987625 [defaults] diff = /usr/bin/diff -u -L %(label_from)s -L %(label_to)s %(from)s %(to)s commit_subject_prefix = [SVN Commit] propchange_subject_prefix = [SVN PropChange] lock_subject_prefix = [SVN Lock] unlock_subject_prefix = [SVN Unlock] from_addr = [email protected] to_addr = [email protected] reply_to = generate_diffs = add copy modify show_nonmatching_paths = yes [maps]
通過以上的修改,這樣svn的通知郵件設置就完成,具體請康如下示例:
6、修改pre-commit腳本:commit提交動作之前觸發的腳本
本次修改這次腳本是重要判斷是否輸入日誌信息,並且判斷是否輸入足夠的字數,具體詳見腳本:
# cd /svn/mp3/hooks # cp -p post-commit.tmpl pre-commit # chmod +x pre-commit # cat pre-commit # /bin/bash REPOS="$1" TXN="$2" # Make sure that the log message contains some text. SVNLOOK=/usr/bin/svnlook LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c` if [ "$LOGMSG" -lt 3 ]; then echo "Log message can't be empty! you must input more than 3 chars as comment!." 1>&2 exit 1 fi
以上腳本爲當日志信息少於3個字符時,將報錯並禁止commit。報錯詳見如下:
六、安裝過程中出現的錯誤
①、svnserve -d -r /svn/啓動svn服務器過程中出現svnserve.conf:12: Option expected報錯信息
解決方案:出現這個問題是由於Subversion讀取配置svnserve.conf無法識別前面有空格的配置項,去除空格即可
②、配置好svn+http之後,賬號和密碼一致正常,但是一直無法登陸。error.log出現reason: verification of user id 'kavin' not configured的錯誤信息
解決方案:這個是由於系統SeLinux還處於開啓中,關閉SeLinux即可。通過setenforce 0關閉,或者修改/etc/selinux/config文件,將SELINUX=disabled,然後重啓系統。
③、Could not open the requested SVN filesystem [500, #2]
解決方案:在多SVN版本庫環境下,httpd.conf配置需要添加SVNListParentPath on 、SVNParentPath /svn兩個設置項。
以上就是SVN的安裝與配置。