其實(shí)這文章是兩三個(gè)月前寫(xiě)的,一直沒(méi)有放上來(lái),這段時(shí)間正好又換了配置服務(wù)器,所以才拿出來(lái).
這幾天一直在找一個(gè)能與vs.net2003相結合的源代碼管理工具,幾乎試用過(guò)所有的大部分工具,難者難,易則簡(jiǎn),今天準備安裝subversion試試
1. 轉到http://httpd.apache.org/download.cgi
2. 下載 apache_2.0.53-win32-x86-no_ssl.msi
3. 轉到http://subversion.tigris.org 下載svn-1.1.3-setup.exe
4. 轉到http://tortoisesvn.tigris.org/下載TortoiseSVN-1.1.3-UNICODE_svn-1.1.3.msi
二 安裝
1.先安裝Apache,如果你的IIS已經(jīng)占用80端口,則在安裝的時(shí)間請使用8080口,不過(guò)這個(gè)版本好像是自動(dòng)選擇,為安全起見(jiàn),還是自己手動(dòng)選擇一下,避免沖突。假如我們選擇8080端口,安裝完后請打開(kāi)http://127.0.0.1:8080如果安裝成功的話(huà),您將看到歡迎頁(yè)。否則請檢查安裝是否正確.
2.接著(zhù)安裝svn-1.1.3-setup.exe,這個(gè)版本可以選擇是否要在apache的模塊中自動(dòng)配置,請選擇自動(dòng)配置。這樣的話(huà)就不用手動(dòng)修改配置文件了。
不然的話(huà)要進(jìn)行以下手動(dòng)配置
1. 把 <Subversion_root>/httpd/目錄下的 mod_dav_svn.so 和 mod_authz_svn.so Copy到 <Apache_root>/modules/ 目錄下。
2. 把 <Subversion_root>/bin/ 目錄下的 libdb42.dll、libeay32.dll、以及 ssleay32.dll Copy到 <Apache_root> 底下的 bin 或 modules文件夾。
3. 接著(zhù)用記事本打開(kāi)Apache HTTP Server 的 httpd.conf(在 <Apache_root>/conf/ 目錄下),找到 LoadModule 指令,先找到以下兩行:
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
把前面的 ‘#‘ 字元刪除,然后把下面幾行文字加到這群 LoadModule 指令的后面:LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
4. 重新啟動(dòng) Apache HTTP Server。
注意:按理說(shuō),在配置apache的時(shí)候,如果80已經(jīng)被IIS占了,我們選定8080口,但是這樣反而不行,怎么辦? 沒(méi)關(guān)系按apache選80口,它會(huì )自動(dòng)避開(kāi)的80而選擇8080的,這點(diǎn)很奇怪J
3.設置subversion的倉庫路徑
l 設置URL路徑 SVNPath
其語(yǔ)法是:
<Location /svn/repos_name>
DAV svn
SVNPath /absolute/path/to/repository
</Location>
其中 "/svn/repos_name" 就是客戶(hù)端存取特定檔案庫的 URI(Uniform Resource Indentifier),SVNPath 后面指定的路徑則是檔案庫的絕對路徑,假設我們的檔案庫實(shí)際存放的路徑是 d:/svn/MyProject,并且希望客戶(hù)端使用 "http://myserver/svn/myprj" 的 URL 來(lái)存取檔案庫,那么要加入 httpd.conf 的內容就是:
<Location /svn/myprj>
DAV svn
SVNPath d:/svn/MyProject
</Location>
注意 Location 標簽后面的 /svn/myprj 的第一個(gè)斜線(xiàn)不可少!
現在要設定 URL 路徑與檔案庫實(shí)體路徑的對應關(guān)系。對應的方式有兩種,分別是與
l 設置倉庫物理路徑 SVNParentPath。
如果你的檔案庫都集中放在某個(gè)目錄之下,例如:d:/svn,那你就可以使用 SVNParentPath 的方式指定檔案庫的根路徑,例如:
<Location /svn>
DAV svn
SVNParentPath d:/svn
</Location>
這表示可以讓任何人都可以透過(guò) http://myserver/svn/<檔案庫名稱(chēng)> 的方式,存取位于 d:/svn 這個(gè)目錄以下的所有檔案庫。也就是說(shuō),這個(gè)設定動(dòng)作只需要一次,如果使用 SVNPath,你必須為各個(gè)檔案庫分別指定對應的路徑。
以上兩種設定方式都可以,方便起見(jiàn),這里我用 SVNParentPath 來(lái)統一指定所有檔案庫的父層 URL 路徑。
將 <Location> 的設定加到 Apache HTTP Server 的 httpd.conf 檔尾就行了。
接著(zhù)便可以開(kāi)始建立檔案庫。
三 建立檔案庫
假設我們要把所有的檔案庫都放在 d:/svn 目錄下,現在要建立一個(gè)測試用的檔案庫,名稱(chēng)叫做 在 repository,指令為:
md d:/svn
svnadmin create d:/svn/repository
命令執行完后,檢查看看 d:/svn/repository 目錄底下產(chǎn)生了哪些目錄和檔案。
一般有如下目錄
這時(shí)候你已經(jīng)建立了一個(gè)檔案庫,你可以先在本機用瀏覽器測試一下,網(wǎng)址輸入 http://localhost:8080/svn/repository/,看看能不能看到檔案庫的內容.
四 存入倉庫
我們先測試一下這倉庫是否成功,先建立以下目錄結構
c:
cd temp
md ProjectA
md ProjectA/trunk
md ProjectA/branches
md ProjectA/tags
svn import . http://localhost/svn/repository -m "Initial repository layout"
提示
本文在執行 svn 命令時(shí),都是使用 http 協(xié)議的方式,這樣我們可以確知 Subversion 與 Apache HTTP Server 的設定無(wú)誤,其它人就可以透過(guò) Internet 存取檔案庫。當然你也可以用其它的協(xié)議,例如:file:///,如果使用 file 協(xié)議,最后一行指令就變成:
svn import . file:///d:/svn/repository -m "Initial repository layout"
五 項目的目錄結構
這里補充說(shuō)明一下 ProjectA 的目錄結構。在 ProjectA 項目的根目錄下建立的 trunk、branches、和 tags 這三個(gè)目錄是有特別意義的,它們的作用分別是:
trunk 目錄用來(lái)存份目前項目正在進(jìn)行開(kāi)發(fā)的程序檔案和文件(又稱(chēng)為主線(xiàn),即 mainline);
branches 用來(lái)存放主線(xiàn)的各個(gè)仍在發(fā)展中的分支;
tags 則用來(lái)存放已經(jīng)不再變動(dòng)的分支,也就是其中的檔案不會(huì )再修改了。
這是 Subverion 官方手冊建議的目錄結構安排方式,你可以自己決定要不要用這種配置方式,詳細說(shuō)明請參考官方手冊的第五章,子標題為 "Choosing a Repository Layout"。
補充
Subversion具有兩種服務(wù)模式,一個(gè)是作為Apache的模塊,另一個(gè)是自定義協(xié)議的Subserve服務(wù)。
作為Apache的模塊,客戶(hù)端可以通過(guò)WebDAV/DeltaV協(xié)議訪(fǎng)問(wèn)Repository,而使用Subserve則使用
Subversion的自定義協(xié)議。
下表是兩種服務(wù)模式的比較:
功能 Apache + mod_dav_sub Svnserve
驗證方式 基于HTTPS的X.509、LDAP、NTLM或其他Apache支持的驗證 CRAM-MD5或者SSH
用戶(hù)帳戶(hù)管理 私有的用戶(hù)文件 私有的用戶(hù)文件或已有的系統帳戶(hù)
授權管理 blanket read/write access或單一目錄的訪(fǎng)問(wèn)控制 blanket read/write access
加密 可選的SSL 可選的SSH隧道
交互性 可通過(guò)支持WebDAV的客戶(hù)端訪(fǎng)問(wèn) 無(wú)交互性
Web訪(fǎng)問(wèn) 有限的內置支持,或通過(guò)第三方的工具,例如ViewCVS 通過(guò)第三方的支持,如ViewCVS
速度 稍慢 稍快
初始安裝 稍復雜 相當簡(jiǎn)單
六 使用 Windows 網(wǎng)域賬戶(hù)驗證
照著(zhù)前面的步驟做,你會(huì )發(fā)現存取檔案庫時(shí)都不用輸入賬號密碼,這是因為我們之前的設定沒(méi)有啟用身分驗證的功能。但是我們通常不希望所有人都能任意存取你的檔案庫,免得重要資產(chǎn)外泄,或者數據被破壞,因此了解如何加入身分驗證也是必要的。
Serversion 提供了多種驗證使用者身份的方式,這里只介紹 Windows 身分驗證的方式,這種方式很適合用在開(kāi)發(fā)團隊成員都在局域網(wǎng)絡(luò )內的情況。請依下列步驟進(jìn)行:
取得 SSPI 模塊,下載網(wǎng)址為 http://tortoisesvn.tigris.org/mod_auth_sspi.zip。
把 zip 里面的 mod_auth_sspi.so 解壓縮到 <Apache_root>\modules 目錄下。
把下面這行加入到 Apache 的 httpd.conf 里面:
LoadModule sspi_auth_module modules/mod_auth_sspi.so
注意上面加入的這行一定要放在下面這行的前面:
LoadModule auth_module modules/mod_auth.so
修改 httpd.conf 的 <Location> 設定如下:
<Location /svn>
DAV svn
SVNParentPath d:/svn
AuthType SSPI
AuthName "Subversion 檔案庫"
Require valid-user
SSPIAuth On
SSPIAuthoritative On
SSPIDomain <domaincontroller>
SSPIOfferBasic On
</Location>
其中 <domaincontroller> 就是你的 Windows 域控制器的計算機名稱(chēng)(例如:WIN2KDC),注意兩邊的括號 <> 不用保留。如果你的環(huán)境沒(méi)有域控制器,就維持原來(lái)的 <domaincontroller> 就行了。在我的環(huán)境下,我發(fā)現即使有域控制器,但是這里不去設定它,還是能夠正常的驗證使用者身分。
重新啟動(dòng) Apache。
七 采用文件方式進(jìn)行身份驗證
此處也可以用mysql,passwd文件,LDAP等其他任何Apache支持的驗證方式。
此處我采用文件方式,首先建立一個(gè)保存密碼的文件,如果不需要對密碼加密,可增加-p參數生成plain text。
%APACHE_HOME%\bin\htpasswd –c -p d:\passwd\passwords user1 12345執行后會(huì )提示您輸入密碼,這樣就在文件passwords里生成一個(gè)用戶(hù)名為user1的用戶(hù),
生成的文件內容如下:
#格式username:password
user1:123456
例子:
Repository存放在D:\repository下,有兩個(gè)repository: test and xtest
每個(gè)repostory 的結構相同:
根:01.txt
02.txt
folder1-: 11.txt
12.txt
folder 2-: 21.txt
22.txt
對目錄1和2作不同的讀寫(xiě)權限控制
Basic Authentication
修改文件:
Httpd.conf:
#Basic authentication
<Location /repository>
DAV svn
SVNParentPath d:/repository
AuthzSVNAccessFile d:/repository/accessfile
Require valid-user
AuthType Basic
AuthName "身份驗證"
AuthUserFile d:/repository/passwd
</Location>
用Apache的htpasswd生成用戶(hù)名和密碼,
Htpasswd –c passwd username
第二次不用 –c。
生成的用戶(hù)名和密碼在passwd中:
0:$apr1$Vu5.....$XZ/csz/2YKoPNKpb88O5p0
1:$apr1$vu5.....$I1VwMJ7JtRmpmJjVUlT4h1
2:$apr1$Dv5.....$vf2MTg/p0mY.WcFhx7wET1
3:$apr1$Tv5.....$gfk4AiP49h0JjKN8BuJdB.
AuthzSVNAccessFile控制每個(gè)目錄的讀寫(xiě)權限
[test:/]
1 = r
2 = r
3 = r
[test:/1]
1 = rw
[test:/2]
2 = rw
在客戶(hù)端,用http://server/repository/test可以訪(fǎng)問(wèn)。也可以直接進(jìn)入子目錄訪(fǎng)問(wèn):http://server/repository/test/1,http://server/repository/test/2。系統會(huì )要求進(jìn)行認證。例如用戶(hù)1對目錄1有讀寫(xiě)權限,可以commit修改,但對目錄2所作的修改就不能commit。
SSPI認證。
按上一種方式,用戶(hù)更換一次密碼,就必須修改一次密碼文件。用SSPI認證則可以沒(méi)有這個(gè)問(wèn)題。
Httpd.conf文件:
#SSPI authentication
<Location /repository>
DAV svn
SVNParentPath d:/repository
AuthzSVNAccessFile d:/repository/accessfilesspi
Require valid-user
AuthType SSPI
AuthName "Subversion repositories"
# SSPI settings
SSPIAuth On
SSPIAuthoritative On
# point to domaincontroller
SSPIDomain domain.com.cn
SSPIOfferBasic On
</Location>
控制文件AuthzSVNAccessFile要作相應的修改:
[test:/]
domain\user1 = r
domain\administrator = r
[test:/1]
domain\user1 = rw
[test:/2]
domain\user1 =
domain\administrator = rw
在tortoiseSVN使用時(shí),會(huì )提示認證,填寫(xiě)用戶(hù)名和密碼即可。
如果要按照Group的方式來(lái)控制權限,可同時(shí)建立一個(gè)groups文件,內容如下:
#格式:GroupName: username1 username2
svngroup: user1 user2
在httpd.conf中的/svn處增加權限控制部分:
<Location /svn>
DAV svn
# 指向SVN Repository的ROOT
SVNPath d:/svnrepo
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile d:/passwd/passwords
AuthGroupFile d:/passwd/groups
Require group svngroup
</Location>
重起服務(wù)器,瀏覽http://localhost/svn,出現安全對話(huà)框,輸入用戶(hù)名密碼即可成功。
聯(lián)系客服