啟動(dòng)svnserve服務(wù)
svnserve 是一個(gè)輕量級(jí)的服務(wù), 使用自定義的協(xié)議通過TCP/IP與客戶端通訊。
客戶端通過由 svn:// 或者 svn+ssh:// 開始的URL訪問svnserve服務(wù)器。
啟動(dòng)服務(wù)器
端口監(jiān)控(inetd)模式
如果你打算用端口監(jiān)控來啟動(dòng)處理客戶的訪問請(qǐng)求的進(jìn)程,你可以通過傳入?yún)?shù)-i來啟動(dòng):
svnserve -i
當(dāng)使用-i參數(shù)啟動(dòng)服務(wù)的時(shí)候,svnserve通過stdin和stdout用自定義協(xié)議和客戶端
通訊。同時(shí)服務(wù)偵聽3690端口。
獨(dú)立端口監(jiān)控進(jìn)程
使用參數(shù)-d啟動(dòng)服務(wù)作為一個(gè)獨(dú)立的端口監(jiān)控進(jìn)程。
svnserve -d
當(dāng)運(yùn)行svnserve在獨(dú)立端口監(jiān)控模式時(shí),你可以使用--listen-port=和--listen-host=參數(shù)來自定義需要的端口和主機(jī)名稱。當(dāng)前模式默認(rèn)的端口是3690。
當(dāng)然,也有第三種方法啟動(dòng)svnserve,也是使用“隧道模式”,使用-t參數(shù)啟動(dòng)服務(wù)。這個(gè)模式要求遠(yuǎn)程服務(wù)程序,如RSH或SSH,已經(jīng)成功驗(yàn)證用戶,并且使用已經(jīng)校驗(yàn)的用戶啟動(dòng)一個(gè)屬于該用戶的svnserve進(jìn)程。當(dāng)使用該模式提供服務(wù)時(shí),要確認(rèn)啟動(dòng)的用戶帳戶具備對(duì)Repository的讀/寫權(quán)限。
設(shè)置項(xiàng)目目錄
當(dāng)svnserve開始運(yùn)行時(shí),它將會(huì)暴露所有的Repository到網(wǎng)絡(luò)上。不過,當(dāng)客戶端需要獲取一個(gè)Repository的內(nèi)容時(shí),需要指定Reopsitory的路徑。例如:一個(gè)Repository放在文件路徑
C:/Project Repository/Project1
那么當(dāng)客戶端訪問時(shí),需要指定路徑:
svn://host/C:/Project Repository/Project1
所以,為了增加保密性,你可以使用參數(shù)-r指定需要暴露的Repository的路徑,當(dāng)用戶訪問時(shí),只需指定Repository的名稱即可。例如上面的Repository,當(dāng)啟動(dòng)服務(wù)時(shí),使用如下的方法:
svn -d -r C:/Project Repository
那么當(dāng)客戶端訪問時(shí),則使用
svn://host/Project1
可以獲取數(shù)據(jù)了。
內(nèi)置的驗(yàn)證和授權(quán)
當(dāng)客戶端連接到一個(gè)svnserve進(jìn)程時(shí),下面的流程會(huì)觸發(fā):
1、客戶選擇一個(gè)指定的Repository;
2、服務(wù)處理Repository的配置文件 conf/svnserve.conf文件,并且開始執(zhí)行在其中定義的所有驗(yàn)證和授權(quán)策略;
3、依賴與情形和授權(quán)策略:
a)客戶端也許允許匿名訪問而不需要驗(yàn)證,或者
b)客戶但也許需要在任何時(shí)候被要求驗(yàn)證,或者
c)假如處于"隧道模式"中,客戶端將聲明自己已經(jīng)可以被外部驗(yàn)證。
很顯然,如上所說,用戶文件是一個(gè)名為svnserve.conf的,放在conf目錄下的文件。
現(xiàn)在我們來看看如何配置這個(gè)文件:
這個(gè)配置文件放置在Repository的目錄中的conf目錄下,它有兩個(gè)節(jié)點(diǎn):
[general]
[users]
其中,[general]的配置信息有:
anon-access = read
auth-access = write
其中表示對(duì)于驗(yàn)證有效的以及沒通過驗(yàn)證的用戶可以做什么事情。分別有read, write和none
[users]的標(biāo)簽的配置內(nèi)容有:
USERNAME = PASSWORD
password-db = passwd
realm = My First Repository
其中表示,用戶名對(duì)應(yīng)的密碼是什么,或者指定一個(gè)存儲(chǔ)用戶名和密碼的文件的相對(duì)或路徑以及指定了Repository的驗(yàn)證領(lǐng)域。如果兩個(gè)Repository有相同的驗(yàn)證領(lǐng)域,那么它們應(yīng)該有相同的密碼數(shù)據(jù)庫,反之亦然。默認(rèn)的領(lǐng)域是指向當(dāng)前的Repository的路徑,與服務(wù)器的Repository的根目錄相關(guān)。