SVN應用實例
小張是位在軟體公司任職的專案經理,某天,察覺到當成員愈多時,在版本控制上,更形困難,每每版本混亂造成的影響,總要花上些許多時間。因此,小張決定試著採用Subversion來做版本管理。
首先,將原有的程式碼及相關文件,利用svn import匯入檔案庫(repository)。
svn import porject_directory file:///svn/proj
接著,將兩個模組分別交給小李及小陳兩位工程師進行開發,分別利用svn checkout下載最新的程式碼。
svn checkout file:///svn/proj /local_project
小李的任務是撰寫一個math模組,於是新增一個math目錄,有著math.h及math.cpp兩個檔案,利用svn add將整個math目錄列入提交清單。
svn add math
當math模組開發完成後,使利用svn commit提交math目錄。
svn commit
而小陳必須引用math函式進行另項模組修改,所以必須利用svn update將更新至最新的程式碼。
svn update file:///svn/proj
當程式碼修正完畢後,也利用svn commit進行提交。
svn commit
這時,小李又針對math模組進行修改測試,卻發現無法正常編譯,但上一版是正常的,因此小李利用svn diff比對,找出程式錯誤的地方,再次修正即可正常編譯。
svn diff -r01:02
終於要釋出完整版本,於是利用svn export輸出一份不含任何版本控制資訊的程式碼。
svn export file:///svn/proj /projR1
2008年12月28日 星期日
2008年12月25日 星期四
使用SVN進行版本控制 - (三) 建立檔案庫及導入
Create Reposiroty (建立版本庫)
$>mkdir /svnImport Project (匯入專案)
$>chwon -R nobody /svn
$>svnadmin create /svn/test
$>ls /svn/test
#如果ls /repository/test/出現了下面的內容,就說明subversion安裝成功了
conf dav db format hooks locks README.txt
$>svn import gt;svn import gt;svn import gt;svn import gt;svn import gt;svn import projectdir file:///svn/test/ -m "initial import"
##出現下列訊息, 即表示成功匯入專案
Adding projectdir/foo.c
Adding projectdir/bar.c
Adding projectdir/subdir
Adding projectdir/subdir/quux.h
Committed revision 1.
於IE的網址列, 鍵入http://localhost/svn/test/, 如下圖結果
2008年12月24日 星期三
使用SVN進行版本控制 - (二) 設定配置
啟動Subversion服務提供下列三種方式:
1. svnserver, a custom server
svnserver是一種較為不耗費資源的service, 建立於TCP/IP的基礎通訊協定上,client side可透過svn://來進行溝通。
常見的有兩種模式啟動svnserver:(1) as stand alone, (2) as daemon
(1) as stand alone (/etc/init.d)
2. apache, a http server
apache是一種較為耗費資源的service, 建立於WebDav的基礎通訊協定上,client side可透過http://來進行溝通。
- svnserver
- svnserver + ssh
- apache
1. svnserver, a custom server
svnserver是一種較為不耗費資源的service, 建立於TCP/IP的基礎通訊協定上,client side可透過svn://來進行溝通。
常見的有兩種模式啟動svnserver:(1) as stand alone, (2) as daemon
(1) as stand alone (/etc/init.d)
$> svnserver -d -r /svn(2) as daemon (/etc/xinetd.d)
# -d : 以daemon方式執行
# -r : 虛擬根目錄, 限制只能在此目錄底下的瀏覽
$> lsof -i :3690
# 可以查看svnserver是否已正常啟動
$> vi /etc/xinetd.d/svnserve1.1 svnserve.conf (配置設定)
##新增以下文字內容
service svnserve
{
disable = no
socket_type = stream
wait = no
user = apache
server = /usr/local/subversion/bin/svnserve
server_args = -i
}
$> vi /etc/services
##確認有無以下文字內容, 若不存在, 請新增於檔案內容中
svnserve 3690/tcp #Subversion svnserve
svnserve 3690/udp #Subversion svnserve
[general]1.2 passwd (使用者帳號)
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
# realm = My First Repository
[users]1.3 authz (授權管理)
## username = password
admin = admin
yardmgr = yardmgr
[groups]
administrators = admin
developer_team = mills
[/]
* =
@administrators = rw
[/svn/yard:/]
@developer_team = rw
[/svn/test:/]
@developer_team = rw
2. apache, a http server
apache是一種較為耗費資源的service, 建立於WebDav的基礎通訊協定上,client side可透過http://來進行溝通。
(1) Apache2 Config (I) -- Add SVN Modules
$>vi /usr/local/apache2/conf/httpd.conf
##確認有無以下內容, 若不存在, 請新增貼上
##若沒有mod_dav_svn模組, SVN則無法以http方式運作
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modles/mod_authz_svn.so
(2) Apache2 Config (I) -- Add SVN Path
$>vi /usr/local/apache2/conf/httpd.conf
##確認有無以下內容, 若不存在, 請新增貼上
<Location>
DAV svn
SVNPath /svn/test
# our access control policy, below (4)
AuthzSVNAccessFile /svn/svn-authz
AuthType Basic
AuthName "Version Control System"
# how to authenticate a user, below (3)
AuthUserFile /svn/svn-auth-file
# only authenticated users may access the repository
Require valid-user
</Location>
(3) Setting up http authentication (建立認證帳號)
$>htpasswd -c -m /svn/svn-auth-file admin
# 輸入第1個使用者帳號, 第1次建立才加 -c
# -c : 建立新檔
# -m : 採以MD5編碼
$>htpasswd -m /svn/svn-auth-file yardmgr
# 輸入第2個使用者帳號
(4) Setting up svn authorization (建立授權管理)
$> vi /svn/svn-authz
# 新增以下文字內容
[groups]
administrators = admin
developer_team = yardmgr
[/]
* =
@administrators = rw
[/svn/test:/]
@developer_team = rw
2008年12月20日 星期六
使用SVN 進行版本控制 - (一) 安裝
what is SVN??
Apache2 Installation
Version Control with Subversion (繁體中文) -- http://twpug.net/docs/Subversion/
Install Subversion at RedHat Linux AS4 -- http://www.svn8.com/svnpz/20080316/339.html
(引述官方文件的簡介)功能列表
Subversion 是一個自由/開放源碼的版本控制系統, 也就是說 Subversion 管理著隨時間改變的檔案. 這些檔案放置在一個中央 檔案庫 (repository) 中. 這個檔案庫 很像一個尋常的檔案伺服器, 不過它會記住每一次檔案的變動. 這樣你就可以把檔案回復到舊的版本, 或是瀏覽檔案的變動歷程. 許多人會把版本控制系統想像成某種 “時光機器”.
某些版本控制系統也是 software configuration management (SCM) 系統. 這些系統是特別設計來管理大量程式碼的, 而且具有許多功能, 專門用在軟體發展之用 — 像是可完全了解程式語言, 或是提供編譯軟體的工作. 不過 Subversion 並不是這樣的系統; 它是一個泛用系統, 可用來管理任何 類型的檔案, 其中包括了程式源碼.
- 目錄版本控制
- CVS 只能追蹤單獨檔案的歷史, 不過 Subversion 實作了一個 “虛擬” 的版本控管檔案系統, 能夠依時間追蹤整個目錄的更動. 目錄和檔案都被納入版本控管. 最後, 用戶端有真正可用的 move (移動) 與 copy 指令.
- 不可分割的送交
- 一個送交動作, 不是導致所有更動都送入檔案庫, 就是完全不會送入. 這讓發展人員以邏輯區段建立更動, 並送交更動.
- 納入版本控管的描述資料 (Meta-data)
- 每一個檔案與目錄都附有一組隱形 “性質 (property)”. 你可以自己發明, 並儲存任何你想要的鍵值對. 性質是隨著時間來作版本控管的, 就像檔案內容一樣.
- 選擇不同的網路層
- Subversion 有抽象的檔案庫存取概念, 可以讓人很容易地實作新的網路機制. Subversion “先進” 的網路伺服器, 是 Apache 網頁伺服器的一個模組, 它以稱為 WebDAV/DeltaV 的 HTTP 變體協定與外界溝通. 這對 Subversion 的穩定性與互通性有很大的幫助, 而且額外提供了許多重要功能: 舉例來說, 有身份認證, 授權, 線上壓縮, 以及檔案庫瀏覽. 另外也有小而獨立的 Subversion 伺服器程式, 使用的是自訂的通訊協定, 可以很容易地透過 ssh 以 tunnel 方式使用.
- 一致的資料處理方式
- Subversion 使用二進制差異運算法, 來表示檔案的差異, 它對文字 (人類可理解的) 與二進制檔案 (人類無法理解) 兩類的檔案都一視同仁. 這兩類的檔案都同樣地以壓縮形態儲存在檔案庫中, 而且檔案差異是以兩個方向在網路上傳送的.
- 更有效率的分支 (branch) 與標記 (tag)
- 分支與標記的花費並不必一定要與計畫大小成正比. Subversion 建立分支與標記的方法, 就只是複製該計畫, 使用的方法就像 hard-link 一樣. 所以這些動作只會花費很小, 而且是固定的時間.
- Hackability
- Subversion 沒有任何的歷史包袱; 它主要是一群共用的 C 程式庫, 具有定義完善的 API. 這使得 Subversion 便於維護, 並且可被其它應用程式與程式語言使用.
SVN提供了三種Server配置的方式,(1) svnserver (2) svnserver+ ssh (3) apache + mod_dav_svn
(1) svnserver : 一個更小,輕型的服務器程序,同客戶端使用自定義的協議。因為協議是為Subversion專門設計的,並且是有狀態的(不像HTTP),它提供了更快的 網絡操作—但也有一些代價。它只理解CRAM-MD5的認證,然而它非常易於配置,是開始使用Subversion的小團隊的最佳選擇。
(2) svnserver + ssh : 儘管依然使用svnserve,它與傳統的svnserve部署非常不同,SSH在多所有的通訊中使用加密方式,SSH也使用排他的認證,所以在服務器主機(svnserve與之不同,它包含了自己的私有用戶帳號)上必須要有真實的系統帳戶。最後,因為這些配置需要每個用戶發起一個私有的臨時svnserve進程,這與允許一組本地用戶通過file://
協議訪問等同(從訪問許可的視點)。因此路徑為基礎的訪問控制變得沒有意義,因為每個用戶都可以直接訪問版本庫。
(3) apache : Apache是最流行的web服務器,通過使用mod_dav_svn模塊,Apache可以訪問版本庫,並且可以使客戶端使用HTTP的擴展協議WebDAV/DeltaV進行訪問,因為Apache是一個非常易於擴展的web服務器,它提供了許多「易於獲取的」特性,例如加密的SSL通訊,日誌和與第三方工具的集成,以及內置的版本庫web瀏覽功能。
註: 參考官方說明文件第6章
Apache2 Installation
##請至官網下載必備套件SVN Installation
Apache官網:http://httpd.apache.org/
Apache 套件:http://ftp.tcc.edu.tw/pub/Apache/httpd/httpd-2.0.63.tar.gz
##解壓縮 httpd-2.x.x.xxtar.gz
$>mv httpd-2.x.x.xxtar.gz /usr/src/
$>tar -xvzf httd-2.x.xx.tar.gz
$>cd httpd-2.x.xx
##安裝apr (Apache Portable Runtime) & apr-util (APR Utility)
$>cd httpd-2.x.xx/srclib/apr
$>./buildconf
$>./configure --prefix=/usr/local/apr
$>make
$>make install
$>cd httpd-2.x.xx/srclib/apr-util
$>./buildconf
$>./configure --prefix=/usr/local/apr --with-apr=/usr/local/apr
$>make
$>make install
##安裝apache2
$>cd httpd-2.x.xx
$>./configure --enable-dav --prefix=/usr/local/apache2 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr --enable-cgi --enable-modules=so --enable-rewrite
$>make && make install
##請至官網下載必備套件Reference by follow website
SVN官網:http://subversion.tigris.org/
SVN套件:http://subversion.tigris.org/downloads/subversion-1.5.4.tar.gz
$>./configure --prefix=/usr/local/subversion --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr --with-apxs=/usr/local/apache2/bin/apxs --with-ssl
$>make
$>make install
Version Control with Subversion (繁體中文) -- http://twpug.net/docs/Subversion/
Install Subversion at RedHat Linux AS4 -- http://www.svn8.com/svnpz/20080316/339.html
訂閱:
文章 (Atom)