在linux上面搭建svn服務器遇到的一些問題和想法

        昨天在centos上面搭建了svn服務器,其中遇到了一些問題,以及在設置authz 上面的一些想法,在這裏和大家分享一下,希望能對大家有一些幫助。

 

遇到的問題:

在安裝完成後輸入用戶名和密碼,報錯爲:Option expected 是因爲在配置svnserv.conf 時,刪除了設置項前面的“#”號,但是行的前面還是有空格的,刪除空格就不會報錯誤了。

 

版本庫的創建:

        在創建版本庫的時候會有兩種設想,

a.在一個倉庫下面創建多個子目錄,來控制不同項目的版本。這樣設置一套passwd和authz 文件就可以控制所有項目中人員的權限。但是這樣層次比較混亂,容易出錯。

b.每個項目都創建一個一個版本庫,每個版本庫中都要設置passwd和authz 文件,來控制用戶和權限,相對上面的方法來說,麻煩一點,但是層次清晰很多。

 

查閱了一些大能的看法,比較偏向於b 種的方法,因爲 Subversion的每次commit都會導致整個倉庫 版本號增加一個,會使得 多個項目的版本號出現斷層。而且如果多個項目參與人不同,就必須使用apache2進行細粒度的權限控制,不是太方便。一個倉庫一個項目,顯得更優雅一些。

 

還有一方法我感覺比較好,有b 方案的層次清晰,也有a 方案的管理方便,贊一個,O(∩_∩)O~

使用svnserve時,爲了管理的方便,應該使用相同的認證和授權文件,所以應該讓所有版本庫的配置文件svnserve.conf指向同一個password-dbauthz-db文件。下面是一個多版本庫的目錄:

D:/SVNROOT

├─project1

│├─conf

│├─dav

│├─db

││├─revprops

││├─revs

││└─transactions

│├─hooks

│└─locks

└─project2

├─conf

├─dav

├─db

│├─revprops

│├─revs

│└─transactions

├─hooks

└─locks

D:/SVNROOT下有兩個目錄project1project2,都已經創建了版本庫,所以我們修改每個conf目錄下的svnserve.conf,使之指向同一個password-dbauthz-db文件。

password-db = ../../passwd

authz-db = ../../authz

 

 設置authz 的權限:

經過測試,首先要注意在根目錄和下層子目錄有遞歸的權限關係,也有是根目錄有“讀”的權限,那麼子目錄即使設置了“寫”的權限,也是不可能別寫入的,但是在查的一些資料裏面和我的試驗有點分歧,如果哪位兄臺知道,還請多多指教。

還有就是在書寫方面:

1,配置authz時,沒有注意svnserve啓動參數-r所指定的目錄。


A:-r直接指定到版本庫(稱之爲單庫svnserve方式)
比如,有一個庫project1,位於D:\svn\project1
使用以下命令啓動svnservesvnserve -d -r D:\svn\project1  


在這種情況下,一個svnserve只能爲一個版本庫工作
authz文件如果配置成下面這樣就是錯的,

[groups]
admin=user1
dev=user2


[project1:/]
@admin=rw
@dev=r  


應該配置成

[groups]
admin=user1
dev=user2
[/]
@admin=rw
@dev=r  


因爲[project1:/]表示庫project1的根目錄,而按上面的啓動參數,是沒有庫的概念的。
使用類似這樣的URL:svn://192.168.0.1/ 即可訪問project1

B:-r指定到版本庫的上級目錄(稱之爲多庫svnserve方式)
同樣,有一個庫project1,位於D:\svn\project1
如果使用以下命令啓動svnserve

svnserve -d -r D:\svn  


這種情況,一個svnserve可以爲多個版本庫工作,
這時如果想限制指定庫的指定目錄,就應該指定具體的庫,像這樣

[groups]
admin=user1
dev=user2
[project1:/]
@admin=rw
@dev=r  


如果此時你還用[/],則表示所有庫的根目錄,同理,[/src]表示所有庫的根目錄下的src目錄
使用類似這樣的URL:svn://192.168.0.1/project1 即可訪問project1
這樣的URL:svn://192.168.0.1/project2 即可訪問project2

 

2,對中文目錄進行權限控制時,沒有將權限文件authz改爲utf-8格式。

svn對於非英文文件名和目錄名使用utf-8格式編碼處理,要對中文目錄進行正確控制,
應該使用無BOM的utf-8格式,如何將默認的文件轉爲utf-8,
我使用的是UltraEdit的菜單"ASCII to UTF-8 (Unicode Editing)"。在UltraEdit的配置中,可以設置有無BOM

 

svn子目錄權限設置:

svn不提供變更管理,是否可以通過對其子目錄的權限設置來實現呢?
authz文件中修改:
例如配置庫名字:test,之下存在doc、trunk兩個子目錄,其中用戶zhang只有doc子目錄的讀權限,則應如下設置:
[test:/doc]
zhang = r
注意此處切記[test:/doc/]是錯誤的寫法,一定不能加入最後的“/”,否則,導出時提示權限不對。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章