天天看點

Ubuntu Server安裝SubVersion

簡介

如果您對 Subversion 還比較陌生,本節将給您一個關于 Subversion 的簡要介紹。

Subversion 是一款開放源代碼的版本控制系統。使用 Subversion,您可以重新加載源代碼和文檔的曆史版本。Subversion 管理了源代碼在各個時期的版本。一個檔案樹被集中放置在檔案倉庫中。這個檔案倉庫很像是一個傳統的檔案伺服器,隻不過它能夠記住檔案和目錄的每一次變化。

假設

首先我們假設您能夠在 Ubuntu 中操作 Linux 的指令、編輯檔案、啟動和停止服務。當然,我們還認為您的 Ubuntu 正在運作中,您可以使用 sudo 操作并且您打算使用 Subversion。

我們假設您可能需要使用所有可能的方法通路 SVN 檔案倉庫。同時我們也認為您應該已經配置好了您的 /etc/apt/sources.list 檔案。

本文涉及的範圍

要通過 HTTP 協定通路 SVN 檔案倉庫,您需要安裝并配置好 Web 伺服器。Apache 2 被證明可以很好的與 SVN 一起工作。關于 Apache 2 的安裝超出了本文的範圍,盡管如此,本文還是會涉及如何配置 Apache 2 使用 SVN。

類似的,要通過 HTTPS 協定通路 SVN 檔案倉庫,您需要在您的 Apache 2 中安裝并配置好數字證書,這也不在本文的讨論範圍之中。

安裝

幸運的,Subversion 已經包含在 main 倉庫中。是以,要安裝 Subversion,您隻需要簡單的運作:

$ sudo apt-get install subversion
$ sudo apt-get install libapache2-svn
      

如果系統報告了依賴關系的錯誤,請找出相應的軟體包并安裝它們。如果存在其它問題,也請自行解決。如果您是再不能解決這些問題,可以考慮通過 Ubuntu 的網站、Wiki、論壇或郵件清單尋求支援。

伺服器配置

您應該已經安裝了上述的軟體包。本節将闡述如何建立 SVN 檔案倉庫以及如何設定項目的通路權限。

建立 SVN 倉庫

許多位置都可以放置 Subversion 檔案倉庫,其中兩個最常用的是:/usr/local/svn 以及 /home/svn。為了在下面的描述中簡單明了,我們假設您的 Subversion 檔案倉庫放在 /home/svn,并且你的項目名稱是簡單的“myproject”。

同樣的,也有許多常用的方式設定檔案倉庫的通路權限。然而,這也是安裝過程中最經常出現錯誤的地方,是以我們會對此進行一個詳細說明。典型的情況下,您應該建立一個名為“Subversion”的組來擁有檔案倉庫所在的目錄。下面是一個快速的操作說明,有關内容請參考相關文檔的詳細說明:

  • 在 Ubuntu 菜單上選擇“系統->系統管理->使用者群組”;
  • 切換到“組”标簽;
  • 點選“添加組”按鈕;
  • 組名為“subversion”;
  • 将您自己和“www-data”(Apache 使用者)加入組成員中;
  • 點選“OK”以确認修改,關閉該程式。

或者使用指令完成上述功能(增加組,并且把使用者加到組裡):

sudo addgroup subversion
sudo usermod -G subversion -a www-data
      

再或者直接使用指令編輯組檔案"sudo vi /etc/group",增加組和成員(不推薦):

$ sudo vi /etc/group
      

結果看上去,像這樣。

$ cat /etc/group|grep subversion
subversion:x:1001:www-data,exp
      

您需要登出然後再登入以便您能夠成為 subversion 組的一員,然後就可以執行簽入檔案(Check in,也稱送出檔案)的操作了。

現在執行下面的指令

$ sudo mkdir /home/svn
$ cd /home/svn
$ sudo mkdir myproject
$ sudo chown -R root:subversion myproject
      

下面的指令用于建立 SVN 檔案倉庫:

$ sudo svnadmin create /home/svn/myproject
      

