天天看點

使用svn和apache打造版本控制伺服器

1.安裝svn-1.4.4-setup.exe

2.建立一個目錄作為版本倉庫:如c:\snv

3.對版本倉庫目錄進行初始化:svnadmin create c:\svn

4.啟動版本伺服器:svnserve -d -r c:\svn

5.将檔案夾導入到版本倉庫中去(d:\test 目錄中):svn import svn://localhost

需要建立環境變量:SVN_EDITOR notepad

或者svn import svn://localhost -f -c:\log.log 日志檔案

6.認證失敗?

在c:\svn\conf\svnserve.conf 修改配置(預設是匿名使用者隻有read)

anon-access = read 下面加入一行

anon-access = write

ok了 重新開機服務 再次送出ok

7.我們在版本倉庫中建立一個虛拟目錄project2

svn mkdir svn://localhost/project2

8.我們再次送出一個檔案夾放置在版本服務的虛拟目錄project2中(d:\test2 目錄中 包含test。txt)

svn import svn://localhost/project2

9.從svn中檢出project2(d:\checkout 中)

svn checkout svn://localhost/project2

10.修改test.txt内容 并送出:svn commit test.txt

11.如果檔案鎖定 可以用 svn cleanup 指令解鎖

12.删除test.txt 通過update指令重新擷取:svn update test.txt

svn 權限

13.我們希望可以掌控svn的權限

anon-access = read

anon-access = write

注釋掉。這樣就不可以匿名修改了,不過還是可以匿名檢出。因為svn預設是允許匿名檢出的

我們新增一個anon-access = none 這樣匿名檢出也禁止了

14.我們添加認證使用者

将password-db = passwd 的注釋取消

打開conf下的passwd檔案

[users]

# harry = harryssecret

# sally = sallyssecret

按此格式分别鍵入使用者 = 密碼即可

svn+apache

svn的權限确實不敢恭維,現在我們将svn和apache進行整合

分别下載下傳svn對應的apache版本

1.apache的安裝 一路next即可

2.将svn安裝目錄bin下的mod_dav_svn.so,mod_authz_svn.so檔案 複制到apache目錄下的modules下

修改httpd.conf檔案,我這裡是145,146行的注釋去掉

LoadModule dav_module modules/mod_dav.so

LoadModule dav_fs_module modules/mod_dav_fs.so

3.在173行增加我們複制的檔案載入

LoadModule dav_svn_module modules/mod_dav_svn.so

LoadModule authz_svn_module modules/mod_authz_svn.so

4.在檔案結尾增加我們的目錄映射

<Location /svn>

DAV svn

SVNPath c:/svn

</Location>

5.重新開機apache 我們就可以通過:http://localhost/svn 浏覽通路版本庫了(不過沒有任何限制)

6.我們需要在<Location /svn></Location>配置驗證資訊

<Location /svn>

DAV svn

SVNPath c:/svn

AuthType Basic

AuthName "Subversion Repository"

AuthUserFile c:/passwords

Require valid-user

</Location>

AuthType表示驗證類型,這裡我們采用BASIC即基本方式,也是最常用的驗證方式。

AuthName表示出現登入對話框時,視窗的标題名。

AuthUserFile表示使用者登入資訊的存放檔案,這裡我們将該檔案儲存為E:/passwd/passwords,目前該檔案還不存在,不過不要着急,我們稍後就會建立該檔案。

Require valid-user 表示隻有認證的使用者才能通路,否則匿名使用者也可以通路。

7.我們建立登陸資訊檔案

apache bin目錄下的工具 htpasswd.exe

建立檔案 并建立一個使用者

htpasswd –c c:\passwords user1

會讓你輸入密碼 采用的md5加密

htpasswd c:\passwords user2

密碼采用明文

htpasswd -p c:\passwords user3

8.重新開機apache服務,我們通路和浏覽需要輸入使用者和密碼了

也可以使用svn工具進行管理 不過協定變成http了而不是svn了

9.多版本庫管理,我們将之前的 SVNPath c:/svn 修改為 SVNParentPath c:\svn

更改後已經無法浏覽倉庫内容了,

這是因為之前建立的倉庫都是以svn為根路徑的,是以一旦将它改成ParentPath後就無法正常通路了。

實際應用中,我們要import一個項目到SVN上,一般都不會import到根目錄中,而是import到項目特定的目錄中,

這樣當從SVN中檢出時我們也隻會檢出特定的項目,而不是将SVN中所有的項目全部檢出來,因為倉庫中可能有很多個其他項目。

10.我們在svn目錄下建立兩個目錄myproject1。myproject2

svnadmin create c:/svn/myproject1

svnadmin create c:/svn/myproject2

采用SVNParentPath方式,建立倉庫時也并不需要重新開機Apache伺服器,

因為SVNParentPath指定的路徑就是倉庫的父目錄,我們可以通過浏覽器檢視剛才import的項目。

這裡注意位址:http://localhost/svn/project1,如果輸入http://localhost/svn,則無權限通路,因為預設情況下我們隻能通路其中的子倉庫。

11.如何允許匿名使用者讀取

httpd.conf中的Require valid-user改為如下:

<LimitExcept GET PROPFIND OPTIONS REPORT>

Require valid-user

</LimitExcept>

12.我們需要更細緻的權限設定,

SVN倉庫中有很多的子倉庫,每個子倉庫中又有很多目錄和檔案,那麼我需要配置以便使某些使用者可以通路某些倉庫,

即可以讀寫;而另外一些使用者隻能讀不能寫,不過這兩種類型的使用者都需要輸入認證資訊方能進行操作

将httpd.conf内容修改為

<Location /svn>

DAV svn

SVNParentPath C:\svn

AuthzSVNAccessFile C:/policy

AuthType Basic

AuthName "Subversion Repository"

AuthUserFile C:/passwords

Require valid-user

</Location>

policy檔案内容為權限資訊 如下

[project1:/]

user1=rw

user2=r

user3=

對于project1路徑,user1使用者可讀可寫,而user2使用者隻讀,另外的使用者user3不能讀也不能寫。這就定義了SVN倉庫的通路政策。

這裡也可以通過分組進行定義 如下

[groups]

developers=user1,user2

testers=user3

[project1:/]

@developers=rw

@testers=

[project2:/]

@developers=rw

@testers=rw

13.備份版本庫

svnadmin hotcopy C:\svn E:\backup