天天看點

Linux下搭建SVN伺服器及自動更新項目檔案到web釋出目錄(wwwroot)的方法

1、在SVN伺服器端準備工作

說明:

伺服器作業系統:centos7.3

SVN安裝路徑:/usr/bin/svn

SVN項目版本庫路徑:/home/svn/repo        --repo為版本庫名稱

SVN登入賬号:admin

SVN登入密碼:123456

Web站點根目錄:/home/wwwroot/

實作目的:

當svn項目中有任何修改更新時,系統會自動實時從svn中檢出檔案并同步到Web站點根目錄

2、安裝SVN伺服器

我在這裡直接采用yum安裝方式(當然也可以自己去官方下載下傳安裝)。

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

[root@server ~]# rpm -qa | grep sub      #檢視安裝檔案

subversion-libs-1.7.14-10.el7.x86_64

subversion-1.7.14-10.el7.x86_64

[root@server ~]# svnserve --version      #檢驗已經安裝的SVN版本資訊

svnserve,版本 1.7.14 (r1542130)

   編譯于 Nov 20 2015,19:25:09

版權所有 (C) 2013 Apache 軟體基金會。

此軟體包含了許多人的貢獻,請檢視檔案 NOTICE 以獲得更多資訊。

Subversion 是開放源代碼軟體,請參閱 http://subversion.apache.org/ 站點。

下列版本庫後端(FS) 子產品可用: 

* fs_base : 子產品隻能操作BDB版本庫。

* fs_fs : 子產品與文本檔案(FSFS)版本庫一起工作。

Cyrus SASL 認證可用。

3、建立SVN 版本庫

[root@server ~]# mkdir /home/svn/repo

[root@server ~]# svnadmin create /home/svn/repo          --repo為版本庫名稱

4、配置svnserve

上述版本庫/home/svn/repo建立後,在檔案夾下會生成conf檔案夾,進入/home/svn/repo/conf下面會有下面3個檔案authz  、passwd 、 svnserve.conf。

[root@server ~]# cd /home/svn/repo/

[root@server repo]# pwd

/home/svn/repo

[root@server repo]# ls

conf  db  format  hooks  locks  README.txt

[root@server repo]# cd conf/

[root@server conf]# ls

authz  passwd  svnserve.conf

4.1、svnserve.conf 檔案, 該檔案配置項分為以下5項:

       anon-access: 控制非鑒權使用者通路版本庫的權限。

       auth-access:  控制鑒權使用者通路版本庫的權限。

       password-db: 指定使用者名密碼檔案名。

       authz-db:指定權限配置檔案名,通過該檔案可以實作以路徑為基礎的通路控制。

       realm:指定版本庫的認證域,即在登入時提示的認證域名稱。若兩個版本庫的認證域相同,建議使用相同的使用者名密碼資料檔案,配置如下:

anon-access = none

auth-access = write

password-db = passwd

authz-db = authz

realm = /home/svn/repo

4.2、passwd修改為:

[users]  

admin = 123456    //這裡的username和password自己設定  

4.3、authz最後加上以下兩行(這兩行解決了 SVN用戶端解決authorization failed問題)

[/]

* = rw

#################樣例#################

[root@singledb conf]# cat authz

[groups]                                     #定義組

admin = admin                            #建立一個admin組,将使用者加入到組

dev=tian,lier,erllo      

[/]                                             #根目錄權限設定(就是“svn”這個檔案夾)

aaa = rw                                    #aaa對svn下的所有版本庫有讀寫權限            

[repo:/]                                     #repo:/,表示對repo版本庫下的所有資源設定權限

@admin = rw                              #admin組的使用者對repo版本庫有讀寫權限

@dev = rw

#####################################

5、啟動svnserve

[root@server conf]# svnserve -d -r /home/svn/repo/ 

                                                                  -d表示背景運作

                                                                  -r 指定根目錄是/home/svn/repo/

[root@server conf]# ps -ef | grep svn

root     28950     1  0 19:12 ?        00:00:00 svnserve -d -r /opt/svn/repo/

root     28952 28246  0 19:12 pts/0    00:00:00 grep --color=auto svn

6、停止svnserve

[root@server conf]# ps -aux |grep svn

[root@server conf]# kill -9  程序号         #程序殺掉

7、用戶端使用

用戶端用svn或者windows下的TortoiseSVN用戶端。

1)從服務端checkout版本庫(在目前目錄下)

svn checkout svn://伺服器的ip位址/

例:檢出svn庫中的内容

[root@server ~]# cd /home/

[root@server home]# svn checkout svn://127.0.0.1/repo

在/home目錄下便生成了一個 repo 目錄。裡面的内容是 版本庫中的内容。

執行 ll -a 可以看見 .svn 這邊是svn的記錄

