- 論壇徽章:
- 0
|
RHEL 5.2 系統(tǒng)上 Subversion 安裝使用詳解
1. Subversion 是什么
Subversion是一個自由/開源的版本控制系統(tǒng)。也就是說,在Subversion管理下,文件和目錄可以超越時空。也就是Subversion允許你數(shù)據(jù)恢復(fù)到早期版本,或者是檢查數(shù)據(jù)修改的歷史。正因為如此,許多人將版本控制系統(tǒng)當(dāng)作一種神奇的“時間機(jī)器”。
Subversion 的版本庫可以通過網(wǎng)絡(luò)訪問,從而使用戶可以在不同的電腦上進(jìn)行操作。從某種程度上來說,允許用戶在各自的空間里修改和管理同一組數(shù)據(jù)可以促進(jìn)團(tuán)隊協(xié)作。因為修改不再是單線進(jìn)行,開發(fā)速度會更快。此外,由于所有的工作都已版本化,也就不必?fù)?dān)心由于錯誤的更改而影響軟件質(zhì)量—如果出現(xiàn)不正確的更改,只要撤銷那一次更改操作即可。
某些版本控制系統(tǒng)本身也是軟件配置管理(SCM)系統(tǒng),這種系統(tǒng)經(jīng)過精巧的設(shè)計,專門用來管理源代碼樹,并且具備許多與軟件開發(fā)有關(guān)的特性—比如,對編程語言的支持,或者提供程序構(gòu)建工具。不過Subversion并不是這樣的系統(tǒng)。它是一個通用系統(tǒng),可以管理任何類型的文件集。對你來說,這些文件這可能是源程序—而對別人,則可能是一個貨物清單或者是數(shù)字電影。
2. Subversion的特性
在講解Subversion為版本控制領(lǐng)域帶來的特性時,我們會經(jīng)常通過Subversion對CVS的改進(jìn)進(jìn)行說明。如果不熟悉CVS,了解所有Subversion的特性會有一定的困難。而如果根本就不熟悉版本控制,你就只有干瞪眼的份兒了。因此,最好首先閱讀一下第 1 章 基本概念,這一章簡單介紹了一些版本控制的基本思想和概念。
Subversion支持:
- 版本化的目錄
CVS只能跟蹤單個文件的變更歷史,但是Subversion實現(xiàn)的“虛擬”版本化文件系統(tǒng)則可以跟蹤目錄樹的變更。在Subversion中,文件和目錄都是版本化的。
- 真實的版本歷史
由于只能跟蹤單個文件的變更,CVS無法支持如文件拷貝和改名這些常見的操作—這些操作改變了目錄的內(nèi)容。同樣,在CVS中,一個目錄下的文件只要名字相同即擁有相同的歷史,即使這些同名文件在歷史上毫無關(guān)系。而在Subversion中,可以對文件或目錄進(jìn)行增加、拷貝和改名操作,也解決了同名而無關(guān)的文件之間的歷史聯(lián)系問題。
- 原子提交
一系列相關(guān)的更改,要么全部提交到版本庫,要么一個也不提交。這樣用戶就可以將相關(guān)的更改組成一個邏輯整體,防止出現(xiàn)只有部分修改提交到版本庫的情況。
- 版本化的元數(shù)據(jù)
每一個文件和目錄都有自己的一組屬性—鍵和它們的值?梢愿鶕(jù)需要建立并存儲任何鍵/值對。和文件本身的內(nèi)容一樣,屬性也在版本控制之下。
- 可選的網(wǎng)絡(luò)層
Subversion 在版本庫訪問的實現(xiàn)上具有較高的抽象程度,利于人們實現(xiàn)新的網(wǎng)絡(luò)訪問機(jī)制。Subversion可以作為一個擴(kuò)展模塊嵌入到Apache之中。這種方式在穩(wěn)定性和交互性方面有很大的優(yōu)勢,可以直接使用服務(wù)器的成熟技術(shù)—認(rèn)證、授權(quán)和傳輸壓縮等。此外,Subversion自身也實現(xiàn)了一個輕型的,可獨(dú)立運(yùn)行的服務(wù)器軟件。這個服務(wù)器使用了一個自定義協(xié)議,可以輕松的用SSH封裝。
- 一致的數(shù)據(jù)操作
Subversion用一個二進(jìn)制差異算法描述文件的變化,對于文本(可讀)和二進(jìn)制(不可讀)文件其操作方式是一致的。這兩種類型的文件壓縮存儲在版本庫中,而差異信息則在網(wǎng)絡(luò)上雙向傳遞。
- 高效的分支和標(biāo)簽操作
在Subversion中,分支與標(biāo)簽操作的開銷與工程的大小無關(guān)。Subversion的分支和標(biāo)簽操作用只是一種類似于硬鏈接的機(jī)制拷貝整個工程。因而這些操作通常只會花費(fèi)很少且相對固定的時間。
3. Subversion的架構(gòu)
上圖 Subversion設(shè)計總體上的“俯視圖”,圖中的一端是保存所有版本數(shù)據(jù)的Subversion版本庫,另一端是Subvesion的客戶程序,管理著所有版本數(shù)據(jù)的本地影射(稱為“工作拷貝”),在這兩極之間是各種各樣的版本庫訪問(RA)層,某些使用電腦網(wǎng)絡(luò)通過網(wǎng)絡(luò)服務(wù)器訪問版本庫,某些則繞過網(wǎng)絡(luò)服務(wù)器直接訪問版本庫。
4. Subversion的組件
- svn
命令行客戶端程序。
- svnversion
此工具用來顯示工作拷貝的狀態(tài)(用術(shù)語來說,就是當(dāng)前項目的修訂版本)。
- svnlook
直接查看Subversion版本庫的工具。
- svnadmin
建立、調(diào)整和修復(fù)Subversion版本庫的工具。
- svndumpfilter
過濾Subversion版本庫轉(zhuǎn)儲數(shù)據(jù)流的工具。
- mod_dav_svn
Apache HTTP服務(wù)器的一個插件,使版本庫可以通過網(wǎng)絡(luò)訪問。\
- svnserve
一個單獨(dú)運(yùn)行的服務(wù)器程序,可以作為守護(hù)進(jìn)程或由SSH調(diào)用。這是另一種使版本庫可以通過網(wǎng)絡(luò)訪問的方式。
- svnsync
一個通過網(wǎng)絡(luò)增量鏡像版本庫的程序。
5. Subversion 的安裝 (RHEL 5.2系統(tǒng) 64 bit)
- 使用 yum 來安裝 apche subverion
yum install subversion.x86_64 mod_dav_svn.x86_64 httpd.x86_64
- 創(chuàng)建subversion 初始數(shù)據(jù)庫
# mkdir -p /home/admin/data/svn_repo
# svnadmin create --fs-type fsfs /home/admin/data/svn_repo
注:運(yùn)行創(chuàng)建版本庫的命令,指定數(shù)據(jù)存儲為 FSFS,如果要指定為 Berkeley DB,則將 fsfs 替換為 bdb
- subversion導(dǎo)入初始項目
svn import /tmp/project/
file:///home/admin/data/svn_repo
--message "init"
- 通過svnlook查看 項目庫的信息
svnlook info /home/admin/data/svn_repo/
- 配置Apache模塊 通過web 來訪問subversion 版本庫,修改 /etc/httpd/conf.d/subversion.conf
#cat /etc/httpd/conf.d/subversion.conf
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
DAV svn
SVNPath /home/admin/data/svn_repo
AuthType Basic
AuthName "Subversion Realm"
AuthUserFile /etc/httpd/conf.d/svn_user_list
AuthzSVNAccessFile /etc/httpd/conf.d/project.access
Require valid-user
- 創(chuàng)建 /etc/httpd/conf.d/svn_user_list 和 /etc/httpd/conf.d/project.access 文件
- 使用htpasswd 創(chuàng)建用戶列表
htpasswd -m /etc/httpd/conf.d/svn_user_list usrname
- /etc/httpd/conf.d/project.access 參考 svn 官方權(quán)限介紹 舉例如下
#cat /etc/httpd/conf.d/project.access
[groups]
ADMIN = admin
EN_SITE = test1,test2
CN_SITE = test4
CRM_MAIL = test7
DNS = test10
STORAG = test5,test6
NETOP = test3
MONITER = test8,test9
[/]
* = r
@ADMIN = rw
[/trunk/tmp]
* = rw
[/trunk/nop]
@NETOP = rw
[/trunk/conf1]
@EN_SITE = rw
[/trunk/conf2]
@EN_SITE = rw
[/trunk/conf2]
@EN_SITE = rw
[/trunk/conf2]
@CN_SITE = rw
@STORAG = rw
[/trunk/conf3]
@CRM_MAIL = rw
[/trunk/MAIL]
@CRM_MAIL = rw
[/trunk/MONITER]
@MONITER = rw
- 重啟apache,通過
http://server_ip/svn
訪問,如果頁面出現(xiàn) 說明配置成功
注意:/home/admin/data/svn_repo 此目錄 要能被apache 運(yùn)行用戶(apache) 讀寫
- 配置 svn web client 客戶端 WebSVN (
http://www.websvn.info/
) 主要是瀏覽對比版本作用
- 從此處 下載 websvn-2.1.0.tar.gz (
http://websvn.tigris.org/files/d
... websvn-2.1.0.tar.gz)
- 解壓 放到 htdocs 目錄中
move websvn-2.1.0 /home/admin/htdocs/websvn
- 設(shè)置 Apahce 對 websvn 目錄作基本認(rèn)證, 在/etc/httpd/conf.d/subversion.conf 追加內(nèi)容如下
AuthType Basic
AuthName "subversion repository"
AuthUserFile /etc/httpd/conf.d/svn_user_list #svn的用戶密碼文件。
Satisfy All
Require valid-user
- 修改websvn 的配置文件, 修改 /home/admin/htdocs/websvn/include/config.php 內(nèi)容,主要幾項如下
// 添加需要管理的svn庫
$config->addRepository('TEST_SVN', 'file:///home/admin/data/svn_repo');
// 設(shè)置中文支持
$config->setInputEncoding('utf-8'); // Encoding of result returned by svn command line, etc.
$config->setContentEncoding('GB18030'); // Content encoding of all your repositories
// 使用snv的權(quán)限配置文件作 驗證
$config->useAuthenticationFile('/etc/httpd/conf.d/project.access')
// 打開允許 打包下載 svn 目錄內(nèi)容 (tar.gz)
$config->allowDownload();
$config->setTarballTmpDir('/tmp');
- 重啟 Apache,通過
http://server_ip/webvn
訪問 需要輸入 用戶名和密碼 訪問正常 說明配置成功
本文來自ChinaUnix博客,如果查看原文請點(diǎn):http://blog.chinaunix.net/u3/106162/showart_2143952.html |
|