首先,這樣的文章很容易找,例如 Ubuntu Help。不過我試了試會出點小問題,底下是我自己的小心得
一、照 Ubuntu Help 教的,先安裝套件:
sudo apt-get install subversion libapache2-svn
二、先決定自己的 repository 的佈置邏輯,以我為例,我是打算放在 /home/svn/PROJ 下,每個 PROJ 有一個 Repository, 也有得人懶得管理那麼複雜,所有 Projects 都放同一個 repository....決定好之後進行第三步,但是這邊舉例的兩種邏輯其實管理起來差異很大,我再補充補充:
1. 前一種在設定上比較麻煩,但是每個 Project 的 revision number(就是俗稱的版本號碼)是分開各自計算,好處就是可以對每個 Project 做版本控管,也可以做存取權限的控管,也就是可以分別控制誰可以存取
2. 後一種在設定上非常簡單,設過一次就不必再管理,但是將來的 Project 其實是在同一個repository 之下,無法分開控管
三、不管哪一種方式,總要先建立我要放 repository 的 home directory, 因此命令是:
$ sudo mkdir /home/svn
四、我弄了一個 shell script 叫 new-repository.sh....
#!/bin/bash help() { echo Usage: $0 PROJECT_NAME exit 0 } [ "x$1" = "x" ] && help SVN_HOME=/home/svn cd $SVN_HOME mkdir -p $1 svnadmin create $1 chown -R www-data:subversion $1 cd /home/svn/$1/conf rm -f passwd svnserve.conf ln -s $SVN_HOME/.conf/passwd . ln -s $SVN_HOME/.conf/svnserve.conf .五、要新弄一個 project 的話,只要簡單的下命令,不過請暫緩這個步驟,請先看第六步再回頭執行這一步:
$ sudo new-repository.sh MY-NEW-PROJECT
譬如
$ sudo new-repository.sh wade
六、從上面的 script 可以看到,事實上我也是讓每個 Project 用相同的存取設定,若您真的要分別管理的話,只要讓該 repository 裡面的 conf/passwd 或是 conf/svnserve.conf 不同即可, 這兩個檔的範例如下:
[users] wade = iamwade及
[general] anon-access = read auth-access = write password-db = passwd七、當您執行過第五步之後,就會產生一個適當的 repository, 那麼接下來就是要啟動 svn server....但是,竟然沒有 ubuntu 下的 /etc/init.d/svn 或是 /etc/init.d/svnserve....先看看怎麼啟動它:
$ sudo svnserve -d -r /home
或
$ sudo svnserve -d -r /home/svn
以上兩個方法,將來在存取時的路徑會不一樣,我是採用前一個
八、為了方便啟動/停止此項服務,我自己弄了個 /etc/init.d/svn, 內容如下,存好之後當然要讓它可執行($ sudo chmod +x /etc/init.d/svn):
#! /bin/sh set -e test -x /usr/bin/svnserve || exit 0 ( /usr/bin/svnserve 2>&1 | grep -q exactly ) 2>/dev/null || exit 0 umask 022 SVN_OPTS="-d -r /home" . /lib/lsb/init-functions case "$1" in start) log_daemon_msg "Starting subversion server" "svnserve" if start-stop-daemon --start --quiet --oknodo --pidfile /var/run/svnserve.pid --exec /usr/bin/svnserve -- $SVN_OPTS; then pidof svnserve > /var/run/svnserve.pid log_end_msg 0 else log_end_msg 1 fi ;; stop) log_daemon_msg "Stopping subversion server" "svnserve" if start-stop-daemon --stop --quiet --oknodo --pidfile /var/run/svnserve.pid; then log_end_msg 0 else log_end_msg 1 fi ;; restart) log_daemon_msg "Restarting subversion server" "svnserve" start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile /var/run/svnserve.pid if start-stop-daemon --start --quiet --oknodo --pidfile /var/run/svnserve.pid --exec /usr/bin/svnserve -- $SVN_OPTS; then log_end_msg 0 else log_end_msg 1 fi ;; status) status_of_proc -p /var/run/svnserve.pid /usr/bin/svnserve svnserve && exit 0 || exit $? ;; *) log_action_msg "Usage: /etc/init.d/svn {start|stop|restart|status}" exit 1 esac exit 0九、弄好上面的檔之後,就可以用一般的方式來管理服務,譬如 /etc/init.d/svn start, 或是 /etc/init.d/svn stop 或是 /etc/init.d/status
十、以上,您已經可以用 svn co svn://localhost/svn/wade 來取回 wade,當然此時是空的,或是您可以用 svn import /some/where/of/wade svn://localhost/svn/wade。要 remote 使用只要把 localhost 取代成 IP 即可。順便講一下前面第七步講啟動時的兩個方法,我是用前者啟動,若要改成後者,則存取路徑範例是 svn co svn://localhost/wade 。不知道有沒有比較出不同?
十一、若是要用 http:// 也行,我舉我的設定如下,請修改 /etc/apache2/sites-available/default 或是 /etc/apache2/mods-available/dav_svn.conf,後者就整個內容相同即可,前者則要放在<VirtualHost>與</VirtualHost>之間,內容如下:
<Location /svn> DAV svn SVNParentPath /home/svn SVNListParentPath On AuthType Basic AuthName "wade's repository" AuthUserFile /home/svn/.conf/htpasswd Require valid-user </Location>十二、存好上面的檔之後,只需要 /etc/init.d/apache2 restart 即可生效
十三、對 http:// 的控制,上面並沒有分開控制存取權限,請對 Location 複製去改就可以,譬如:
<Location /svn/wade> DAV svn SVNPath /home/svn/wade # SVNListParentPath On AuthType Basic AuthName "wade's repository" AuthUserFile /home/svn/.conf/htpasswd Require valid-user </Location>
0 意見:
張貼留言