Ubuntu下搭建SVN環境-Apache


環境描述:ubuntu server 12.04  / svn1.6  / apache2

1、先創建svn組和用戶:

addgroud svn

useradd svn -g svn -m  //新增svn用戶名,-g並制定它所在的組svn,-m同時創建svn用戶所在的home目錄

passwd svn  //設置svn用戶的密碼

2、安裝apache2和svn server

sudo apt-get install apache2

sudo apt-get install subversion

sudo apt-get install libapache2-svn

完成以上安裝,可以直接訪問apache的主頁,如http://localhost/    

3、創建svn版本庫

sudo mkdir /var/svn

sudo svnadmin create /var/svn/repos

此時可以在/var/svn/repos目錄下看到svn版本庫的所有文件夾以及配置文件,如:conf、db、format、hooks、locks、README.txt

4、配置並導入項目

sudo mkdir /opt/idbtest

sudo mkdir /opt/idbtest/branches

sudo mkdir /opt/idbtest/tags

sudo mkdir /opt/idbtest/trunk

導入項目到版本庫:svn import /opt/idbtest file:///var/svn/repos/idbtest -m "initial import"  //  /opt/idbtest表示需要引入的項目,file:///var/svn/repos/idbtest表示svn的版本庫,此處是做初始化引入

5、將svn配置到apache中通過http web方式訪問

sudo  vi /etc/apache2/apache.conf,將如下文件粘帖到apache.conf尾部,如下:

 <Location /svn>
    DAV svn
    SVNPath /var/svn/repos
    AuthzSVNAccessFile /var/svn/repos/conf/authz
    AuthType Basic
    AuthName "Subversion Repository"
    AuthUserFile /var/svn/repos/conf/passwd
    Require valid-user
</Location> 

 備注:此配置文件是告訴apache關於svn的訪問路徑已經相關配置文件,這里注意放問的跟目錄。重啟apache服務器,然后就可以通過http://localhost/svn進行遠程訪問

重啟apache服務器:/etc/init.d/apache2 restart

當然這里需要驗證訪問登錄用戶,接下來將介紹添加svn用戶

6、添加svn用戶

htpasswd -c /var/svn/repos/conf/passwd test1  //然后會提示你輸入密碼,當然第一次創建svn用戶,需要通過參數-c,然后第二次創建svn用戶就不需要,這里要注意。

htpasswd /var/svn/repos/conf/passwd test2  //創建第二個svn用戶

然后就可以通過這些用戶訪問http://localhost/svn了,並可以在其他pc上對svn進行checkout,命令行如下:

svn checkout http://localhost/svn --username test1 --password 123456

當然還可以通過svn客戶端工具checkout更方便

7、遇到的問題

當我checkout到我的客戶端時,在執行commit提交操作時,svn客戶端報:svn: Can't open file '/var/svn/repos/testdemo/db/txn-current-lock': Permission denied

出現如上的錯誤時,此時就需要檢查版本庫的訪問權限了,可能是版本庫沒有寫的權限,且當前版本庫的組和訪問權限均是root,我們需要將版本庫的組權限更改為svn組權限,如下名:

sudo chown -R svn:svn /var/svn/repos

sudo chmod 777 -R  repos/*

再次進行commit提交,發現一切正常

8、用戶權限控制

需要在apache的配置文件中增加如下配置,才能使得apache能夠獲取svn的權限配置,如下:

LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

svn的權限控制是通過目錄結構來控制,控制權限在/var/svn/repos/conf/authz文件中,示例配置如下:

我的版本庫下引入了目錄testdemo,testdemo下有三個branches、tags、trunk,其中trunk下有app、doc、testdoc、devdoc

編輯 vi /var/svn/repos/conf/authz

[groups]

Admin=admin

Develop=dev1、dev2

Tester=test1,test2

[/]  //表示版本庫的根目錄,admin擁有所有的讀寫權限

@admin=rw

[/testdemo/trunk]  //表示版本庫的根目錄下的trunk文件下,表示develop擁有該文件夾下的讀寫權限

@develop=rw

[/testdemo/trunk/testdoc]  //表示版本庫的根目錄下的trunk文件下,表示Tester擁有該文件夾下的讀寫權限,便是develop擁有可讀權限

@tester=rw

@develop=r

以上的權限配置比較靈活,自己定義覺得,然后對於每一個角色控制其訪問權限

 

附:為了更好的控制版本庫做好配置管理,發現svn還是比較適合,所以就着手搭建了一個svn server。

 

 

 


免責聲明!

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



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