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,如需轉載請自行聯系原作者