賦予組成員對所有新加入檔案倉庫的檔案擁有相應的權限:

$ sudo chmod -R g+rws myproject      

如果上面這個指令在建立SVN檔案倉庫之前運作,你可能在後續Check in的時候遇到如下錯誤:

Can't open '/home/svn/myproject/db/txn-current-lock': Permission denied
      

檢視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
      

除了權限以外,使用者及其組如果不對,則仍然會遇到上述問題,可以再次運作指令:

$ sudo chown -R root:subversion myproject
      

通路方式

Subversion 檔案倉庫可以通過許多不同的方式進行通路(Check Out,簽出)——通過本地硬碟,或者通過各種網絡協定。無論如何,檔案倉庫的位置總是使用 URL 來表示。下表顯示了不同的 URL 模式對應的通路方法:

模式 通路方法
file:/// 直接通路本地硬碟上檔案倉庫
http:// 通過 WebDAV 協定通路支援 Subversion 的 Apache 2 Web 伺服器
https:// 類似 http://,支援 SSL 加密
svn:// 通過自帶協定通路 svnserve 伺服器
svn+ssh:// 類似 svn://,支援通過 SSH 通道

本節中,我們将看到如何配置 SVN 以使之能夠通過所有的方法得以通路。當然這裡我們之讨論基本的方法。要了解更進階的用途,我們推薦您閱讀《使用 Subversion 進行版本控制》線上電子書。

直接通路檔案倉庫(file://)

這是所有通路方式中最簡單的。它不需要事先運作任何 SVN 服務。這種通路方式用于通路本地的 SVN 檔案倉庫。文法是:

$ svn co file:///home/svn/myproject
或者
$ svn co file://localhost/home/svn/myproject
      

注意:如果您并不确定主機的名稱,您必須使用三個斜杠(///),而如果您指定了主機的名稱,則您必須使用兩個斜杠(//).

對檔案倉庫的通路權限基于檔案系統的權限。如果該使用者具有讀/寫權限,那麼他/她就可以簽出/送出修改。如果您像前面我們說描述的那樣設定了相應的組,您可以簡單的将一個使用者添加到“subversion”組中以使其具有簽出和送出的權限。

通過 WebDAV 協定通路(http://)

要通過 WebDAV 協定通路 SVN 檔案倉庫,您必須配置您的 Apache 2 Web 伺服器。您必須加入下面的代碼片段到您的 /etc/apache2/mods-available/dav_svn.conf中:

<Location /svn/myproject>
DAV svn
SVNPath /home/svn/myproject
AuthType Basic
AuthName "myproject subversion repository"
AuthUserFile /etc/subversion/passwd
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
</Location>
      

如果需要使用者每次登入時都進行使用者密碼驗證,請将<LimitExcept GET PROPFIND OPTIONS REPORT>與</LimitExcept>兩行注釋掉。

當您添加了上面的内容,您必須重新起動 Apache 2 Web 伺服器,請輸入下面的指令:

sudo /etc/init.d/apache2 restart
      

接下來,您需要建立 /etc/subversion/passwd 檔案,該檔案包含了使用者授權的詳細資訊。要添加使用者,您可以執行下面的指令:

sudo htpasswd -c /etc/subversion/passwd user_name
      

它會提示您輸入密碼,當您輸入了密碼,該使用者就建立了。“-c”選項表示建立新的/etc/subversion/passwd檔案,是以user_name所指的使用者将是檔案中唯一的使用者。如果要添加其他使用者,則去掉“-c”選項即可:

sudo htpasswd /etc/subversion/passwd other_user_name
      

您可以通過下面的指令來通路檔案倉庫:

$ svn co http://hostname/svn/myproject myproject --username user_name
      

它會提示您輸入密碼。您必須輸入您使用 htpasswd 設定的密碼。當通過驗證,項目的檔案就被簽出了。

警告:密碼是通過純文字傳輸的。如果您擔心密碼洩漏的問題,我們建議您使用 SSL 加密,有關詳情請看Ubuntu SubVersion Wiki。