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



但謹(jǐn)守其自帶文檔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”).
一般還是不會(huì)多去研究,只當(dāng)作是結(jié)合Apache來進(jìn)行面向目錄的權(quán)限控制文件示例。
其實(shí),心里一直對(duì)這種方式有個(gè)小疙瘩,最近又要開一個(gè)新項(xiàng)目的代碼庫,雖然實(shí)際上對(duì)代碼的訪問控制也沒有特別的要求,但心想既然authz文件里有關(guān)于目錄的設(shè)置,是不是能嘗試一下,用svnserve也能進(jìn)行目錄權(quán)限的控制呢。于是到網(wǎng)上搜了一下,omg,這個(gè)功能竟然早在1.3的時(shí)候就已經(jīng)實(shí)現(xiàn)了,對(duì)其詳盡而完整的描述來自Michael的這篇Subversion之路--實(shí)現(xiàn)精細(xì)的目錄訪問權(quán)限控制?,其中的幾個(gè)要點(diǎn)包括:
??? 1. svnserve支持面向目錄的訪問控制了;
??? 2. 權(quán)限具備繼承性,所以需要用"* = "的形式來禁止未授權(quán)的用戶訪問特定子目錄;
??? 3. svn 1.3.2及以后的版本允許對(duì)子目錄進(jìn)行操作而無需父目錄的讀權(quán)限;
??? 4. 如果是中文目錄的話,authz必須以u(píng)tf-8的格式保存,且不能帶BOM,而windows自帶的記事本按utf-8保存的文件則會(huì)加上BOM,所以,如果你以u(píng)tf-8格式保存好后,提交代碼時(shí),svn報(bào)"section header expected"的錯(cuò)時(shí),則多半是帶BOM的。當(dāng)然現(xiàn)在很多編輯器都能很方便的轉(zhuǎn)換了,如ultraedit的保存為U8-DOS,editplus保存為utf-8,以及開源的Notepad++的格式轉(zhuǎn)換中的“轉(zhuǎn)換為utf-8碼(無BOM)”等都可以完成這個(gè)工作。
無論如何,這總算解開了我心中的一個(gè)小疑團(tuán),所以,即使軟件自帶的文檔,往往也不是絕對(duì)的權(quán)威(叫我還能相信誰:-( ,在svn 1.4.2版本中帶的文檔,還是針對(duì)1.3的)。不過Subversion Book網(wǎng)站上提供的針對(duì)svn 1.4的nightly版本已經(jīng)很明確的講解了這一部分的內(nèi)容了。