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