要經過 HTTP 協議訪問 Subversion 文件倉庫,須要安裝並配置好 Web 服務器。Apache2 被證明能夠很好的與 Subversion 一塊兒工做。關於 Apache2 的安裝超出了本文的範圍(假設已經安裝好Apache2) ,儘管如此,本文仍是會涉及如何配置 Apache2 使用 Subversion。 相似的,要經過 HTTPS 協議訪問 Subversion 文件倉庫,您須要在您的 Apache2 中安裝並配置好數字證書,這也不在本文的討論範圍之中。web
幸運的,Subversion 已經包含在 main 倉庫中。因此,要安裝 Subversion,您只須要簡單的運行:apache
$ sudo apt-get install subversion $ sudo apt-get install libapache2-svn
經過上面的命令已經安裝了所需的軟件包。接下來將闡述如何建立 Subversion 倉庫以及如何設置項目的訪問權限。服務器
許多位置均可以放置 Subversion 倉庫,其中兩個最經常使用的是:/usr/local/svn 以及 /home/svn。咱們選擇把 Subversion 倉庫放在 /home/svn/repos,而且假設咱們須要創建兩個倉庫 project1 和 project2。網絡
一般的狀況下,首先建立一個名爲 「Subversion」 的用戶組,該組是 Subversion 倉庫所在的目錄的擁有者。ssh
使用以下命令增長組,而且把用戶加到組裏:svn
$ sudo addgroup subversion $ sudo usermod -G subversion -a www-data
www-data 是專門爲 web server 運行而建立的用戶,系統中已經預先建立好了。ui
查看上面兩個命令的執行結果:加密
$ cat /etc/group | grep subversion subversion:x:1001:www-data
執行以下命令建立倉庫目錄:版本控制
$ sudo mkdir -p /home/svn/repos/project1 $ sudo mkdir -p /home/svn/repos/project2
下面命令用於建立 Subversion 倉庫:rest
$ sudo svnadmin create /home/svn/repos/project1 $ sudo svnadmin create /home/svn/repos/project2
設置倉庫的用戶和組:
$ sudo chown -R www-data:subversion /home/svn/repos/project1 $ sudo chown -R www-data:subversion /home/svn/repos/project2
Subversion 倉庫能夠經過多種不一樣的方式進行訪問——經過本地硬盤,或者經過各類網絡協議。不管如何,文件倉庫的位置老是使用 URL 來表示。
下面是幾種不一樣的 URL 模式及其對應的訪問方法:
WebDAV (Web-based Distributed Authoring and Versioning) 一種基於 HTTP 1.1協議的通訊協議.它擴展了HTTP 1.1,在GET、POST、HEAD等幾個HTTP標準方法之外添加了一些新的方法,使應用程序可直接對Web Server直接讀寫,並支持寫文件鎖定(Locking)及解鎖(Unlock),還能夠支持文件的版本控制。
要經過 WebDAV 協議訪問 SVN 文件倉庫,首先必須配置 Apache 2 Web 服務器。加入下面的代碼片斷到 /etc/apache2/mods-available/dav_svn.conf 文件中:
<Location /svn> DAV svn # Alternatively, use SVNParentPath if you have multiple repositories # under a single directory SVNParentPath /home/svn/repos AuthType Basic AuthName "Subversion repository" # 指定基本用戶驗證的密碼文件路徑 AuthUserFile /etc/subversion/dav_svn.passwd # 指定文件倉庫訪問的受權配置文件路徑 <IfModule mod_authz_svn.c> AuthzSVNAccessFile /etc/subversion/dav_svn.authz </IfModule> #<LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user #</LimitExcept> </Location>
重啓 Apache2 Web 服務器
$ sudo service apache2 restart
$ sudo htpasswd -c /etc/subversion/dav_svn.passwd user_name
它會提示你輸入密碼,當您輸入了密碼,該用戶就創建了。「-c」 選項表示建立新的 /etc/subversion/dav_svn.passwd 文件,因此 user_name 所指的用戶將是文件中惟一的用戶。若是要添加其餘用戶,則去掉「-c」選項便可:
$ sudo htpasswd /etc/subversion/dav_svn.passwd other_user_name
首先須要加載mod_authz_svn.so 在目錄 /etc/apache2/mods-enabled 下建立軟連接到 ../mods-available/authz_svn.load
$ cd /etc/apache2/mods-enabled $ sudo ln -s ../mods-available/authz_svn.load
../mods-available/authz_svn.load文件的內容爲:
LoadModule authz_svn_module /usr/lib/apache2/modules/mod_authz_svn.so
這裏我指定了三個組: design 組 和 test 組,design 組讀寫權限,test組只有讀的權限。另外,設置一個管理員帳號 admin,管理員對全部項目有讀寫權限。
受權文件 /etc/subversion/dav_svn.authz 的內容以下:
[groups] design=user1,user2,user3 test=user4,user5 [project1:/] admin=rw @design=rw @test=r [project2:/] admin=rw @design=rw @tester=r
若是在Check in的時候遇到以下錯誤:
Can’t open ‘/home/svn/myproject/db/txn-current-lock’: Permission denied
這是由於文件所屬的用戶和組不對形成的問題,能夠從新對整個項目目錄設置用戶和組:
$ sudo chown -R www-data:subversion /home/svn/repos/project1
若是你不想將項目目錄的擁有者設置成 www-data 的話,好比你可能想設置爲 root:
$ sudo chown -R root:subversion /home/svn/repos/project1
必須將 root 加入 subversion 組:
$ sudo usermod -G subversion -a root
還要設置組的屬性:
$ sudo chmod -R g+rws /home/svn/repos/project1
而後查看 txn-current-lock 文件的權限和用戶以及組信息,應該相似於:
$ ls -l /home/svn/myproject/db/txn-current-lock -rw-rwSr-- 1 root subversion 0 2009-06-18 15:33 txn-current-lock
至此,Subversion 服務器的配置已經完成了,藉助 SVN 客戶端軟件就能夠經過 http:// 的方式訪問到上面配置的兩個文件倉庫了。