星期一, 12月 11, 2006

Subversion 筆記 (一)



Version Control 軟體在軟體開發階段佔有很重要的地位,即使自己一個人開發,我都覺得 Version Control 軟體還是應該要搭配使用。以前最有名的 Version Control 軟體應該是 CVS,而現在 Subversion 慢慢的取代 CVS,成為 open source 開發最常見的 Version Control 軟體了。


我之前在我的另外一個部落格有寫過一篇「Subversion 安裝筆記 - Fedora」,裡面大概有提到怎麼在 Fedora 下安裝一個最基本的 Subversion Server,不過那樣的系統是非常陽春的,比較適合單一個人使用。因為我之前並沒有把 Authentication 的機制放進去,所以只要知道放置的 repository 的人都可以 check out、瀏覽甚至於修改 repository 裡面的 source code。

所以這邊還是從安裝開始好了:

1. 安裝 subversion


shell>yum install subversion


2. 安裝 mod_dav_svn


shell>yum install mod_dav_svn


3. 新增 svn repository (底下的例子是把 svn repository 設定在 /usr/local/svn )


shell>svnadmin create /usr/local/svn


4. 更改 svn repository 目錄權限


shell>chown -R apache.apache /usr/local/svn


5. 修改 /etc/httpd/conf/httpd.conf


shell>vim /etc/httpd/conf/httpd.conf


加入 LoadModule dav_svn_module modules/mod_dav_svn.so 到 http.conf




加入 Location


<>
DAV svn
SVNPath /usr/local/svn
# AuthType Basic
# AuthName "Audiopie Subversion repository"
# AuthUserFile /etc/svn/passwd
# Require valid-user
< /location >


這時候如果使用瀏覽器去看 http://domain_name/svn/ 會看到底下的畫面:



系統也不會有任何的認證機制,而且這時候如果要加入檔案,每個人也都可以任意的加入或修改。若要加入認證的機制,最簡單的方式就是使用 apache 的認證方式。先使用 htpasswd 工具來建立帳號:


shell> htpasswd -cm /etc/svn/passwd jacky
New password: *****
Re-type new password: *****
Adding password for user jacky

shell> htpasswd -m /etc/svn/passwd liu
New password: *****
Re-type new password: *****
Adding password for user liu


第一次使用 httpasswd 的時候需要多 -c 參數,-m 則是使用 md5 方式來加密檔案。上面的例子我是把密碼檔案放在 /etc/svn/passwd 下面,這個可以依據需求換到其他地方。

接著修改 httpd.conf 檔案,

<>
DAV svn
SVNPath /usr/local/svn
AuthType Basic
AuthName "Audiopie Subversion repository"
AuthUserFile /etc/svn/passwd
Require valid-user
< /location >


這時候如果要 access http://domain_name/svn/ 就會跳出一個 pop-up 視窗讓你輸入帳號密碼,得要合法的使用者才能夠 access svn 了。

除了 authentication 之外,上述的 location 設定只是比較適合單一 Repostory 情況。若有多個 Repository,可以使用 SVNParentPath 指定 parent path,例如:


<>
DAV svn
SVNParentPath /usr/local/svn
AuthType Basic
AuthName "Audiopie Subversion repository"
AuthUserFile /etc/svn/passwd
Require valid-user
< /location >


那就是指定 /usr/local/svn 為 parent path,而 repository 則是可以建立在 /usr/local/svn/ 底下,例如:


shell> svnadmin create /usr/local/svn/TestProject1

shell> svnadmin create /usr/local/svn/TestProject2


這時候就可以分別透過 http://domain_name/svn/TestProject1 跟 http://domain_name/svn/TestProject2, access 到 TestProject1 跟 TestProject2 project。

除此之外,如果還有更複雜的個別帳號權限設定,可以參考 SVN 官方使用手冊

沒有留言: