構建企業代碼管理系統之SVN服務(基礎篇)

一、What‘s is a subversion

SubversionSVN)是一個開源的,跨平臺的版本控制系統,由CollabNet公司成立於2000年;Subversion作爲新一代的版本管理系統,以其目錄版本化、原子提交、版本化的元數據、更加有效的分支和標籤等特性,至今已被衆多的互聯網企業使用來管理網站、論壇的代碼文件;Subversion最獨特的地方,便是可以通過Apache的擴展模塊與ApacheHTTP服務相結合,實現更安全的特性與管理,其次用戶還可以通過HTTP協議去訪問版本庫,還可以通過SSL協議傳輸加密,保證數據的安全性;SubversionApache軟件基金會的發展的一個項目,並且也是一個豐富的開發人員和用戶社區的一部分。


Subversion存儲版本數據方式2種:BDB(一種事務安全型表類型)FSFS(一種不需要數據庫的存儲系統)。因爲BDB方式在服務器中斷時,有可能鎖住數據,所以還是FSFS方式更安全一點;那麼在創建Subversion版本控制倉庫的時候,可以指定存儲版本數據爲FSFS方式;

二、Svbsersion系統邏輯架構圖

wKioL1N0nPqSMG5hAAHpADesTQo983.jpg

三、安裝與配置

31 服務器資源列表

服務器名稱

系統

CPU架構

內核

IP地址

角色

storage

CentOS 6.3

x86_64

2.6.32-279.el6.x86_64

10.16.10.31

SVN服務器


32 安裝

321 CentOS系統下安裝

[root@storage ~]#rpm -qa | grep subversion

[root@storage ~]#yum install subversion


wKiom1N0nXOzrb2JAAHWFM8Gopw668.jpg

322 Ubuntu系統下安裝

[root@ubuntu ~]#dpkg -l subversion

root@host-93:~#apt-get install subversion

wKioL1N0nVmjCcvpAAJOa5YsctI270.jpg

323 關於Subversion 組件

1svn

命令行客戶端程序;


2svnversion

顯示工作拷貝的狀態,即當前項目修訂的版本;


3svnlook

服務器端直接查看Svbversion版本庫的工具;


4svnadmin

服務器端建立、調整和修復Subversion版本庫的工具;


5svndumpfilter

過濾Subversion版本庫轉存數據流的工具;


6mod_dav_svn

Apache HTTP服務器的一個模塊,使版本庫可以通過網絡訪問;


7svnserve

服務器端程序,用來啓動SVN服務的守護進程;


8svnsync

可以通過網絡增量鏡像版本庫的程序;

324 驗證安裝結果

[root@storage ~]# svn --version
svn, version 1.6.11 (r934486)
   compiled Jun 23 2012, 00:44:03
Copyright (C) 2000-2009 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).
The following repository access (RA) modules are available:
* ra_neon : Module for accessing a repository via WebDAV protocol using Neon.
  - handles 'http' scheme
  - handles 'https' scheme
* ra_svn : Module for accessing a repository using the svn network protocol.
  - with Cyrus SASL authentication
  - handles 'svn' scheme
* ra_local : Module for accessing a repository on local disk.
  - handles 'file' scheme


##備註

當前Subversion版本爲16,默認版本數據存儲方式爲FSFS;從顯示的結果上,我們還可以知道Subversion支持基於httphttps協議訪問版本庫,支持本地、遠程導入項目與SASL的驗證方式;

33 創建版本庫

[root@storage ~]#mkdir /data/svn –p

[root@storage ~]#svnadmin create --fs-type fsfs /data/svn/repos

##提示:

Subversion11引入了基於文件系統的“fsfs”,而且在Subversion12之後變成默認選項,如果你使用的Subversion12以後的版本,創建版本庫時則可省略參數“- -fs-type fsfs”;如果你想使用BDB後端來代替fsfs,那麼在創建你的版本庫時就需要指定“—fs-type bdb”

關於兩種版本庫數據儲存的優缺點可以參考

