Debian Linux 架設 Subversion(SVN)

打算想要架 svn + apache2 + trac + + virtual host, 先從 subversion 和 apache2 開始 🙂

  1. apt-get install libapache2-svn apache2 subversion
  2. mkdir -p /home/svn/repository # 可以建到 /home/svn 即可(我習慣多一個檔案庫, 之後 svn 那層 可以放設定檔或其它東西)
  3. svnadmin create /home/svn/repository/PROJECT_NAME
  4. chown -R www-data.www-data /home/svn/repository/PROJECT_NAME
  5. vim /etc/apache2/mods-available/dav_svn.conf # 拿掉下述地方的註解, 只有 SVNParentPath 要修改路徑.(或者直接 cp 下面的即可),沒有此檔可靠 a2enmod dav_svn 產生.

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

  6. 編輯 vim /etc/apache2/dav_svn.authz, ACCOUNT1 只能讀, ACCOUNT2 可以讀寫, 其它所有都不能進來.(PROJECT_NAME:/, 那個 / 可以是 /trunk => 代表設定誰在 trunk 能做什麼事的意思)

    [PROJECT_NAME:/]
    * =
    ACCOUNT1 = r
    ACCOUNT2 = rw

  7. 增加透過 apache 存取(ci/co)的 使用者帳號/密碼 到 /etc/apache2/dav_svn.passwd
    • /usr/bin/htpasswd -c /etc/apache2/dav_svn.passwd ACCOUNT1
    • /usr/bin/htpasswd /etc/apache2/dav_svn.passwd ACCOUNT2
  8. 重新啟動 apache: /etc/init.d/apache2 restart

這樣子就可以做 checkout(co)/commit(ci)/update(up)... 等動作囉~ 存取 url 如下:

  • svn co http://localhost/svn/PROJECT_NAME
  • svn co http://DOMAIN_NAME/svn/PROJECT_NAME
  • 同樣於 http://DOMAIN_NAME/svn/PROJECT_NAME/ 應該就會看到 Revision 資訊

參考來源: 在Debian下安裝SVN(subversion)

附註:

快速新增其它 SVN PROJECT 的方法:

  1. svnadmin create /home/svn/repository/NEW_PROJECT_NAME
  2. chown -R www-data.www-data /home/svn/repository/NEW_PROJECT_NAME 
  3. vim /etc/apache2/mods-available/dav_svn.conf 裡面 對 <Location /svn> 改成另外的名字, 就可以用變另一種專案, 裡面的帳號/密碼也都可以另外產生.
  4. vim /etc/apache2/dav_svn.authz 這個檔案檔名會依照 dav_svn.conf 做修改, 裡面加上 NEW_PROJECT_NAME/帳號 等參數, 再重新啟動 apache 即可.
  5. 就可以 http://DOMAIN_NAME/svn/NEW_PROJECT_NAME 存取.

通常 PROJECT 習慣建立如下目錄(branches, tags, trunk):

  1. mkdir /tmp/PROJECT_NAME
  2. mkdir /tmp/PROJECT_NAME/branches # 分支
  3. mkdir /tmp/PROJECT_NAME/tags
  4. mkdir /tmp/PROJECT_NAME/trunk # 主幹, 所有檔案都往裡面塞
  5. svn import /tmp/PROJECT_NAME http://DOMAIN_NAME/svn/PROJECT_NAME/ -m "initial import"
  6. 或 svn import /tmp/PROJECT_NAME file:///home/svn/repository/PROJECT_NAME
  7. 之後 checkout: svn co http://DOMAIN_NAME/svn/PROEJCT_NAME/trunk

參考文件: Subversion的權限控制

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

在〈Debian Linux 架設 Subversion(SVN)〉中有 10 則留言

  1. 您好!謝謝您這麼熱心的分享,對我幫助很大
    我試了兩三次,終於灌了起來
    但我用烏龜 svn checkout 的時候,中文檔名都變亂碼了
    請問該怎麼辦…
    我找不到哪邊可以設定
    我用 ssh 在 server 上 import、checkout,在 pietty 上看到都是正常的碼
    我的編碼是用 big5 (當初灌 samba utf-8 一直弄不起來,只好用 big5)
    非常謝謝您!

  2. 厄, 烏龜的話, 應該是在 Windows 的問題, 我覺得您可以查查看 烏龜的設定, 我猜應該要可以設定才對.
    然後另外你可以試一下, 在 Linux 上開一個 UTF-8 的檔名, 和 big5 的檔名 然後 commit 上去, 再用烏龜 checkout 看看, 來確定 Windows 吃的檔名是怎麼樣~
    至於 samba 的 utf-8, 您試試看加這兩行, 應該就可以動了~ (samba 3.0)
    unix charset = utf-8
    dos charset = utf-8

  3. 這兩天弄了很久,終於把 samba utf-8 弄起來
    我的 big5 samba 轉成 utf-8 以後,samba 一直在網芳看不到(幾個月前試失敗的時候也是一樣的情況)
    最後發現是 port 139 沒有 run 起來
    但是 /etc/init.d/samba restart都沒出現錯誤。
    檢查 ps -aux 才發現有兩個 samba pid 是殭屍,kill -9 以後就成功了
    因為我有用 samba,所以 samba 要先搞定才能用 svn,不然其他人就不能工作
    最後 svn 終於能正確讀取中文資料夾了(svn 似乎只吃 utf-8,我用 smart svn指定編碼也一樣沒用)
    非常謝謝您

  4. 因為該 Server 是公司內部要用的
    上面已經有很多 Big5 的中文檔名的檔案
    如果我把系統的編碼改掉(LC_ALL = zh_TW.UTF-8),Samba 應該就會變亂碼,或是無法使用
    這樣其他人就不能用 Samba 上的檔案
    不過我是沒去測到底會不會亂碼(Samba 跑 Big5,系統跑 UTF-8)
    只覺得系統兩個編碼一起用會不好
    所以我就先把 Samba 整個成功弄成 UTF-8 之後才去弄 SVN
    另外,我一直想把系統訊息改成英文,但一直弄不成功 囧
    LC_MESSAGES 一直無法指定成 en_US.UTF-8,怎麼 export 都沒用
    只好就使用中文訊息...

  5. 系統跑雙語系應該是不會有問題, 因為 Samba 主要是 Mount 設好應該就可以了~
    不過, 跑兩種編碼應該還是不太好就是了.. XD
    LC_MESSAGES... export LANG=C 試試看呢?

  6. 抱歉… 又錯了 剛剛的亂碼發現是尚未轉成 UTF8 的檔名
    沒事了(大抱歉 Orz)
    請幫我把最後面這兩個蠢留言刪一下

  7. 你好,看了你的文章建立SVN,減少了很多摸索的時間...
    以下為上網搜尋整理出的SVN的備份還原方式,不知是否有幫助~
    備份:
    svnadmin dump /path/to/project/ >/tmp/project.dump

    還原:
    先刪除
    rm /path/to/project
    再建立
    svnadmin create /path/to/project
    svnadmin load /path/to/project < /tmp/project.dump
    chown www-data.www-data -R /path/to/project

    其他:
    唯一識別ID:(Client端應該是認這個,uuid不同應該會不能用)
    /PROJECT_NAME/db/uuid

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料