Ubuntu上Subversion的安裝和配置


環境:Ubuntu10.10

目的:可本地或通過Web訪問Subversion。

SVN最常見的配置模式便是與Apache集成,這樣SVN可以采用WebDev協議方式提供服務。主要的好處有:通過Apache以HTTP方式穿透防火牆,便於在互聯網環境使用;提供目錄的版本控制;純2進制的文件對比方式等。

 

1. 安裝Subversion

apt-get install subversion
apt-get install subversion-tools

 

2. 安裝Apache

apt-get install apache2
apt-get install libapache2-svn

 

3. Apache和Subversion的集成

查看/etc/apache2/mods-enabled/dav_svn.load文件,有mod_dav_svn.so和mod_authz_svn.so這兩個動態庫說明apache已經加載了Subversion的訪問控制模塊。如果沒有,手動添加。

編輯/etc/apache2/mods-enabled/dav_svn.conf文件,在最后加入下述內容:

<Location /svn>
DAV svn
SVNParentPath /home/svn
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /home/svn/passwd.conf
AuthzSVNAccessFile /home/svn/authz.conf
Require valid-user
</Location>

命令touch /home/svn/passwd.conf和touch /home/svn/authz.conf來創建這2個不存在的文件。

<Location /svn>  意思是Subversion版本可用的URL是http://SubversionServerIP/svn

DAV SVN  告訴Apache是哪個模塊響應哪個URL的請求,在這里是Subversion模塊

SVNParentPath /home/svn  告訴Subversion需要查看的版本庫在/home/svn之下。如果不希望為每個單獨的項目都進行單獨的設置,可以把所有項目都存放在統一的資源庫目錄,使用SVNParentPath指令來指定存放所有項目的路徑。否則使用SVNPath

SVNPath  單版本庫時使用此項指明版本庫的路徑,但在多版本庫中不要使用此項

AuthType Basic  認證類型為基本認證,就是用戶名和密碼

AuthName "Subversion repository"  認證名稱,將在瀏覽器界面彈出一個對話框,標題為Subversion repository

AuthUserFile /home/svn/passwd.conf  指定使用的認證密碼文件,即訪問版本庫用戶的文件,用apache的htpasswd命令生成

AuthzSVNAccessFile /home/svn/authz.conf  設定訪問版本庫權限的文件

Require valid-user  要求驗證用戶,即不能匿名訪問。如果沒有該語句,則只能第一個用戶可以訪問新建庫

此外,SVNIndexXSLT “/svnindex.xsl”  使用它可以在用瀏覽器時更好看

 

4. 在添加了上述內容后,必須重啟Apache2 HTTP服務器

/etc/init.d/apache2 restart

 

5. Subversion建立版本庫

mkdir /home/svn
mkdir /home/svn/repos
svnadmin create --fs-type fsfs /home/svn/repos

運行創建版本庫的命令,指定數據存儲為 FSFS,如果要指定為 Berkeley DB,則將 fsfs 替換為 bdb。

如果一切正常,命令執行后沒有任何反饋信息而迅速返回。一個新的版本庫就被創建出來。我們可以查看下版本庫里有什么。

其中,conf 目錄下存放了版本庫的配置文件,包括用戶訪問控制和權限控制等內容;dav 目錄是提供給 Apache 相關模塊的目錄,目前為空;db 目錄下存放着 Subversion 所要管理的所有受版本控制的數據,不同的存儲方式(Berkeley DB 或者 FSFS)下有着不同的目錄結構,不過我們一般不用直接修改和查看這個目錄下的內容,Subversion 的命令可以安全的操作這個目錄;另外,hooks 目錄存放着鈎子腳本及其模版(一種版本庫事件觸發程序),locks 目錄存放着 Subversion 版本庫鎖定數據,用來追蹤存取文件庫的客戶端;format 文件是一個文本文件,里面只放了一個整數,表示當前文件庫配置的版本號。

注意:庫與庫之間不能包含。

我們可以測試下Subversion能不能檢出。

 

6. Subversion添加項目

管理員必須考慮的問題是,將每一個項目分別放在不同的版本庫里面,還是將它們放在統一的版本庫里面。統一的版本庫可以讓管理員更加容易的升級和備份,不過,由於訪問權限控制是針對整個版本庫的,所以,統一的版本庫也為不同項目配置不同的訪問權限帶來了麻煩。所以,管理員應該根據實際情況權衡考慮。
我以統一的版本庫為例,添加三個項目business,develop和project。首先在一個臨時目錄下,根據 Subversion 版本控制的一般布局結構,創建出三個項目的主要目錄樹,如下:

