隨著項(xiàng)目的增大,需要更多的人參與到同一個(gè)項(xiàng)目的開發(fā)中。其中SVN就是用于多個(gè)人共同開發(fā)同一個(gè)項(xiàng)目,達(dá)到公用資源的目的。
SVN服務(wù)器有2中運(yùn)行方式:一是作為獨(dú)立服務(wù)器,另一種是借助apache運(yùn)行。兩種方式各有利弊,這個(gè)用戶可以自己去選擇。在這里我們只討論種方式:作為獨(dú)立服務(wù)器。
創(chuàng)建SVN倉庫
首先我們需要安裝SVN應(yīng)用程序。這里我們選擇的操作系統(tǒng)是centos。安裝SVN應(yīng)用程序在linux系統(tǒng)下其實(shí)是很簡單的。使用如下命令
# yum install svn
接著就會(huì)出現(xiàn)安裝的過程。安裝完成以后,我們來新建SVN倉庫reptest。為了便于管理,我們新建一個(gè)文件夾,專門用來存放所有的倉庫 /repos
# mkdir /repos
# svnadmin create /repos/reptest
創(chuàng)建完成以后,我們進(jìn)入該倉庫,會(huì)發(fā)現(xiàn)在該目錄下存在幾個(gè)文件和目錄
# cd /repos/reptest
# ls
conf db format hooks locks README.txt
這樣我們就創(chuàng)建了一個(gè)SVN的倉庫。
配置用戶權(quán)限
創(chuàng)建完成倉庫以后,如果想作為一個(gè)獨(dú)立的服務(wù)器,當(dāng)然得需要配置用戶的權(quán)限。這里需要用到的有三個(gè)文件svnserve.conf、authz和passwd。
svnserve.conf
使用vim打開svnserve.conf文件 修改以下幾項(xiàng)。
anon-access = read //去掉開頭的#
auth-access = write //去掉開頭的#
password-db = passwd //去掉開頭的# 默認(rèn)為passwd 這個(gè)文件可以自定義
authz-db = authz //去掉開頭的# 默認(rèn)為authz 這個(gè)文件可以自定義
保存退出
passwd
該文件作用是設(shè)定可以訪問服務(wù)的用戶和密碼,在該文件內(nèi)的用戶可以訪問SVN服務(wù)。在該文件中添加如下內(nèi)容
[users]
svnuser = svnuser123
保存退出以后,我們就設(shè)定了一個(gè)可以訪問該服務(wù)的用戶svnuser,其密碼為svnuser123
authz
該文件是驗(yàn)證用戶對(duì)相應(yīng)目錄的權(quán)限。我們?cè)谖募?nèi)容的末尾添加如下內(nèi)容
[/]
svnuser = rw
對(duì)于SVN服務(wù)的整個(gè)根目錄,svnuser都有讀寫的權(quán)限。
對(duì)于以上三個(gè)文件都編輯完成以后,下面就開始使用該服務(wù)了。
開啟SVN服務(wù)
接下來我們開始開啟SVN服務(wù),這里服務(wù)由兩種方式:一種是單倉庫,另一種是多倉庫的。
單倉庫
對(duì)于單倉庫的服務(wù)其實(shí)很簡單。還記得我們剛開始新建的存放倉庫的目錄 /repos嗎?這里我們?cè)谶@個(gè)目錄里面新建了一個(gè)svntest倉庫,如果是單倉庫的形式我們只需要在開啟服務(wù)的時(shí)候?qū)⑦@個(gè)倉庫名稱接在/repos后面——/repos/svntest
# svnserve –d –r /repos/svntest
執(zhí)行完上面的命令,這樣我們就開啟SVN服務(wù)了。
對(duì)于這種單倉庫的訪問形式可以使用如下的命令
# svn checkout svn://ip –username svnuser –password svnuser123 /目標(biāo)目錄
這樣我們檢出的就是svntest倉庫的內(nèi)容了。
多倉庫
對(duì)于多倉庫的服務(wù)的開啟方式其實(shí)和但倉庫的形式?jīng)]有太大的區(qū)別。主要的區(qū)別就在于我們開始新建的存放倉庫的目錄/repos 了。這樣我們?cè)陂_啟服務(wù)的時(shí)候就不要加上目錄名稱了。直接使用/repos即可
# svnserve –d –r /repos
開啟服務(wù)以后訪問的形式就變了
# svn checkout svn://ip/svntest –username svnuser –password svnuser123
在訪問的時(shí)候需要在svn地址后面加上svntest倉庫名稱。
當(dāng)然,如果說只是保存我們開發(fā)的代碼的話,到這里已經(jīng)完成了。但是有時(shí)候我們需要將我們提交的代碼同步到web目錄下面。那這時(shí)我們還需要借助svn的鉤子 post-commit來實(shí)現(xiàn)我們的需求。
post-commit 同步代碼
首先要明確我們的應(yīng)用項(xiàng)目的目錄。這里我們使用/web作為我們web應(yīng)用項(xiàng)目的目錄。
然后我們進(jìn)入/web目錄,并在倉庫中檢出一份代碼。
# cd /web
# svn checkout svn://ip/svntest –username svnuser –password svnuser123
//這里我們假設(shè)用的是多倉庫的形式
接下來編輯shell腳本post-commit。
# vim /repos/svntest/hooks/post-commit
在打開的post-commit 的編輯界面添加如下腳本
#!/bin/bash
export LANG=zh_CN.UTF-8 #文件編碼
REPOS="$1" #倉庫路徑
REV="$2" # 剛剛提交的代碼的版本號(hào)
SVN=/usr/bin/svn # svn命令
WEB=/web/svntest # web目錄
LOG=/data/home/auto_svn.log #日志文件
$SVN update $WEB --username react --password react123 #后更新的命令
保存退出。然后修改post-commit的用戶權(quán)限。使用戶對(duì)其有執(zhí)行的權(quán)限
# chmod u+x /repos/svntest/hooks/post-commit
后重啟SVN服務(wù)
# ps –ef | grep svn //首先檢測當(dāng)前的進(jìn)程id
root 4888 1 0 Mar25 ? 00:00:00 svnserve -d -r /repos
# kill -9 4888 //4888是進(jìn)程id,使用kill命令殺死該進(jìn)程
# svnserve –d –r /repos //重新開啟服務(wù)
# ps –ef | grep svn
root 17957 1 0 19:38 ? 00:00:00 svnserve -d -r /repos
//服務(wù)已被啟動(dòng)成功,其進(jìn)程id為17957
此時(shí)當(dāng)我們提交新的代碼或者修改的代碼以后,這些代碼都會(huì)自動(dòng)同步到/web/svntest目錄中。
但是這樣有一個(gè)問題,就是在/web/svntest目錄中會(huì)有檢出的.svn目錄。這樣對(duì)web的安全存在隱患。當(dāng)然這樣的問題可以通過nginx或者apache的重寫功能來消除隱患。具體實(shí)現(xiàn)我們可以自行查閱。
希望上面的簡單的搭建svn服務(wù)的過程,對(duì)大家在實(shí)際工作中有所幫助。
本站文章版權(quán)歸原作者及原出處所有 。內(nèi)容為作者個(gè)人觀點(diǎn), 并不代表本站贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé),本站只提供參考并不構(gòu)成任何投資及應(yīng)用建議。本站是一個(gè)個(gè)人學(xué)習(xí)交流的平臺(tái),網(wǎng)站上部分文章為轉(zhuǎn)載,并不用于任何商業(yè)目的,我們已經(jīng)盡可能的對(duì)作者和來源進(jìn)行了通告,但是能力有限或疏忽,造成漏登,請(qǐng)及時(shí)聯(lián)系我們,我們將根據(jù)著作權(quán)人的要求,立即更正或者刪除有關(guān)內(nèi)容。本站擁有對(duì)此聲明的最終解釋權(quán)。