SVN服務(wù)器在SVNServer和Apache中搭建之技術(shù)分享
本節(jié)接著上節(jié)和大家一起來學(xué)習(xí)一下SVN服務(wù)的問題,經(jīng)過一段時間對SVN的學(xué)習(xí)有了一些心得,于是和大家分享一下,看完本文SVN服務(wù)問題的介紹你肯定有不少收獲,希望本文能教會你更多東西。
用SVNServe搭建SVN服務(wù)器
我們要把svnserve運行起來,我將在例子中介紹具體的使用方法。
下面假設(shè)我在本機上運行svnserve,IP為192.168.0.1,這個svn服務(wù)器為局域網(wǎng)內(nèi)的電腦提供svn服務(wù)。我打算把svn服務(wù)器的訪問地址設(shè)為http://192.168.0.1/svnprojects/projectX,其中X為不同的多個項目。整個過程如下(以windows下為例):
首先確定repo在本機上的儲存的位置,比如我準(zhǔn)備把repo放在D:svnprojetcs下,那么在命令行運行svnserve-d-rd:svnprojects就可以了。其中-d參數(shù)讓svnserve運行在后臺,-r參數(shù)限定了repo在網(wǎng)絡(luò)上可以訪問的地址。這樣如果網(wǎng)絡(luò)上其它的計算機要checkout這個服務(wù)器,只需要輸入svncheckoutsvn://192.168.0.1/project1而repo在本機上實際的位置是d:svnprojectsproject1。同理,如果想checkoutproject2,則把上面的project1改成project2就可以了。到此,一個簡單的svn服務(wù)器就算是基本架設(shè)好了。但如果要正常使用,我們還需要設(shè)定用戶的驗證和相應(yīng)的權(quán)限。
現(xiàn)在我們先建立一個叫project1的repo,然后轉(zhuǎn)到project1中:
svnadmincreated:svnprojectsproject1
cdd:svnprojectsproject1
project1目錄下有一堆目錄,進入conf并打開svnserve.conf這個文件,找到以下幾行,并把前面的注解符號‘#’去掉,注意千萬在每行的前面別留任何空格。
anon-access=read
auth-access=write
password-db=passwd
其中anon-access和auth-access分別為匿名和有權(quán)限用戶的權(quán)限,默認給匿名用戶只讀的權(quán)限,這很好,我們不需要改它們。但如果想拒絕匿名用戶的訪問,只需把read改成none就能達到目的。password-db后的passwd則為定義用戶名及密碼的文件路徑。這個文件默認跟snvserve.conf在同一個目錄,下面看看怎么配置passwd中的內(nèi)容。
[user]
#harry=harryssecret
#sally=sallyssecret
harry和sally這兩行分別定義了可以對repo進行寫入的用戶的用戶名和密碼。我們可以在下面加上自己的用戶名和密碼,比如testsvn=tester
這樣就給了用戶testsvn往repo中寫的權(quán)限。存盤退出后,svn服務(wù)器就算正式可以運行了!把所有需要管理的項目都放在d:svnprojects這個目錄下,像正常那樣用svnadmincreate命令建立repo,如果要checkoutrepo,則在命令行中輸入:svncheckoutsvn://192.168.0.1/project1如果要commit剛需要輸入剛才設(shè)置好的用戶名和密碼:svncommit-m"wearecommitingchanges!"--usernametestsvn--passwordtester
給Windows用戶的建議
如果你打算在Windows系統(tǒng)上運行svnserve,只是簡單的在命令行輸入svnserve-d-rd:svnprojects不是個好方法,一是每次都這么干太麻煩,二是服務(wù)器啟動后為了保持它的運行,你必須讓命令提示符窗口一直懸在桌面上,影響美觀。最好是把svnserve作為系統(tǒng)的一個進程每次啟動自動運行:
D:>sccreatesvn
binpath="D:svnbinsvnserve.exe--service-rD:svnprojects"
displayname="SubversionServer"
depend=Tcpip
start=auto把當(dāng)中的路徑換成你的svn安裝目錄就可以了。
在Apache下建立SVN服務(wù)器
在Apache中部署Subversion實際上并不比用svnserve難多少,它的難點在于一般人沒有修改Apache配置的權(quán)限,如果你有相應(yīng)的修改權(quán)限,那么搭建一個svn服務(wù)器不是一件難事,我們來看看應(yīng)該怎么配置。
準(zhǔn)備工作
首先確定Apache正確安裝,mod_dav和mov_dav_svn這兩個模塊也被啟用,在Debian系的Linux上可以這么安裝:
sudoapt-getinstallapache2subversionlibapache2-svn
在Windows平臺上,可以下載一個XAMPP,ApacheMySQLPHP什么的就都有了。
確定mod_dav和mod_dav_svn被打開:a2enmoddavdav_svn
基本設(shè)置
SVN服務(wù)介紹時以上的準(zhǔn)備工作做完后,就正式開始了,還是拿part2的機器網(wǎng)絡(luò)環(huán)境,同樣的例子。
我準(zhǔn)備讓repo的網(wǎng)絡(luò)訪問地址成為http://192.168.0.1/svnprojects/projectX,
修改/etc/apache2/conf下的httpd.conf,加入如下代碼:
<Location/svnprojects>
DAVsvn
SVNParentPath/path/to/svnprojects
</Location>
更多詳細的<Location>命令用法請參見Apache手冊,下同。SVNParentPath命令用來把網(wǎng)絡(luò)訪問地址和repo的實際地址對應(yīng)起來。
這樣就設(shè)置完了,如果你把repo建立好了,現(xiàn)在就已經(jīng)可以checkout了,輸入:svncheckouthttp://192.168.0.1/svnprojects/project1設(shè)定用戶的權(quán)限和驗證
但這樣肯定是不夠的,因為還沒有設(shè)定相應(yīng)的用戶權(quán)限,現(xiàn)在不管誰都可以往repo里塞東西,為了更好的控制,我們還需要設(shè)定訪問權(quán)限,比如讓指定的用戶可以commit,其他的只能checkout。因為我們在Apache上,所以訪問權(quán)限的控制就可以直接借用Apache的,首先為你的用戶設(shè)定用戶名和密碼:
htpasswd-cmb/path/to/passwdfile/passwordsuser1test1這樣就把用戶名和密碼儲存在passwords中了,加密方式為MD5。如果需要添加新的用戶,htpasswd-mb/path/to/passwdfile/passwordsuser2test2以此類推。
然后回到我們在httpd.conf中添加的代碼,修改一下:
- <Location>
- DAVsvn
- SVNParentPath/path/to/svnprojects
- AuthTypeBasic
- AuthName"TestRepository"
- AuthUserFile/path/to/passwdfile/passwords
- <LimitExceptGETPROPFINDOPTIONREPORT>
- Requirevalid-user
- </LimitExcept>
- </Location>
在這段代碼的控制下,任何人都可以對repo進行checkout,但只有user1和user2才可以commit,<LimitExcept>的作用是控制HTTP請求,如果HTTP請求是GETPROPFINDOPTIONREPORT中的一種,則不需要去驗證用戶。
最后,你需要把repo所在的目錄和文件的所有權(quán)都改成系統(tǒng)中操作Apache的用戶,這樣在commit的時候才會被Apache認可。在Ubuntu中,這個用戶叫www-data:
sudochown-Rwww-data/path/to/repo如果你用其它系統(tǒng)或是用Windows,可以在Apache的配置文件中找到User這個命令來知道應(yīng)該把目錄的所有權(quán)交給誰。
以上就是一個初步的Subversion服務(wù)器的搭建,這一篇考慮到實際上用的人可能不多,要用的人估計肯定會自己配置,因此我寫的不夠細致,比如說沒有說到基于SSL的設(shè)置步驟。本節(jié)關(guān)于SVN服務(wù)問題講解完畢,請關(guān)注本節(jié)其他相關(guān)報道。
【編輯推薦】