# Centos下svn的安裝配置
## 檢查已安裝版本
~~~
#檢查是否安裝了低版本的SVN
rpm -qa subversion
#卸載舊版本SVN
[root@localhost modules]# yum remove subversion
~~~
## 安裝SVN
~~~
yum install httpd httpd-devel subversion mod_dav_svn mod_auth_mysql
~~~
## 確認已安裝了SVN模塊
~~~
cd /etc/httpd/modules
ls | grep svn
#會返回以下內容
#mod_authz_svn.so
#mod_dav_svn.so
~~~
## 驗證安裝
檢驗已經安裝的SVN版本信息
~~~svnserve --version~~~
## 創建代碼庫
SVN軟件安裝完成后還需要建立SVN庫
~~~
mkdir -p /svn/web
svnadmin create /svn/web
~~~
執行上面的命令后,自動建立web庫,查看/svn/web 文件夾發現包含了conf, db,format,hooks, locks, README.txt等文件,說明一個SVN庫已經建立。
## 配置代碼庫-設置SVN用戶名及密碼
進入上面生成的文件夾conf下,進行配置
~~~
cd /svn/svn/conf
#用戶密碼passwd配置
規則如下username=password
~~~
## 權限控制-authz
這里是設置用戶訪問權限、訪問目錄。
~~~
vi authz
#設置代表根目錄下所有的資源
#rw是讀寫權限
~~~
[/]
aoxiang=rw
~~~
## 服務svnserve.conf配置
~~~
vi svnserve.conf
#追加以下內容
[general]
#匿名訪問的權限,可以是read,write,none,默認為read
anon-access=none
#使授權用戶有寫權限
auth-access=write
#密碼數據庫的路徑
password-db=passwd
#訪問控制文件
authz-db=authz
#認證命名空間,subversion會在認證提示里顯示,并且作為憑證緩存的關鍵字
realm=/svn/web
~~~
## 配置防火墻端口
~~~
vi /etc/sysconfig/iptables
#添加以下內容:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT
#保存后重啟防火墻
service iptables restart
~~~
## 啟動SVN
~~~
svnserve -d -r /svn/web
~~~
## 查看SVN進程
~~~
ps -ef|grep svn|grep -v grep
#返回一下信息:
#root 12538 1 0 14:40 ? 00:00:00 svnserve -d -r /opt/svn/repositories
~~~
## 檢測SVN 端口
~~~
netstat -ln |grep 3690
#返回一下信息:
#tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN
~~~
## 停止重啟SVN
~~~
killall svnserve //停止
svnserve -d -r /svn/web // 啟動
~~~
# 使用鉤子
## checkout代碼的文件
在web目錄下創建網站對應的文件夾,我這里直接給文件夾命名為svn,并且checkout
~~~
mkdir /home/wwwroot/svn
cd /home/wwwroot/svn
svn checkout svn://127.0.0.1 ./
~~~
完成以后目錄下會多了.svn的隱藏文件夾
## 創建鉤子
在創建好svn project之后會有如下目錄結構。我們的鉤子就存放在hooks里面。
其中版本庫里面會存在一個hooks文件的文件夾啊
我們需要做下面步驟:
代碼如下:
~~~
cd hooks
cp post-commit.tmpl post-commit #拷貝一個鉤子模板
chmod 777 post-commit #賦予可執行權限
vim post-commit
~~~
## 編輯鉤子文件
找到/svn/svntest/hooks/post-commit,
進入到post-commit編輯狀態后,我們最好把里面的內容都給注釋。然后敲入以下代碼:
### 版本1://此版本主要防止文件非常多導致鉤子反應慢
~~~
SVN=/usr/bin/svn #svn執行文件所在的文件夾
WEB=/home/wwwroot/svn #svn項目所在目錄
LOG_PATH=/svn/svntest/svn_hook.log #我們定義的一個log文件
echo "------------Start Commit -----------" >> $LOG_PATH
echo "Time:"`date '+%Y-%m-%d %T'`>>$LOG_PATH #這里是在日志中寫入執行的時間
cd $WEB
for dir in 'svnlook dirs-changed /svn/svntest' #查找有修改過的文件,并將修改過的內容部署到web目錄
do
#下面一句執行update命令
$SVN update -N $WEB --username "aoxiang" --password "aoxiang" >> $LOG_PATH
done
echo "------------Commit End---------------" >>$LOG_PATH
~~~
update 所含的子命令
~~~
--revision(-r)REV
--non-recursive(-N)
--quiet(-q)
--no-ignore
--incremental
--diff3-cmdCMD
--usernameUSER
--passwordPASS
--no-auth-cache
--non-interactive
--config-dirDIR
--ignore-externals
~~~
### 版本2:此版本控制較少文件版本
~~~
/usr/local/bin/svn update /home/wwwroot/svn --username test --password test
~~~