新增幾個檔案 touch test.txt

svn add * (一定要在 repo目錄下哦,因為要有 .svn呀)           #為版本庫中添加内容

svn commit -m 'add file'                                                #為版本庫中送出内容,一定要對目前版本寫注釋

删除版本庫中的檔案

svn delete svn://127.0.0.1/pro/er.txt -m 'del'

注:可以使用帶使用者名和密碼的通路:

svn co --username hello --password 123svn://192.168.233.203/repo

************************************************************************

SVN版本庫更新

svn up /svn/repo

上傳檔案到伺服器

[root@server repo]# touch /svn/repo/test.php        #所有的動作必須在repo版本庫中完成

[root@server repo]# svn add /svn/repo/test.php           #上傳test.php檔案到svn伺服器

删除伺服器上的檔案

[root@server repo]# svn rm /svn/repo/test.php--force

檢視版本庫内容

[root@server repo]# svn list /svn/repo/

--------------------------------------------------------------------------------------------------------

建立版本庫:

終端輸入:svnadmin create [路徑]

該路徑可以是相對路徑,例如,目前在home/user/svn/目錄下,輸入svnadmin create myproject,則該版本庫會被建立在home/user/svn/目錄下,建立一個檔案夾名為myproject,其中便是版本庫的檔案了。

将檔案導入版本庫:

終端輸入:svn import [源路徑] [目标版本庫路徑] -m [日志資訊]

源路徑可以是相對路徑,導入時會遞歸導入源路徑下的所有檔案和檔案夾,目标版本庫路徑需要絕對目錄(反正我試驗是這樣的),例如版本庫的目錄是:home/user/svn/myproject/。則應該這樣寫:file:///home/user/svn/myproject/

例如将目前目錄導入版本庫myproject:

svn import . file:///home/user/svn/myproject -m"導入檔案"

從版本庫導出:

導入後原檔案并未被納入版本管理,若想獲得受版本控制的檔案,就需要從版本庫導出

終端輸入:svn co [版本庫路徑] 

例如将myproject庫中的檔案導出到目前目錄:svn co file:///home/user/svn/myproject .

*************************************************************************

8、然後配置SVN鈎子自動更新項目檔案到web目錄

鈎子 hooks (可以将svn版本庫中的内容同步更新到指定目錄)

[root@server ~]# cd /home/svn/repo/hooks下

[root@server hooks]# vim post-commit 

#!/bin/sh

export LC_CTYPE="zh_CN.UTF-8"

SVN=/usr/bin/svn

WEB_PATH=/home/wwwroot #要強制更新的目錄

SVN_USER=admin

SVN_PASS=123456

$SVN update $WEB_PATH --username $SVN_USER --password $SVN_PASS            #執行更新

[root@server hooks]#  chmod a+x post-commit

[root@server hooks]#  cd  /home

[root@server home]# ls

www     repo

[root@server home]# mv  /home/repo  /home/wwwroot                       

                                              #将linux用戶端的檢出的版本庫命名為web的釋出目錄wwwroot

一、使用SVN中post-commit實作自動實時從svn中檢出檔案并同步到Web站點根目錄

cd /home/svn/hooks

cp post-commit.tmpl post-commit

vim post-commit #編輯,添加以下代碼

REPOS="$1"

REV="$2"

export LANG=en_US.UTF-8

SVN_PATH=/usr/bin

WEB_PATH=/home/wwwroot/

SVN_PASS=admin

LOG_PATH=/tmp/svn.log

echo `date "+%Y-%m-%d %H:%M:%S"` >> $LOG_PATH

echo `whoami`,$REPOS,$REV >> $LOG_PATH

$SVN_PATH/svn update $WEB_PATH --username $SVN_USER --password $SVN_PASS --no-auth-cache >> $LOG_PATH    

:wq #儲存退出

chown www:www /home/svn/hooks/post-commit #設定腳本所屬使用者組,www為web服務運作賬戶群組

chmod +x /home/svn/hooks/post-commit #添加腳本執行權限

說明:

whoami #執行此程式的使用者

REPOS="$1" #svn項目絕對路徑值

REV="$2" #最新版本号

--no-auth-cache #不儲存賬戶認證資訊

二、用戶端測試

使用svn用戶端添加一個檔案之後,進行svn添加并送出操作進入伺服器/home/wwwroot目錄下可以看到送出到svn的檔案已自動更新到web目錄下

至此,Linux下SVN伺服器自動更新檔案到Web目錄教程完成。

取消檔案的修改

svn revert 復原

送出沖突時候解決沖突

svn update

svn resolved 發現檔案最新

      本文轉自MQ_douer 51CTO部落格,原文連結:http://blog.51cto.com/douer/1915001,如需轉載請自行聯系原作者

繼續閱讀