331 版本庫數據儲存對照表

wKiom1N0vEmRx3TaAANfW7h7SjY998.jpg


#值得恭喜你的是,一個新的版本庫已經被創建,現在你可以執行ll命令查看一下版本庫的結構;

[root@storage ~]#ll /data/svn/repos/


wKiom1N0nfCzjAjwAAEjc3mbDIk074.jpg

##提示

conf目錄下存放了版本庫的配置文件,以及用戶驗證文件和訪問權限控制文件,文件本身的註釋說明十分詳細,讀者可以根據註釋自行配置;db 目錄下存放着 Subversion 所要管理的所有受版本控制的數據,不同的存儲方式(Berkeley DB 或者FSFS)下有着不同的目錄結構,不過我們一般不用直接修改和查看這個目錄下的內容,Subversion 的命令可以安全的操作這個目錄;另外,hooks 目錄存放着鉤子腳本及其模版(一種版本庫事件觸發程序),locks 目錄存放着Subversion 版本庫鎖定數據,format 文件記錄了版本庫的佈局版本號。

34 創建項目

#項目是需要自己去創建的,以後用來存儲用戶提交(commit)的數據,以下是目錄樹結構,請自行創建;

wKiom1N0nh_SU9wnAACHBtPSbmw257.jpg

341 導入項目

[root@storageconf]# svn import /storage/bbs/ file:///data/svn/repos/ -m 'forum storage '

Adding/storage/bbs/trunk

Adding/storage/bbs/branches

Adding/storage/bbs/tags


Committed revision1.


##備註

import關鍵字告訴subversion,我們想做的是把一些文件導入到項目倉庫之中,參數‘-m‘使得你可以給這次的導入操作關聯一條信息;你可能注意到file:///選項,它告訴Subversion到本地文件系統中尋找項目倉庫,然後導入到項目/storage/bbs

342 查詢導入結果

[root@storage ~]# svnlist --verbose file:///data/svn/repos/

1 rootMay 14 02:52 ./

1 rootMay 14 02:52 branches/

1 rootMay 14 02:52 tags/

1 rootMay 14 02:52 trunk/

##備註

此時,項目已經成功導入到版本庫中,也許你會有疑問,trunktagsbranches目錄的作用是什麼,分別用來存儲什麼數據,我想說的是大部分的項目都會有一條主線開發(branches),而且大部分的工作都是在那裏完成的,其次項目還可能有發佈分支(trunk),存放的是已經完成的代碼,是發佈上線使用後存放在那裏的,不會經常被改動,除了需要修正bug,添加新功能的時候。最後,項目生命週期中的重大事件經常需要使用標籤(tags)來記錄,通常一個標籤會包含代碼發佈的版本號(revision)。


343 查詢版本庫詳細信息

[root@storage ~]# svn info file:///data/svn/repos/
Path: repos
URL: file:///data/svn/repos
Repository Root: file:///data/svn/repos
Repository UUID: 80e85530-0b77-4a69-94af-6c50810b2a5e
Revision: 1
Node Kind: directory
Last Changed Author: root
Last Changed Rev: 1
Last Changed Date: 2014-05-14 02:52:45 -0700 (Wed, 14 May 2014)

##備註

根據顯示的信息,我們可以知道版本庫的路徑是reposURL的本地路徑爲file:///data/svn/repos,版本的所有者,UUID,版本號,以及上次變更的用戶,具體時間等;

35 配置

351svnserve.conf文件,如下所示:

[root@storage ~]# cd /data/svn/repos/conf/
[root@storage conf]# vim svnserve.conf
anon-access = none                              #指定匿名用戶是否有權限訪問版本庫,無(none);
auth-access = write                             #指定驗證用戶是否有權限訪問版本庫,寫(write);
password-db = passwd                            #指定用戶的驗證文件
authz-db = authz                                    #指定用戶訪問權限控制文件

352authz文件,如下所示:

[aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average
[groups]
admin = zhangsan,hechunyang
test = liutong,zhangbo
[repos:/]
@admin = rw
@test = r

##備註

1)Groups 定義用戶組,一個用戶組可以包含一個或多個用戶,用戶之間用逗號分隔,如下所示:

用戶組= 用戶,用戶

admin = zhangsanhechunyang


2[repos:/] 定義版本庫的格式與訪問權限,“repos”表示版本庫,“:/”表示版本庫下的所有項目,關於權限的分配:w(寫),r(讀),“”(空)則表示不分配權限給用戶或用戶組,如下所示:

[repos:/]

@admin = rw

liutong = r


##提示

@admin= rw表示定義用戶組的權限,用戶組以“@”開頭,授予其組中成員可讀可寫的權限;

Liutong= r表示定義用戶的權限,授予可讀權限;

* = 表示全部的用戶,權限爲空,即沒有任何權限;

353 passwd文件,如下所示

[users]
zhangsan = 123456
liutong = 123456
hechunyang = 123qwe
zhangbo = 123456

##提示

passwd文件本身註釋說明十分的詳細,它告訴你如何去定義訪問版本庫的用戶名以及密碼,也給了示例,格式爲:用戶名 = 密碼;我們可以看到密碼是以明文的方式出現,顯然十分的不安全,通過HTTPHTTPSSSL可以實現對用戶密碼md5加密,網據傳輸數據加密,還可以通過web瀏覽器訪問SVN服務器內置的版本庫。

354 啓動SVN服務進程

[root@storage ~]# svnserve -d -r /data/svn/       
[root@storage ~]# netstat -lntp | grep 3690
tcp        0      0 0.0.0.0:3690                0.0.0.0:*                   LISTEN      47494/svnserve
[root@storage ~]# ps -ef | grep svnserve
root     47494     1  0 May14 ?        00:00:00 svnserve -d -r /data/svn/


四、客戶端安裝與測試

41 下載TortoiseSVN

http://jaist.dl.sourceforge.net/project/tortoisesvn/1.8.4/Application/TortoiseSVN-1.8.4.24972-x64-svn-1.8.5.msi

42 安裝TortoiseSVN

wKioL1N0nwmg4KZsAAG_9Y10aH0334.jpgwKioL1N0nxqi_TdwAAEyDsIusvU826.jpg

43 簽出SVN項目

wKioL1N0n03DlUj1AAFcfT_NLYw554.jpg

##提示

asvn://10.16.10.31/repos10.16.10.31表示SVN服務器的IP地址,reposSVN的版本庫;

bF:\storage,表示把版本庫repos中的項目簽入本地磁盤Fstorage目錄;

wKiom1N0n52DToxBAADU3u7cINI318.jpg

##提示

服務器端配置沒有錯誤的話,輸入passwd文件中指定的用戶名與密碼,便可把項目簽出至本地;

wKioL1N0n4aj_OyLAAGVp42DZ0I870.jpg

##提示

可以看到bbs項目被簽出到本地的F盤的storage目錄下,後期開發組的成員會在相應的目錄下完成所有的開發工作;

44 測試

wKioL1N0n6bjzx6eAAJDkurFSMc317.jpg

wKiom1N0n9HgJQSfAAFU2tQsyJ4983.jpg

##提示

研發人員在branches(主線)目錄創建hello.txt文件,右鍵選擇add添加文件,然後右鍵commit提交數據;

45 SVN更新

[root@webserver2~]# mkdir /storage

[root@webserver2~]# yum install subversion

[root@webserver2~]# svn co svn://10.16.10.31/repos /storage/ --username=zhangsan

wKioL1N0n8-hA6XYAALjWdt3mpA370.jpg

##提示

我們已經把開發組成員提交的數據,成功更新至測試服務器的/storage目錄下,其中參數cocheckout)簽出數據,--username=zhangsan表示以張三用戶的身份驗證;


在寫這篇文檔之前,我瀏覽許多朋友的博客,看過Subversion相關的書籍,並結合實際工作中的經驗寫下這篇文檔,希望能夠幫助到需要的朋友。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章