天天看點

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

Subversion(SVN)是一個開源的,跨平台的版本控制系統,由CollabNet公司成立于2000年;Subversion作為新一代的版本管理系統,以其目錄版本化、原子送出、版本化的中繼資料、更加有效的分支和标簽等特性,至今已被衆多的網際網路企業使用來管理網站、論壇的代碼檔案;Subversion最獨特的地方,便是可以通過Apache的擴充子產品與Apache的HTTP服務相結合,實作,其次使用者還可以通過HTTP協定去通路版本庫,還可以通過SSL協定傳輸加密,保證資料的安全性;Subversion是Apache軟體基金會的發展的一個項目,并且也是一個豐富的開發人員和使用者社群的一部分。

Subversion存儲版本資料方式2種:(一種安全型表類型)和FSFS(一種不需要資料庫的)。因為BDB方式在伺服器中斷時,有可能鎖住資料,是以還是FSFS方式更安全一點;那麼在建立Subversion版本控制倉庫的時候,可以指定存儲版本資料為FSFS方式;

伺服器名稱

系統

CPU架構

核心

IP位址

角色

storage

CentOS 6.3

x86_64

2.6.32-279.el6.x86_64

10.16.10.31

SVN伺服器

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

[root@storage ~]#yum install subversion

[root@ubuntu ~]#dpkg -l subversion

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

1)svn

指令行用戶端程式;

2)svnversion

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

3)svnlook

伺服器端直接檢視Svbversion版本庫的工具;

4)svnadmin

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

5)svndumpfilter

過濾Subversion版本庫轉存資料流的工具;

6)mod_dav_svn

Apache HTTP伺服器的一個子產品,使版本庫可以通過網絡通路;

7)svnserve

伺服器端程式,用來啟動SVN服務的守護程序;

8)svnsync

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

##備注

目前Subversion版本為1、6,預設版本資料存儲方式為FSFS;從顯示的結果上,我們還可以知道Subversion支援基于http,https協定通路版本庫,支援本地、遠端導入項目與SASL的驗證方式;

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

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

##提示:

自Subversion1、1引入了基于檔案系統的“fsfs”,而且在Subversion1、2之後變成預設選項,如果你使用的Subversion是1、2以後的版本,建立版本庫時則可省略參數“- -fs-type fsfs”;如果你想使用BDB後端來代替fsfs,那麼在建立你的版本庫時就需要指定“—fs-type bdb”;

關于兩種版本庫資料儲存的優缺點可以參考

#值得恭喜你的是,一個新的版本庫已經被建立,現在你可以執行ll指令檢視一下版本庫的結構;

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

##提示

conf目錄下存放了版本庫的配置檔案,以及使用者驗證檔案和通路權限控制檔案,檔案本身的注釋說明十分詳細,讀者可以根據注釋自行配置;db 目錄下存放着 Subversion 所要管理的所有受版本控制的資料,不同的存儲方式(Berkeley DB 或者FSFS)下有着不同的目錄結構,不過我們一般不用直接修改和檢視這個目錄下的内容,Subversion 的指令可以安全的操作這個目錄;另外,hooks 目錄存放着鈎子腳本及其模版(一種版本庫事件觸發程式),locks 目錄存放着Subversion 版本庫鎖定資料,format 檔案記錄了版本庫的布局版本号。

#項目是需要自己去建立的,以後用來存儲使用者送出(commit)的資料,以下是目錄樹結構,請自行建立;

[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。

[root@storage ~]#

1 rootMay 14 02:52 ./

1 rootMay 14 02:52 branches/

1 rootMay 14 02:52 tags/

1 rootMay 14 02:52 trunk/

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

根據顯示的資訊,我們可以知道版本庫的路徑是repos,URL的本地路徑為,版本的所有者,UUID,版本号,以及上次變更的使用者,具體時間等;

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

使用者組= 使用者,使用者

admin = zhangsan,hechunyang

2)[repos:/] 定義版本庫的格式與通路權限,“repos”表示版本庫,“:/”表示版本庫下的所有項目,關于權限的配置設定:w(寫),r(讀),“”(空)則表示不配置設定權限給使用者或使用者組,如下所示:

[repos:/]

@admin = rw

liutong = r

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

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

* = 表示全部的使用者,權限為空,即沒有任何權限;

passwd檔案本身注釋說明十分的詳細,它告訴你如何去定義通路版本庫的使用者名以及密碼,也給了示例,格式為:使用者名 = 密碼;我們可以看到密碼是以明文的方式出現,顯然十分的不安全,通過HTTP,HTTPS,SSL可以實作對使用者密碼md5加密,網據傳輸資料加密,還可以通過web浏覽器通路SVN伺服器内置的版本庫。

a)svn://10.16.10.31/repos,10.16.10.31表示SVN伺服器的IP位址,repos為SVN的版本庫;

b)F:\storage,表示把版本庫repos中的項目簽入本地磁盤F下storage目錄;

伺服器端配置沒有錯誤的話,輸入passwd檔案中指定的使用者名與密碼,便可把項目簽出至本地;

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

研發人員在branches(主線)目錄建立hello.txt檔案,右鍵選擇add添加檔案,然後右鍵commit送出資料;

[root@webserver2~]# mkdir /storage

[root@webserver2~]# yum install subversion

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

我們已經把開發組成員送出的資料,成功更新至測試伺服器的/storage目錄下,其中參數co(checkout)簽出資料,--username=zhangsan表示以張三使用者的身份驗證;

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

本文出自 “” 部落格,請務必保留此出處

繼續閱讀