Quote: http://twpug.net/docs/Subversion/#svn-ch-1

什麼是 Subversion?
Subversion 是一個自由/開放源碼的版本控制系統, 也就是說 Subversion 管理著隨時間改變的檔案. 這些檔案放置在一個中央 檔案庫 (repository) 中. 這個檔案庫很像一個尋常的檔案伺服器, 不過它會記住每一次檔案的變動. 這樣你就可以把檔案回復到舊的版本, 或是瀏覽檔案的變動歷程. 許多人會把版本控制系統想像成某種 “時光機器”.

某些版本控制系統也是 software configuration management (SCM) 系統. 這些系統是特別設計來管理大量程式碼的, 而且具有許多功能, 專門用在軟體發展之用 — 像是可完全了解程式語言, 或是提供編譯軟體的工作. 不過 Subversion 並不是這樣的系統; 它是一個泛用系統, 可用來管理任何 類型的檔案, 其中包括了程式源碼.

SVN On CentOS
[1.] yum install subversion mod_dav_svn

[2.] 建立檔案庫,預設 fs-type 為 Berkeley database (BDB),在每個檔案庫的 db/fs-type 可查得到現在使用什麼
         mkdir -p /var/www/html/svn/repos
         svnadmin create /var/www/html/svn/repos/src
         svnadmin create /var/www/html/svn/repos/doc

結構說明
   svn/repos/src/conf/                         – client 端連線時所需要的設定檔
   svn/repos/src/dav/               – 供 Apache 相關模組
   svn/repos/src/db/                 – 存放檔案庫類型,Berkeley DB 或者 FSFS
   svn/repos/src/format            – 記錄編號
   svn/repos/src/hooks/           – 放置 hook 腳本檔案模板的目錄
   svn/repos/src/locks/             – 放置 Subversion 檔案庫鎖定數據的目錄, 用來追蹤存取檔案庫的客戶端
   svn/repos/src/README.txt

[3.] 整合於 Apache
         vi /etc/httpd/conf.d/subversion.conf

LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

<Location /svn>
   DAV svn
   SVNParentPath /var/www/html/svn/repos/
#
#   # Limit write permission to list of valid users.
#   <LimitExcept GET PROPFIND OPTIONS REPORT>
#      # Require SSL connection for password protection.
#      # SSLRequireSSL
#
      AuthType Basic
      AuthName "Authorization Realm"
      AuthUserFile /var/www/html/svn/.password
      Require valid-user
#   </LimitExcept>
</Location>

   apachectl graceful
   chown -R apache.apache /var/www/html/svn/repos/
   htpasswd -c /var/www/html/svn/.password cross

[4.] 瀏覽 http://ssorc.tw/svn/src/ 或 http://ssorc.tw/svn/doc,會看到

Revision 0: /

——————————————————————————–
Powered by Subversion version 1.1.4 (r13838).

      自檔案庫取出一個工作複本,存在 test1_dir 裡,co 等於 check out
         svn co http://ssorc.tw/svn/src/ test1_dir –username cross –password 123456

[5.] 使用 SVN daemon
         vi /var/www/html/svn/repos/src/conf/svnserve.conf

[general]
#anon-access 未登入的user,none 不可動作
anon-access = none

#auth-access 已登入的user,write 可寫入動作
auth-access = write

#Password-db 使用者和帳密存放處
password-db = passwd

#authz-db    權限設定存放處
authz-db = authz

         vi /var/www/html/svn/repos/src/conf/passwd

[users]
cross = 123456
cross2 = 123456

      備註: 以上使用者建立不用再重新啟動 svnserve

         vi /var/www/svn/repos/conf/authz

## 設定群組
## 格式:<group> = <user, user2 …>
[groups]
group1 = cross,cross2
group2 = cross3

## 設定權限
## 格式:<group> = <權限>

[/]
@group1 = rw
* = r

# group1 群組在 / 底下 可以有讀和寫的權限
# 除了group1 之外的群組 都只可以 讀的權限
# 群組之前需要加 @ , user 則不需要

      備註: authz 怎麼試不出來@@

      啟動
         svnserve -d -r /var/www/html/svn/

      自檔案庫取出一個工作複本,存在 test2_dir 裡,co 等於 check out
         svn co svn://ssorc.tw/repos/src test2_dir –username cross –password 123456

      還是你要
         svnserve -d -r /var/www/html/svn/repos/

         瀏覽方式為
            svn://ssorc.tw/src
            svn://ssorc.tw/doc

備註:

