您好,登錄后才能下訂單哦!
一、什么是 Subversion?
(本文永久地址:http://woymk.blog.51cto.com/10000269/1951937)
Subversion 是一個(gè)免費(fèi)/開源的版本控制系統(tǒng)(version control system, VCS), 也就是說(shuō), Subversion 可以跨越時(shí)間地對(duì)文件和目錄, 以及它們的修改進(jìn)行管理. 這就允許你恢復(fù)數(shù)據(jù)的舊版本, 或檢查數(shù)據(jù)的修改歷史. 由于這個(gè)特點(diǎn), 很多人把版本控制系統(tǒng)看成是一種“時(shí)間機(jī)器”。
Subversion 可以跨越網(wǎng)絡(luò)進(jìn)行操作, 這就允許多個(gè)用戶在不同的機(jī)器上工作. 從某種程度上講, 允許用戶在各自的空間里修改和管理同一組數(shù)據(jù)可以促進(jìn)團(tuán)隊(duì)協(xié)作, 因?yàn)樾薷牟辉偈菃尉€進(jìn)行, 開發(fā)速度會(huì)更快. 由于所有的工作都被記錄在案, 也就不用擔(dān)心并行開發(fā)會(huì)降低軟件的質(zhì)量—如果出現(xiàn)不正確的修改, 只要撤消那一次更改操作即可。
某些版本控制系統(tǒng)同時(shí)也是軟件配置管理 (software configuration management, SCM) 系統(tǒng). 這種系統(tǒng)經(jīng)過(guò)精巧的設(shè)計(jì), 專門用于管理源代碼樹, 具備許多與軟件開發(fā)有關(guān)的特性—理解編程語(yǔ)言, 提供了程序構(gòu)建工具. 但 Subversion 不是 SCM, 它是一個(gè)通用系統(tǒng), 可以管理任意類型的文件集合. 對(duì)你來(lái)說(shuō), 這些文件可能是源代碼文件—對(duì)別人來(lái)說(shuō), 可能是一個(gè)貨物清單或數(shù)字電影。
二、Subversion 的架構(gòu)
圖中的一端是存放所有版本數(shù)據(jù)的 Subversion 倉(cāng)庫(kù), 另一端是 Subversion 客戶端程序, 客戶端程序管理著部分版本數(shù)據(jù)在本地的映射. 兩端之間是穿過(guò)倉(cāng)庫(kù)訪問(wèn) (Repository Access) 層的多條訪問(wèn)路徑, 其中一些路徑跨越計(jì)算機(jī)網(wǎng)絡(luò), 通過(guò)網(wǎng)絡(luò)服務(wù)器對(duì)倉(cāng)庫(kù)進(jìn)行訪問(wèn), 其他一些路徑則不經(jīng)過(guò)網(wǎng)絡(luò), 直接訪問(wèn)倉(cāng)庫(kù).
三、Subversion 的組件
svn
客戶端命令行工具
svnversion
用于報(bào)告工作副本狀態(tài) (就項(xiàng)目的版本號(hào)而言) 的工具
svnlook
可以直接檢查倉(cāng)庫(kù)的工具
svnadmin
用于創(chuàng)建, 調(diào)整或修復(fù) Subversion 倉(cāng)庫(kù)的工具
mod_dav_svn
Apache HTTP 服務(wù)器插件, 該插件允許用戶通過(guò)網(wǎng)絡(luò)訪問(wèn)倉(cāng)庫(kù)
svnserve
一個(gè)定制的, 可獨(dú)立運(yùn)行的服務(wù)器程序, 可以以守護(hù)進(jìn)程方式運(yùn)行, 也可以被 SSH 調(diào)用, 這是另一種允許用戶通過(guò)網(wǎng)絡(luò)訪問(wèn)倉(cāng)庫(kù)的方法
svndumpfilter
過(guò)濾 Subversion 倉(cāng)庫(kù)轉(zhuǎn)儲(chǔ)數(shù)據(jù)流的程序
svnsync
可以跨越網(wǎng)絡(luò)對(duì)倉(cāng)庫(kù)進(jìn)行增量鏡像備份的程序
svnrdump
可以跨越網(wǎng)絡(luò)對(duì)倉(cāng)庫(kù)歷史進(jìn)行轉(zhuǎn)儲(chǔ)和加載的程序
svnmucc
該工具支持在沒有工作副本的情況下, 在一個(gè)單獨(dú)的提交中對(duì)多個(gè)倉(cāng)庫(kù)執(zhí)行基于 URL 的操作
四、安裝Subversion前的準(zhǔn)備
安裝一些常用的依賴包
yum install -y make gcc gcc-c++ perl zlib-devel libaio libpng libpng-devel libjpeg-devel pcre-devel
yum install -y libXpm-devel openssl openssl-devel libxml2-devel bzip2-devel.x86_64 libjpeg-turbo-devel
yum install -y freetype freetype-devel libtool cmake ncurses-devel bison re2c curl-devel wget
rpm -ivh "http://mirrors.sohu.com/fedora-epel/epel-release-latest-6.noarch.rpm"
yum install -y libmcrypt-devel re2c unzip
安裝Subversion需要的依賴包
(詳情可參考官方文檔:http://svn.apache.org/repos/asf/subversion/trunk/INSTALL)
1. Apache Portable Runtime 1.3 or newer
cd /usr/localhost/src
wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-1.5.2.tar.gz
wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-util-1.5.4.tar.gz
tar zxvf apr-1.5.2.tar.gz
cd apr-1.5.2
./configure --prefix=/usr/local/apr
make && make install
cd ..
tar zxvf apr-util-1.5.4.tar.gz
cd apr-util-1.5.4
./configure --prefix=/usr/local/apr --with-apr=/usr/local/apr
make && make install
2. Zlib
http://www.zlib.net/
下載的當(dāng)前版本為zlib-1.2.11.tar
解壓后執(zhí)行
./configure
make && make install
3. autoconf 2.59 or newer
yum install autoconf –y
4. libtool 1.4 or newer
yum install libtool -y
5. Apache Serf library 1.3.4 or newer
cd /usr/local/src
wget http://archive.apache.org/dist/serf/serf-1.2.1.tar.bz2
tar jxvf serf-1.2.1.tar.bz2
cd serf-1.2.1
yum install expat expat-devel –y
./configure --prefix=/usr/local/serf --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr
make && make install
6. OpenSSL (OPTIONAL)
yum install openssl –y
7. Berkeley DB 4.X (可選安裝)
yuminstall db4 -y
8. Cyrus SASL library (OPTIONAL)
yum -y install cyrus-sasl*
9. dbus
yum install dbus
10. Qt 4 (可選安裝)
yum install qt qt-devel
11. GLib 2 (Unix only, OPTIONAL)
yum install glib2 glib2-devel
12. KDELibs 4 (可選安裝)
yum install kdelibs kdelibs-devel
13. Python 2.7 or newer (https://www.python.org/)
(可選擇安裝)
14. SQLite (REQUIRED)
https://www.sqlite.org/download.html
cd /usr/local/src
wget http://www.sqlite.org/2017/sqlite-amalgamation-3180000.zip
unzip sqlite-amalgamation-3180000.zip
先解壓好,后面安裝Subversion時(shí)要用到
五、安裝Apache Web Server(2.2.X or newer)
下載源碼包
cd /usr/local/src
wget http://mirrors.sohu.com/apache/httpd-2.2.34.tar.gz
tar zxvf httpd-2.2.34.tar.gz
編譯&&安裝
cd httpd-2.2.34
./configure --prefix=/webapp/apache2 --enable-dav --enable-dav-fs--enable-dav-lock --enable-so --enable-rewrite --enable-modules=all --enable-mods-shared=all --with-mpm=prefork --enable-maintainer-mode --enable-ssl --with-ssl --with-pcre --with-include-apr
make && make install
配置apache
cd /webapp/apache2/
vi conf/httpd.conf
找到
#ServerName www.example.com:80
改成
ServerName localhost:80
檢查配置文件語(yǔ)法
bin/apachectl -t
配置啟動(dòng)腳本
cp /usr/local/src/httpd-2.2.34/build/rpm/httpd.init/etc/init.d/httpd
注意文件中有三處主要的地方需要修改下的:
httpd=${HTTPD-/webapp/apache2/bin/httpd}
pidfile=${PIDFILE-/webapp/apache2/logs/${prog}.pid}
CONFFILE=/webapp/apache2/conf/httpd.conf
請(qǐng)根據(jù)自己的安裝目錄更改相應(yīng)的路徑!
然后運(yùn)行如下命令:
chmod +x /etc/init.d/httpd
chkconfig --add httpd
chkconfig httpd on
/etc/init.d/httpd start
netstat -lnp |grep httpd
六、安裝Subversion
官網(wǎng)下載地址:http://subversion.apache.org/download.cgi
這里我們下載1.8版
cd /usr/local/src
wget http://mirrors.tuna.tsinghua.edu.cn/apache/subversion/subversion-1.8.18.tar.gz
tar zxvf subversion-1.8.18.tar.gz
把解壓好的SQLite復(fù)制到subversion目錄下
mv sqlite-amalgamation-3180000subversion-1.8.18/sqlite-amalgamation
cd subversion-1.8.18
./configure --prefix=/webapp/subversion --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr --enable-mod-activation --with-apache-libexecdir=/webapp/apache2/modules --with-apxs=/webapp/apache2/bin/apxs --with-serf=/usr/local/serf --with-zlib
make && make install
創(chuàng)建版本庫(kù):
要?jiǎng)?chuàng)建一個(gè)版本庫(kù),首先要確定采用哪種數(shù)據(jù)存儲(chǔ)方式。在 Subversion 中,版本庫(kù)的數(shù)據(jù)存儲(chǔ)有兩種方式,一種是在 Berkeley DB 數(shù)據(jù)庫(kù)中存放數(shù)據(jù);另一種是使用普通文件,采用自定義的格式來(lái)儲(chǔ)存,稱為 FSFS。
兩種版本庫(kù)數(shù)據(jù)存儲(chǔ)對(duì)照表
特性 | Berkeley DB | FSFS |
---|---|---|
對(duì)操作中斷的敏感 | 很敏感;系統(tǒng)崩潰或者權(quán)限問(wèn)題會(huì)導(dǎo)致數(shù)據(jù)庫(kù)“塞住”,需要定期進(jìn)行恢復(fù)。 | 不敏感。 |
可只讀加載 | 不能 | 可以 |
存儲(chǔ)平臺(tái)無(wú)關(guān) | 不能 | 可以 |
可從網(wǎng)絡(luò)文件系統(tǒng)訪問(wèn) | 不能 | 可以 |
版本庫(kù)大小 | 稍大 | 稍小 |
可擴(kuò)展性:修訂版本樹的數(shù)量 | 數(shù)據(jù)庫(kù),沒有限制 | 許多古老的本地文件系統(tǒng)在處理單一目錄包含上千個(gè)條目時(shí)出現(xiàn)問(wèn)題。 |
可擴(kuò)展性:文件較多的目錄 | 較慢 | 較快 |
速度:檢出最新的代碼 | 較快 | 較慢 |
速度: 大的提交 | 較慢,但是時(shí)間被分配在整個(gè)提交操作中 | 較快,但是最后較長(zhǎng)的延時(shí)可能會(huì)導(dǎo)致客戶端操作超時(shí) |
組訪問(wèn)權(quán)處理 | 對(duì)于用戶的umask設(shè)置十分敏感,最好只由一個(gè)用戶訪問(wèn)。 | 對(duì)umask設(shè)置不敏感 |
功能成熟時(shí)間 | 2001年開始使用 | 2004年開始使用 |
確定了具體的數(shù)據(jù)存儲(chǔ)類型,只要在命令行當(dāng)中執(zhí)行 svnadmin 命令就可以創(chuàng)建一個(gè) Subversion 版本庫(kù),命令如下:
創(chuàng)建文件夾
mkdir /webapp/svndata
PATH=$PATH:/webapp/subversion/bin
執(zhí)行svnadmin命令創(chuàng)建版本庫(kù),指定數(shù)據(jù)存儲(chǔ)為FSFS
svnadmin create --fs-type fsfs /webapp/svndata/data
如果要指定為Berkeley DB,則將fsfs替換為bdb
對(duì)于Subversion 1.2以后版本,svnadmin缺省使用fsfs文件系統(tǒng)后端創(chuàng)建版本庫(kù)。
ll /webapp/svndata/data/
總用量 24
drwxr-xr-x. 2 root root 4096 7月 28 07:29 conf
drwxr-sr-x. 6 root root 4096 7月 28 07:29 db
-r--r--r--. 1 root root 2 7月 28 07:29 format
drwxr-xr-x. 2 root root 4096 7月 28 07:29 hooks
drwxr-xr-x. 2 root root 4096 7月 28 07:29 locks
-rw-r--r--. 1 root root 246 7月 28 07:29 README.txt
conf 目錄下存放了版本庫(kù)的配置文件,包括用戶訪問(wèn)控制和權(quán)限控制等內(nèi)容;
db 目錄下存放著 Subversion 所要管理的所有受版本控制的數(shù)據(jù);
hooks 目錄存放著鉤子腳本及其模版(一種版本庫(kù)事件觸發(fā)程序);
locks 目錄存放著 Subversion 版本庫(kù)鎖定數(shù)據(jù);
format 文件記錄了版本庫(kù)的布局版本號(hào)。
用 svn import 命令來(lái)進(jìn)行項(xiàng)目的導(dǎo)入:
svn import /tmp/ file:///webapp/svndata/data/ --message "init"
確認(rèn)導(dǎo)入的項(xiàng)目是否正確:
svn list --verbose file:///webapp/svndata/data/
查看最新修訂版本的信息:
svnlook info /webapp/svndata/data
"--revision 版本號(hào)",指定某一個(gè)修訂版的顯示:
svnlook info /webapp/svndata/data --revision1
顯示版本庫(kù)的具體樹形結(jié)構(gòu),后面的“--show-ids”選項(xiàng)指定顯示每一個(gè)顯示元素的修改版本 ID:
svnlook tree /webapp/svndata/data/ --show-ids
基本的服務(wù)器配置
svnserve 是一個(gè)輕量級(jí)的服務(wù)器, 使用自定義的協(xié)議通過(guò)TCP/IP與客戶端通訊??蛻舳送ㄟ^(guò)由 svn:// 或者 svn+ssh:// 開始的URL訪問(wèn)svnserve服務(wù)器。
啟動(dòng)SVN服務(wù)器:
svnserve –d -r /webapp/svndata
-i作為 inetd 啟動(dòng)
-d做為守護(hù)進(jìn)程啟
-r用來(lái)指定版本庫(kù)的根路徑
在客戶端使用 TortoiseSVN 可以通過(guò)如下形式訪問(wèn)服務(wù)器:
svn://服務(wù)器IP/data
版本庫(kù)的 conf 子文件夾下的配置文件說(shuō)明:
1.svnserve.conf
[general]
# anon-access = read #匿名用戶的權(quán)限
# auth-access = write #認(rèn)證用戶的權(quán)限
password-db = passwd #指定密碼文件
# authz-db = authz #權(quán)限控制文件
# realm = My First Repository
2.passwd文件的配置及說(shuō)明
[users]
# harry = harryssecret
# sally = sallyssecret
等號(hào)前面是用戶名,后面是密碼,密碼是明文的。更改svnserve.conf的時(shí)候,需要重啟SVN,更改authz,passwd文件,不需重啟。
3.authz文件的配置及說(shuō)明
[groups]
# harry_and_sally = harry,sally
groups定義的變量就是組名,1個(gè)用戶組可以包含1個(gè)或者多個(gè)用戶,逗號(hào)分隔,上例中harry_and_sally就是一個(gè)組
版本庫(kù)目錄格式:
[<版本庫(kù)>:/項(xiàng)目/目錄]
@<用戶組名> = <權(quán)限>
<用戶名> = <權(quán)限>
其中,方框號(hào)內(nèi)部可以有多種寫法:
[/],表示根目錄及以下,根目錄是svnserve啟動(dòng)時(shí)指定的,這里配置的是/webapp/svndata/,[/]就是表示對(duì)全部版本庫(kù)設(shè)置權(quán)限。
[data:/],表示對(duì)版本庫(kù)data設(shè)置權(quán)限
[date:/test],表示對(duì)版本庫(kù)data中的test項(xiàng)目設(shè)置權(quán)限
[data:/test/aaa],表示對(duì)版本庫(kù)data中test項(xiàng)目的aaa目錄設(shè)置權(quán)限
權(quán)限主體可以是用戶組、用戶或*,用戶組在前面加@,*表示全部用戶。
權(quán)限可以是w、r、rw、和空,空表示沒有任何權(quán)限。
authz中每個(gè)參數(shù)都要頂格寫,開頭不能有空格。
[/]
Kevin = rw
@harry_and_sally = r
注意:權(quán)限配置文件中出現(xiàn)的用戶名必須已在用戶配置文件中定義
設(shè)置passwd,authz文件權(quán)限
chmod 600 conf/{passwd,authz} #非必須,最好改下
4. Checkout注意事項(xiàng)
在windows上安裝客戶端TortoiseSVN之后,checkout版本的時(shí)候有個(gè)地方需要注意。
例如如果創(chuàng)建項(xiàng)目版本庫(kù)的命令為 # svnadmin create /svn/testversion1/
啟動(dòng)svn服務(wù)的命令 # svnserve -d -r /svn/
那么在客戶端檢出該版本庫(kù)的URL為:svn://xx.xx.xx.xx/testversion1/
如果啟動(dòng)svn服務(wù)的命令為 svnserve -d -r /svn/testversion1/,那么檢出的URL則為:svn://xx.xx.xx.xx/
七、與 Apache Http Server 的結(jié)合
通過(guò) Http 協(xié)議訪問(wèn)版本庫(kù)是 Subversion 的亮點(diǎn)之一。使用 Http 協(xié)議意味著只需要打開瀏覽器,輸入 URL 即可輕松的瀏覽整個(gè)版本庫(kù)。靈活通常帶來(lái)復(fù)雜性,Http 方式相對(duì)于 svnserve 方式來(lái)說(shuō)需要更多的配置。
配置apache
為了使 Subversion 與 dav 模塊通信,需要安裝 mod_dav_svn 插件,在Apache的 httpd.conf 文件中加入以下內(nèi)容:
LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so
<Location /data>
DAV svn
SVNPath /webapp/svndata/data
</Location>
重啟apache
/etc/init.d/httpd restart
瀏覽器輸入“http://服務(wù)器IP/data”
顯示:
data- Revision 1: /
這表示mod_dav_svn模塊工作正常,如果無(wú)法顯示,請(qǐng)檢查防火墻和SELinx的配置
可以先臨時(shí)關(guān)閉防火墻和SELinx(生產(chǎn)環(huán)境請(qǐng)按實(shí)際情況配置)
iptables –F
setenforce 0
可以使用 SVNParentPath 代替SVNPath,
SVNParentPath /webapp/svndate表示/webapp/svndata下的每個(gè)子目錄都是一個(gè)版本庫(kù),可以通過(guò):
http://服務(wù)器IP/svndata/data1
http://服務(wù)器IP/svndata/data2
|
|
|
http://服務(wù)器IP/svndata/data10
來(lái)訪問(wèn)。
權(quán)限設(shè)置:
1. Apache基本權(quán)限設(shè)置
最簡(jiǎn)單的客戶端認(rèn)證方式是通過(guò)HTTP基本認(rèn)證機(jī)制,簡(jiǎn)單的使用用戶名和密碼來(lái)驗(yàn)證一個(gè)用戶所自稱的身份,Apache提供了一個(gè)htpasswd工具來(lái)管理可接受的用戶名和密碼 。
cd /webapp
apache2/bin/htpasswd -c svndata/passwd user1
-c 表示新建一個(gè)密碼文件
vi apache2/conf/httpd.conf
在 Location 標(biāo)簽中加入以下內(nèi)容:
AuthType Basic
AuthName "svn data"
AuthUserFile /webapp/svndata/passwd
Require valid-user
保存后,重啟apache后即可
/etc/init.d/httpd restart
可以把"Require valid-user" 替換為"Require user harry sally",表示只有harry和sally可以訪問(wèn)該版本庫(kù)。
2. 用 mod_authz_svn 進(jìn)行目錄訪問(wèn)控制
使用mod_authz_svn模塊可以更加細(xì)致的設(shè)置訪問(wèn)權(quán)限。
vi apache2/conf/httpd.conf
查看mod_auth_svn 模塊是否加載
LoadModule authz_svn_modulemodules/mod_authz_svn.so
增加以下內(nèi)容
<Location /svndata>
DAV svn
SVNParentPath /webapp/svndata
AuthType Basic
AuthName "svn data"
AuthUserFile /webapp/svndata/passwd
AuthzSVNAccessFile /webapp/svndata/accesspolicy
Satisfy Any
Require valid-user
</Location>
AuthzSVNAccessFile 指向的是 authz 的策略文件,詳細(xì)的權(quán)限控制可以在這個(gè)策略文件中指定,如:
#兩個(gè)分組:group1,group2 [groups] group1 = user1, user2 group2 = user3, user4 #在根目錄下指定所有的用戶有讀權(quán)限 [/] * = r #追加group1組用戶有讀寫權(quán)限 @group1= rw #在data下給予用戶user1讀寫權(quán)限 [data:/] user1 = rw #禁止所有用戶訪問(wèn) /private 目錄 [/private] * = #給group2組用戶讀權(quán)限 @group2= r
如果要對(duì)具體每個(gè)版本庫(kù)配置,用如下的語(yǔ)法:
[groups] project1 = user1, user2 project2 = user3 ,user4 [data1:/] * = r @ project1 = rw [data2:/] * = r @ project2 = rw
這樣項(xiàng)目1的project1組只能對(duì) data1 版本庫(kù)下的文件具有寫權(quán)限而不能修改版本庫(kù)data2,同樣項(xiàng)目2的project2組也不能修改data1 版本庫(kù)的文件。
修改完配置后記得保存重啟apache:
/etc/init.d/httpd restart
另外還要修改對(duì)應(yīng)目錄的權(quán)限,讓它們支持apache運(yùn)行帳號(hào)可寫
chown -R daemon:daemon /webapp/svndata/data
這個(gè)帳號(hào)可在apache配置文件httpd.conf中設(shè)置:
User daemon
Group daemon
八、測(cè)試
SVN服務(wù)器安裝配置完畢,在客戶端使用TortoiseSVN進(jìn)行測(cè)試,結(jié)果如下:
根據(jù)提示輸入用戶名和密碼
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。