環境
CentOS: 8, Subversion: 1.10.2
問題
首先通過svnadmin create myproject命令創建倉庫,然後在配置好passwd(用戶名、密碼),authz,svnserve.conf後,通過SVN客服端訪問,發現老是報認證失敗(但用戶名和密碼是對的,如果用戶名和密碼不對,在SVN客戶端則會反覆的彈出登錄對話框)。配置如下:
[root@srv1]# ls branches conf db format hooks locks README.txt tags trunk |
[groups]
[/trunk] [/branches] |
在項目路徑還創建了trunk, branches, tags目錄,準備做主幹、分支,但通過http://[ip]/myproject/trunk訪問,總是認證失敗。
解決
經過多次的重試,發現了幾個問題:
1、在項目路徑建立的trunk,branches,tags目錄無效,SVN已不是使用直接的目錄映射關係,也就是說項目路徑和磁盤物理文件路徑並不存在直接的對應關係。實際上,SVN 的提交數據存儲在/[倉庫路徑]/db/revs目錄下。
2、在還未引入前,authz中的[/trunk] 和[/branches]授權配置是無效的,因爲/trunk和/branches這時還沒有(自建目錄無效),只有[/]授權配置纔是有效的,可讓SVN客戶端可以訪問根目錄。
下面是正確的配置:
[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
develop = user1,user2,user3
release = user4,user5
[/]
@develop = r
@release = r
[/trunk]
@develop = rw
#*=
[/branches]
@develop = r
@release = rw
附:
此外,還發現一個如何避免/trunk目錄被刪的配置方式:
[/]只讀,那麼引入的/trunk(注意不是在SVN服務器上創建文件夾,如前所述)一級目錄則不可刪除。
先給用戶賦予寫的權限,寫入後,然後再把所有用戶的寫權限去掉,也就是寫入前:
[/] @develop = r @release = rw |
寫入後:
[/] @develop = r @release = r |
修改後要通過命令:svnserve -d -r /home/svn/datadir 命令啓動。
這裏,/home/svn/datadir爲所建的SVN倉庫路徑。