SVN可以配置多種方式進行訪問,但在公司內(nèi)部搭建的svn服務(wù)器,如果僅僅在局域網(wǎng)里訪問的話,總感覺用svn協(xié)議要比http協(xié)議來得效率高些,所以,一般總是用svnserve來啟動svn的服務(wù)。一般而言,如果是從svn 1.2或1.3的版本開始使用的人,總以為svn協(xié)議只能配置到倉庫的權(quán)限控制,而不能針對目錄進行權(quán)限控制,即使看到其authz示例文件中有如下的內(nèi)容:



但謹守其自帶文檔Chapter 6中關(guān)于svnserve一節(jié)的教導(dǎo):
Notice that svnserve only understands “blanket” access control. A user either has universal read/write access , universal read access, or no access. There is no detailed control over access to specific paths within the repository. For many projects and sites , this level of access control is more than adequate. However , if you need per-directory access control , you'll need to use either use Apache with mod_authz_svn (see the section called “Per-Directory Access Control”) or use a pre-commit hook script to control write access (see the section called “Hook Scripts”).
一般還是不會多去研究,只當作是結(jié)合Apache來進行面向目錄的權(quán)限控制文件示例。
其實,心里一直對這種方式有個小疙瘩,最近又要開一個新項目的代碼庫,雖然實際上對代碼的訪問控制也沒有特別的要求,但心想既然authz文件里有關(guān)于目錄的設(shè)置,是不是能嘗試一下,用svnserve也能進行目錄權(quán)限的控制呢。于是到網(wǎng)上搜了一下,omg,這個功能竟然早在1.3的時候就已經(jīng)實現(xiàn)了,對其詳盡而完整的描述來自Michael的這篇Subversion之路--實現(xiàn)精細的目錄訪問權(quán)限控制?,其中的幾個要點包括:
??? 1. svnserve支持面向目錄的訪問控制了;
??? 2. 權(quán)限具備繼承性,所以需要用"* = "的形式來禁止未授權(quán)的用戶訪問特定子目錄;
??? 3. svn 1.3.2及以后的版本允許對子目錄進行操作而無需父目錄的讀權(quán)限;
??? 4. 如果是中文目錄的話,authz必須以utf-8的格式保存,且不能帶BOM,而windows自帶的記事本按utf-8保存的文件則會加上BOM,所以,如果你以utf-8格式保存好后,提交代碼時,svn報"section header expected"的錯時,則多半是帶BOM的。當然現(xiàn)在很多編輯器都能很方便的轉(zhuǎn)換了,如ultraedit的保存為U8-DOS,editplus保存為utf-8,以及開源的Notepad++的格式轉(zhuǎn)換中的“轉(zhuǎn)換為utf-8碼(無BOM)”等都可以完成這個工作。
無論如何,這總算解開了我心中的一個小疑團,所以,即使軟件自帶的文檔,往往也不是絕對的權(quán)威(叫我還能相信誰:-( ,在svn 1.4.2版本中帶的文檔,還是針對1.3的)。不過Subversion Book網(wǎng)站上提供的針對svn 1.4的nightly版本已經(jīng)很明確的講解了這一部分的內(nèi)容了。