準(zhǔn)備工作
首先先下載Windows版本的SVN服務(wù)器(各位都會(huì)使用搜索引擎所以就不提供下載地址了),這里我以svn-win32-1.4.3的ZIP解壓縮版為例,將其解壓縮到目標(biāo)目錄,例如我是解壓到D盤(pán)下的Subversion目錄,把D:\Subversion\bin加到系統(tǒng)環(huán)境變量,如果你的解壓位置與我不同,那么請(qǐng)按照你的實(shí)際路徑設(shè)置環(huán)境變量。
第一步:創(chuàng)建SVN數(shù)據(jù)庫(kù)
打開(kāi)Windows命令提示符,執(zhí)行命令svnadmin create F:\SVN,svnadmin create是創(chuàng)建SVN數(shù)據(jù)庫(kù)的命令,F:\SVN是你的SVN數(shù)據(jù)庫(kù)位置,這里我只是舉個(gè)例子,你可以自己決定SVN數(shù)據(jù)庫(kù)位置,執(zhí)行完以上命令后就會(huì)在F盤(pán)下多出一個(gè)SVN目錄,里面有若干目錄和文件,conf目錄是用來(lái)存放權(quán)限配置的,后面會(huì)詳細(xì)說(shuō)明,dav目錄用來(lái)提供給apache和mod_dav_svn存儲(chǔ)內(nèi)部數(shù)據(jù),db目錄是所有版本控制的數(shù)據(jù)文件,hooks目錄用來(lái)放置hook腳本文件,locks目錄存放Subversion文件庫(kù)鎖定數(shù)據(jù),用來(lái)追蹤存取文件庫(kù)的客戶端,format是一個(gè)文本文件,里面只放了一個(gè)整數(shù),表示當(dāng)前文件庫(kù)配置的版本號(hào),還有個(gè)readme.txt不用說(shuō)也知道是干什么的了。
第二步:啟動(dòng)SVN服務(wù)器
繼續(xù)在Windows命令提示符里執(zhí)行命令svnserve -d -r F:\SVN,參數(shù)-d是將SVN服務(wù)做為后臺(tái)服務(wù),參數(shù)-r是指定SVN服務(wù)的根目錄位置,F:\SVN自然就是SVN根目錄了,到這里為止SVN服務(wù)器就已經(jīng)啟動(dòng)了,可以用SVN客戶端測(cè)試一下。
第三步:將SVN服務(wù)注冊(cè)為系統(tǒng)服務(wù)
你可能會(huì)問(wèn)這樣豈不是每次啟動(dòng)SVN服務(wù)器都要輸入一次命令?怎樣才能讓SVN服務(wù)器在開(kāi)機(jī)的時(shí)候自動(dòng)啟動(dòng)呢?答案就是將SVN服務(wù)注冊(cè)到Windows系統(tǒng)服務(wù),在Windows命令提示符里執(zhí)行命令
sc create SVN binpath= "\"d:\subversion\bin\svnserve.exe\" --service -r F:\SVN" displayname= "SVN Service" depend= Tcpip start= auto,這個(gè)命令是不是有點(diǎn)長(zhǎng)?其實(shí)很容易理解,sc是Windows自帶的系統(tǒng)服務(wù)注冊(cè)工具,微軟支持中心提供了詳細(xì)的說(shuō)明,這里我就不再?gòu)?fù)述了,參數(shù)binpath= "\"d:\subversion\bin\svnserve.exe\" --service -r F:\SVN"和我們前面手動(dòng)啟動(dòng)SVN服務(wù)器的命令很像吧?只是把-d改成了--service,這不難理解,因?yàn)楝F(xiàn)在是服務(wù)嘛。好了,現(xiàn)在已經(jīng)大功告成了,重起一下試試吧。
PS:如果想從系統(tǒng)服務(wù)里刪除剛才注冊(cè)的SVN服務(wù)可以使用sc delete SVN命令。
第四步:設(shè)置權(quán)限
各位都是做IT的,為研發(fā)中的項(xiàng)目設(shè)置合理的權(quán)限有多重要就不需要我說(shuō)了,就拿開(kāi)發(fā)游戲來(lái)說(shuō)吧,程序部門(mén)需要有源代碼目錄的所有權(quán)限以及美術(shù)資源目錄和策劃案目錄的獲取權(quán)限,美術(shù)部門(mén)需要有美術(shù)資源目錄的所有權(quán)限以及策劃案目錄的獲取權(quán)限,而策劃部門(mén)則需要有策劃案目錄的所有權(quán)限及美術(shù)資源目錄的獲取權(quán)限。接下去就來(lái)看看SVN是如何設(shè)置權(quán)限的,還記得第一步創(chuàng)建SVN數(shù)據(jù)庫(kù)時(shí)提到的conf目錄吧,conf目錄里有3個(gè)文件,這3個(gè)都是文本文件,用計(jì)事本打開(kāi)它們就行了,我們先看svnserve.conf文件,anon-access項(xiàng)指定了未經(jīng)驗(yàn)證的用戶所具有的操作權(quán)限,它有3個(gè)有效值,分別是read,write,none,read為讀權(quán)限,write為寫(xiě)權(quán)限,none為沒(méi)有任何權(quán)限,password-db項(xiàng)用來(lái)指定存放用戶名和密碼的文件,authz-db項(xiàng)用來(lái)指定存放用戶權(quán)限的文件,realm項(xiàng)用來(lái)指定驗(yàn)證范圍,這項(xiàng)一般情況下用不到,以上4項(xiàng)默認(rèn)都是被注釋掉的.#號(hào)為注釋符,要起用它們只需要把注釋符去掉即可。passwd文件是默認(rèn)存放用戶名和密碼的文件,例如我設(shè)置一個(gè)Sol用戶,密碼為111111,只需在[users]下添加Sol=111111即可,authz文件是默認(rèn)指定存放用戶權(quán)限的文件,[groups]代表分組,這里我們?cè)O(shè)置個(gè)developer組,將前面創(chuàng)建的Sol用戶分到developer組里,同樣只需在[groups]下寫(xiě)上developer=Sol即可,[/]代表根目錄,如果我們要設(shè)置developer組有完全的訪問(wèn)權(quán)限就在下面加上@developer=rw,前面加@符代表組,除此之外我們?cè)试S所有人都有讀取權(quán)限還要在下面加上*=r,SVN允許對(duì)每個(gè)目錄設(shè)置權(quán)限,設(shè)置方法和根目錄差不多,如果到這里你還不是很明白那么請(qǐng)看下面的例子。
一個(gè)權(quán)限配置的例子
我們以游戲項(xiàng)目開(kāi)發(fā)為例,項(xiàng)目名就叫Project1吧,怎么創(chuàng)建SVN數(shù)據(jù)庫(kù)上面已經(jīng)說(shuō)過(guò)了,我們?cè)赟VN的根目錄下創(chuàng)建一個(gè)名為Project1的本地?cái)?shù)據(jù)庫(kù),先配置conf目錄下的svnserve.conf文件,我們不允許任何與研發(fā)無(wú)關(guān)的人員訪問(wèn)此項(xiàng)目,因此我們禁止匿名訪問(wèn)并為每個(gè)研發(fā)人員創(chuàng)建個(gè)人帳號(hào),權(quán)限文件和帳戶信息文件用默認(rèn)同目錄下的authz文件和passwd文件就行了。
svnserve.conf文件配置如下:
[general]
anon-access = none
password-db = passwd
authz-db = authz
接下去配置passwd文件,為每個(gè)研發(fā)人員設(shè)置個(gè)人帳戶,假設(shè)項(xiàng)目負(fù)責(zé)人是Sol,程序部門(mén)有Tom、Mark,美術(shù)部門(mén)有John、Alina、Candice、Ellen,策劃部門(mén)有Terry、Jane,這里我們?yōu)榱朔奖銓⒚艽a全部設(shè)置為000000,現(xiàn)在是例子沒(méi)關(guān)系,實(shí)際應(yīng)用的時(shí)候密碼就不能這么隨便設(shè)置了。
passwd文件配置如下:
[users]
Sol = 000000
Tom = 000000
Mark = 000000
John = 000000
Alina = 000000
Candice = 000000
Ellen = 000000
Terry = 000000
Jane = 000000
帳戶都創(chuàng)建好了,現(xiàn)在為他們分配不同的權(quán)限,先設(shè)置4個(gè)組.分別是manager 、developer、artist、designer,將Sol分配到manager組里,將Tom、Mark分配到developer組,將John、Alina、Candice、Ellen分配到artist組,將Terry、Jane分配到designer組,等會(huì)我們會(huì)在項(xiàng)目中創(chuàng)建designs、sources、resources、reports這4個(gè)目錄,然后在reports目錄里為每個(gè)人創(chuàng)建一個(gè)以自己帳戶命名的目錄用來(lái)放每個(gè)人的工作報(bào)告,manager組擁有所有目錄的讀寫(xiě)權(quán)限,developer組擁有sources目錄的讀寫(xiě)權(quán)限以及designs和resources目錄的讀取權(quán)限,artist組擁有resources目錄的讀寫(xiě)權(quán)限以及designs目錄的讀取權(quán)限,designer組擁有designs目錄的讀寫(xiě)權(quán)限以及resources目錄的讀取權(quán)限,每個(gè)帳戶都擁有reports目錄下以自己帳戶命名的目錄的讀寫(xiě)權(quán)限,也就是說(shuō)每個(gè)人的工作報(bào)告只有自己和項(xiàng)目負(fù)責(zé)人能看到。
authz文件配置如下:
[groups]
manager = Sol
developer = Tom,Mark
artist = John,Alina,Candice,Ellen
designer = Terry,Jane
[Project1:/]
@manager = rw
* = r
[Project1:/designs]
@manager = rw
@developer = r
@artist = r
@designer = rw
* =
[Project1:/sources]
@manager = rw
@developer = rw
* =
[Project1:/resources]
@manager = rw
@developer = r
@artist = rw
@designer = r
* =
[Project1:/reports/Sol]
Sol = rw
* =
[Project1:/reports/Tom]
@manager = rw
Tom = rw
* =
[Project1:/reports/Mark]
@manager = rw
Mark = rw
* =
[Project1:/reports/John]
@manager = rw
John = rw
* =
[Project1:/reports/Alina]
@manager = rw
Alina = rw
* =
[Project1:/reports/Candice]
@manager = rw
Candice = rw
* =
[Project1:/reports/Ellen]
@manager = rw
Ellen = rw
* =
[Project1:/reports/Terry]
@manager = rw
Terry = rw
* =
[Project1:/reports/Jane]
@manager = rw
Jane = rw
* =
目錄的權(quán)限都設(shè)置完了,但是目錄我們還沒(méi)有創(chuàng)建,現(xiàn)在只有項(xiàng)目負(fù)責(zé)人才有權(quán)限在項(xiàng)目根目錄下創(chuàng)建目錄,所以我們用Sol的帳戶來(lái)創(chuàng)建designs、reports、resources、sources這4個(gè)目錄,然后再到reports目錄里為每個(gè)人創(chuàng)建以各自帳戶命名的工作報(bào)告目錄,好了,到這里就全部搞定了,收工。