剛接觸SVN的時候,因為對它不瞭解,又在Windows下面,被它的多版本庫配置問題困擾很久,一直找不到完美解決方案,今天無意中在Linux下配置SVN時,發現它本身是支援的,通過配置--config-file參數指定全域的設定檔實現。寫下此文來糾正以前錯誤的配置方式(主要是Windows系統下),分享給大家。
Linux和Windows下處理基本上一樣的,先來看Linux下的svnserve的協助資訊:
[root@localhost ~]# svnserve --helpusage: svnserve [-d | -i | -t | -X] [options]Valid options: -d [--daemon] : daemon mode -i [--inetd] : inetd mode -t [--tunnel] : tunnel mode -X [--listen-once] : listen-once mode (useful for debugging) -r [--root] ARG : root of directory to serve -R [--read-only] : force read only, overriding repository config file --config-file ARG : read configuration from file ARG --listen-port ARG : listen port [mode: daemon, listen-once] --listen-host ARG : listen hostname or IP address [mode: daemon, listen-once] -T [--threads] : use threads instead of fork [mode: daemon] --foreground : run in foreground (useful for debugging) [mode: daemon] --log-file ARG : svnserve log file --pid-file ARG : write server process ID to file ARG [mode: daemon, listen-once] --tunnel-user ARG : tunnel username (default is current uid's name) [mode: tunnel] -h [--help] : display this help --version : show program version information
通常啟動SVN服務,僅指定SVN版本庫的根目錄,如下:
svnserve -d -r /data/svn
然後在/data/svn下建立多個版本庫:
cd /data/svnsvnadmin create repos1svnadmin create repos2
再依次配置repos1和repos2等版本庫下的conf/svnserve.conf、conf/passwd、conf/authz檔案。
問題便來了,因為大多數的時候,同一個使用者需要用相同的帳號和密碼去訪問不同的版本庫,這時的許可權配置就不好處理了,以前看其他人的解決方案是在svnserve.conf中指定passwd和authz的路徑時用相對路徑指到同一個檔案。這是一個可行的方法,但新增版本庫的時候,就得更改svnserve.conf檔案,不方便。
仔細看svnserve的協助資訊,大家都會發現有一個--config-file參數,這個參數就是用來指定svnserve.conf路徑的,說到這,問題已經明了,只要在啟動SVN服務的時候,指定--config-file參數,只要指定了此參數,所有的許可權都由參數指定的svnserve.conf控制,而每個版本庫conf目錄下的svnserve.conf的配置都會忽略掉,具體啟動參數如下:
svnserve -d -r /data/svn --config-file /data/svn/svnserve.conf
如果安裝的是rpm包,會自動安裝svn服務,只需配置/etc/sysconfig/svnserve檔案:
#vim /etc/sysconfig/svnserveOPTIONS="-r /data/svn --config-file /data/svn/svnserve.conf"
Windows下使用的是CollabNet的Subversion Server,它安裝的服務,指定的ImagePath形式為:"d:\Program Files (x86)\CollabNet\Subversion Server\svnserve.exe" --service -r "e:\svn_repository" --listen-port "3690" ,是沒有指定--config-file參數的,因此導致我等剛接觸SVN的新手會被多版本庫的配置問題糾結,現在只要到註冊表更改一下SVN所在服務的ImagePath參數,追加上--config-file參數:
"d:\Program Files (x86)\CollabNet\Subversion Server\svnserve.exe" --service -r "e:\svn_repository" --listen-port "3690" --config-file "e:\svn_repository\conf\svnserve.conf"
以上中使用的路徑等,請自行轉換成各自對應的路徑。