0000   00 e0 81 40 24 32 00 20 ed 89 96 0e 08 00 45 00  …@$2. ……E.
0010   00 52 28 83 40 00 80 06 4d 8d c0 a8 01 67 c0 a8  .R(.@…M….g..
0020   01 de 05 fa 0e 6a d5 ef f7 d6 42 1a e6 00 50 18  …..j….B…P.
0030   ff 45 84 da 00 00 33 38 3a 63 72 6f 73 73 20 38  .E….38:cross 8
0040   37 38 62 65 65 36 62 62 62 35 39 61 36 35 39 62  78bee6bbb59a659b
0050   39 31 38 66 34 35 62 65 66 37 34 65 37 32 65 20  918f45bef74e72e
0060 

[6.] 送交未納入版本控制的檔案或檔案樹至檔案庫
         mkdir project1
         cd project1
         mkdir trunk tags branches
         cd ..
         svn import . http://ssorc.tw/svn/doc/ -m "project 1"

認證領域: <http://ssorc.tw:80> Authorization Realm
'root' 的密碼:
認證領域: <http://ssorc.tw:80> Authorization Realm
使用者名稱: cross
'cross' 的密碼:
新增           project1
新增           project1/trunk
新增           project1/branches
新增           project1/tags

送交修訂版 1.

         或者
            svn import . http://ssorc.tw/svn/doc/ -m "project 1" –username cross –password 123456

結構
   svn/repos/doc
                      +– project1
                                +– trunk
                                +– tags
                                +– branches

說明:
   trunk        -用來存份目前專案正在進行開發的程式檔案和文件 (又稱為主線,即 mainline)
   branches  -用來存放主線的各個仍在發展中的分支
   tags         -用來存放已經不再變動的分支,也就是其中的檔案不會再修改了

[7.] 列出檔案庫中的目錄項目
         svn list –verbose http://ssorc.tw/svn/doc/

      1 cross                 11月 03 00:23 project1/

         svn list –verbose http://ssorc.tw/svn/doc/project1

      1 cross                 11月 03 00:23 branches/
      1 cross                 11月 03 00:23 tags/
      1 cross                 11月 03 00:23 trunk/

      顯示作者, 日期戳記, 紀錄訊息大小, 以及紀錄訊息
         svnlook info /var/www/html/svn/repos/doc

cross
2007-11-03 00:23:06 +0800 (六, 03 11月 2007)
9
project 1

      顯示檔案樹, 自 PATH_IN_REPOS 開始 (如果有提供的話, 不然就從檔案樹的根目錄開始), 可選擇性地顯示節點修訂版 id
         svnlook tree  /var/www/html/svn/repos/doc –show-ids

/ <0.0.r1/488>
 project1/ <1.0.r1/321>
  trunk/ <2.0.r1/0>
  branches/ <3.0.r1/70>
  tags/ <4.0.r1/144>

windows 用戶端程式 TortoiseSVN
   至 http://tortoisesvn.tigris.org/ 下載 TortoiseSVN-1.4.4.9706-win32-svn-1.4.4.msi
   還有中文化 LanguagePack-1.4.4.9706-win32-zh_TW.exe
   裝完後可滑鼠右鍵到Settings裡選擇語系

   使用參考 http://itdc.im.cyut.edu.tw/itdcwww/index.php?option=com_content&task=view&id=75&Itemid=31

ref: http://www.ibm.com/developerworks/cn/java/j-lo-apache-subversion/index.html
ref: http://www.duduwolf.com/post/setting_up_subversion.asp
ref: Subversion INSTALL
ref: http://plog.longwin.com.tw/my_note-unix/2007/07/07/apache2_svn_trac_build_2007
ref: http://twpug.net/docs/Subversion/
ref: http://itdc.im.cyut.edu.tw/itdcwww/index.php?option=com_content&task=view&id=52&Itemid=31

Windows上安裝SVN,可參考 http://huanlin.dyndns.org/techshare/viewArticle.action?articleID=2004061303
基本上下載 apache_2.0.59-win32-x86-no_ssl.msi 及 svn-1.4.4-setup.exe

Tarball compiling on CentOS 4.4
1. 下載
         wget http://subversion.tigris.org/downloads/subversion-1.4.4.tar.gz
         wget http://apache.stu.edu.tw/apr/apr-0.9.14.tar.gz
         wget http://apache.stu.edu.tw/apr/apr-util-0.9.13.tar.gz

         url: http://freshmeat.net/projects/berkeleydb/
            wget http://freshmeat.net/redir/berkeleydb/694/url_tgz/db-4.5.20.tar.gz

         wget http://www.webdav.org/neon/neon-0.25.5.tar.gz

2. 安裝
      yum install neon-devel zlib-devel

      tar zxvf apr-0.9.14.tar.gz
      cd apr-0.9.14
         ./configure
         make
         make install

      tar zxvf db-4.5.20.tar.gz
      cd db-4.5.20
      cd build_unix
         ../dist/configure
         make
         make install

      tar zxvf apr-util-0.9.13.tar.gz
      cd apr-util-0.9.13
         ./configure –with-apr=/usr/local/apr/bin/apr-config –with-berkeley-db=/usr/local/BerkeleyDB.4.5/
         make
         make install

      tar zxvf neon-0.25.5.tar.gz
      cd neon-0.25.5
         ./configure
         make
         make install

      tar jxvf subversion-1.4.4.tar.gz
      cd subversion-1.4.4
         ./configure –with-apxs=/usr/sbin/apxs  –with-apr=/usr/local/apr/bin/apr-config –with-apr-util=/usr/local/apr/bin/apu-config  –with-berkeley-db=/usr/local/BerkeleyDB.4.5/
         make
         make install

如何使用
   1。在完全沒有 .svn 的目錄的情況下
   2。先 svn co 自檔案庫取出一個工作複本,這時就會有檔案被抓下來並有 .svn 產生
   3。修改完文件後,可 svn commit -m "upload1" 上傳送交檔案
   4。當有好多個client點作文件修改,可事先 svn update 來更新 server 上是否已有新檔

如果是新檔案或目錄被建立
   1。在有 .svn 的目錄的情況下
   2。svn add 檔案或目錄
   3。svn commit -m "upload2"

FQA
Q1) 當使用中文檔名,於 linux console 下載 svn 時出現了錯誤訊息

svn: Can't convert string from 'UTF-8' to native encoding:

A1) 原因為所處的環境不是 UTF8,所以你只要 export LANG=zh_TW.UTF-8

最後修改日期: 2007 年 08 月 02 日

作者

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。