環境描述: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。