然后用 svn import 命令導入已有的目錄樹。

svn import /home/svn/tmp/ file:///home/svn/repos/ --message "init"

可以用 svn list 確認導入的項目是否正確:

svn list --verbose file:///home/svn/repos/

如果要查看最新修訂版本的信息,可以使用 svnlook info 命令:

svnlook info /home/svn/repos/

還可以在命令后面接上 “--revision 版本號” 來指定某一個修訂版的顯示。

還可以用如下命令來顯示版本庫的具體樹形結構,后面的 “--show-ids” 選項指定顯示每一個顯示元素的修改版本 ID。

svnlook tree /home/svn/repos/ --show-ids

 

7. Subversion添加用戶

添加第一個用戶,要加參數-c。以后不用加。

htpasswd -c /home/svn/passwd.conf user1

Subversion追加用戶:

htpasswd /home/svn/passwd.conf user2

passwd.conf文件的生成內容是用戶名加上密碼的 MD5 密文。

 

8. Subversion分配用戶權限

新添加的用戶是不能訪問Subversion的,還要為他分配權限。編輯/home/svn/authz.conf文件,例:

[groups]
vip = wang
admin = wangqixuan, yang
develop-manager = zhong
business-manager = shi
developer = ma, hu, zhou, cen, huang

[repos:/]
@admin = rw
* = r

[repos:/develop/01-Windows項目組/01-ARM架構]
@vip =rw
@admin = rw
@develop-manager = rw
* =
[repos:/develop/01-Windows項目組/02-X86架構]
@vip =rw
@admin = rw
@develop-manager = rw
zhou = rw
hu =rw
ma = r
* =
[repos:/develop/02-Linux項目組/01-ARM架構] @vip =rw @admin = rw @develop-manager = rw cen = r huang = r * = [repos:/develop/02-Linux項目組/02-X86架構] @vip =rw @admin = rw @develop-manager = rw cen = r huang = r * = [repos:/develop/個人目錄] @vip =rw @admin = rw @develop-manager = rw @developer = rw * =

其中* = 表示其它所有用戶都沒有任何權限。@表示用戶組,*表示所有用戶,[/]表示全部目錄。注意頂格寫。UTF-8格式才能配置SVN權限,Linux下默認是UTF-8,Windows下有轉換工具,比如Eclipse->Edit->最后一項。一般針對最末梢文件設置權限。

特別注意:權限分配時,不能寫成cen, huang =r,這樣提交時會出現錯誤:svn Commit failed checkout of 403 forbidden。應該寫成cen = r和huang = r

 

9. Subversion啟動

svnserve -d -r /home/svn

Subversion 設計了一個抽象的網絡層,版本庫建立完畢之后,可以通過各種服務器向外公布。svnserve 是 Subversion 自帶的一個小型的服務器,它使用獨立的協議與客戶端。–i 作為 inetd 啟動。-d參數表示svnserve將會作為一個服務程序運行在后台。-r參數表示將/home/svn指定為代碼庫的根目錄。這樣,當客戶端使用類似svn://192.168.0.1/repos這樣的URL訪問服務器的時候,其所訪問的真實庫是/home/svn/repos。另外如 --listen-port,--listen-host 可以指定綁定的地址和端口,-R 可以強制設定為 Read-Only 模式。

下面命令可檢查是否成功啟動:

ps -ef | grep svn

 

10. SVN客戶端的安裝及簡單使用

TortoiseSVN下載地址:http://tortoisesvn.net/downloads.html

在Win7上新建文件夾作為本地副本的存儲目錄,單擊右鍵,選擇TortoiseSVN->Repo-browser,在彈出框URL中添加Subversion的訪問地址http://ServerIP/svn/repos

Check Out取出服務器上的版本庫到本地。

詳細使用見http://cdnetworks-kr-2.dl.sourceforge.net/project/tortoisesvn/1.7.7/Documentation/TortoiseSVN-1.7.7-zh_CN.pdf

 

chown -R www-data:www-data /home/svn/repos
可解決在客戶端提交時出現subversion can't open file “xxx”Permission denied的問題

注:為了以后備份方便,可將passwd.conf和authz.conf兩個文件放在repos/conf下,相應地也改動Apache2配置文件里<Location>字塊所指路徑,重啟Apache2。

 

 

【參考資料】

用 Apache 和 Subversion 搭建安全的版本控制環境 https://www.ibm.com/developerworks/cn/java/j-lo-apache-subversion/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM