天天看點

Linux 搭建SVN 伺服器

一. SVN 簡介

       Subversion(SVN) 是一個開源的版本控制系統, 也就是說 Subversion 管理着随時間改變的資料。 這些資料放置在一個中央資料檔案庫 (repository) 中。 這個檔案庫很像一個普通的檔案伺服器, 不過它會記住每一次檔案的變動。 這樣你就可以把檔案恢複到舊的版本, 或是浏覽檔案的變動曆史。

SVN中的一些概念 :

(1). repository(源代碼庫)

       源代碼統一存放的地方

(2). Checkout (提取)

       當你手上沒有源代碼的時候,你需要從repository checkout一份

(3). Commit (送出)

       當你已經修改了代碼,你就需要Commit到repository

(4). Update (更新)

       當你已經Checkout了一份源代碼, Update一下你就可以和Repository上的源代碼同步,你手上的代碼就會有最新的變更 

       日常開發過程其實就是這樣的(假設你已經Checkout并且已經工作了幾天):Update(獲得最新的代碼) -->作出自己的修改并調試成功 --> Commit(大家就可以看到你的修改了) 。

       如果兩個程式員同時修改了同一個檔案呢,  SVN可以合并這兩個程式員的改動,實際上SVN管理源代碼是以行為機關的,就是說兩個程式員隻要不是修改了同一行程式,SVN都會自動合并兩種修改。如果是同一行,SVN會提示檔案Confict, 沖突,需要手動确認。

用戶端軟體:

       (2)向Myeclipse,也有一些SVN的插件。

Subversion提供以下主要功能:

(1)目錄版本控制

       CVS 隻能跟蹤單個檔案的曆史, 不過 Subversion 實作了一個 “虛拟” 的版本控管檔案系統, 能夠依時間跟蹤整個目錄的變動。 目錄和檔案都能進行版本控制。

(2)真實的版本曆史

       自從CVS限制了檔案的版本記錄,CVS并不支援那些可能發生在檔案上,但會影響所在目錄内容的操作,如同複制和重命名。除此之外,在CVS裡你不能用擁有同樣名字但是沒有繼承老版本曆史或者根本沒有關系的檔案替換一個已經納入系統的檔案。在Subversion中,你可以增加(add)、删除(delete)、複制(copy)和重命名(rename),無論是檔案還是目錄。所有的新加的檔案都從一個新的、幹淨的版本開始。

(3)自動送出

       一個送出動作,不是全部更新到了檔案庫中,就是完全不更新。這允許開發人員以邏輯區間建立并送出變動,以防止當部分送出成功時出現的問題。

(4)納入版本控管的中繼資料

       每一個檔案與目錄都附有一組屬性關鍵字并和屬性值相關聯。你可以建立, 并儲存任何你想要的Key/Value對。 屬性是随着時間來作版本控管的, 就像檔案內容一樣。

(5)選擇不同的網絡層

       Subversion 有抽象的檔案庫存取概念, 可以讓人很容易地實作新的網絡機制。 Subversion 可以作為一個擴充子產品嵌入到Apache HTTP 伺服器中。這個為Subversion提供了非常先進的穩定性和協同工作能力,除此之外還提供了許多重要功能: 舉例來說, 有身份認證, 授權, 線上壓縮, 以及檔案庫浏覽等等。還有一個輕量級的獨立Subversion伺服器, 使用的是自定義的通信協定, 可以很容易地通過 ssh 以tunnel 方式使用。

(6)一緻的資料處理方式

       Subversion 使用二進制差異算法來異表示檔案的差異, 它對文字(人類可了解的)與二進制檔案(人類無法了解的) 兩類的檔案都一視同仁。 這兩類的檔案都同樣地以壓縮形式儲存在檔案庫中, 而且檔案差異是以兩個方向在網絡上傳輸的。

(7)有效的分支(branch)與标簽(tag)

       在分支與标簽上的消耗并不必一定要與項目大小成正比。 Subversion 建立分支與标簽的方法, 就隻是複制該項目, 使用的方法就類似于硬連接配接(hard-link)。 是以這些操作隻會花費很小, 而且是固定的時間。

(8)Hackability

       Subversion沒有任何的曆史包袱; 它主要是一群共用的 C 程式庫, 具有定義完善的API。這使得 Subversion 便于維護, 并且可被其它應用程式與程式語言使用。

二.  SVN 伺服器搭建

2.1 使用yum 安裝SVN包

關于YUM 伺服器的配置參考:

Linux 搭建 YUM 伺服器

<a href="http://blog.csdn.net/tianlesoftware/archive/2011/01/03/6113902.aspx">http://blog.csdn.net/tianlesoftware/archive/2011/01/03/6113902.aspx</a>

[root@singledb ~]# yum install -y subversion

Loaded plugins: rhnplugin, security

This system is not registered with RHN.

RHN support will be disabled.

Setting up Install Process

Resolving Dependencies

--&gt; Running transaction check

---&gt; Package subversion.i386 0:1.4.2-4.el5_3.1 set to be updated

--&gt; Finished Dependency Resolution

Dependencies Resolved

====================================================================================================

 Package                Arch             Version                        Repository             Size

Installing:

 subversion             i386             1.4.2-4.el5_3.1                rhel-base             2.3 M

Transaction Summary

Install      1 Package(s)        

Update       0 Package(s)        

Remove       0 Package(s)        

Total download size: 2.3 M

Downloading Packages:

subversion-1.4.2-4.el5_3.1.i386.rpm                                          | 2.3 MB     00:00    

Running rpm_check_debug

Running Transaction Test

Finished Transaction Test

Transaction Test Succeeded

Running Transaction

  Installing     : subversion                                                                   1/1

Installed:

  subversion.i386 0:1.4.2-4.el5_3.1                                                                

Complete!

[root@singledb ~]#

驗證安裝版本:

[root@singledb ~]# svnserve --version

svnserve, version 1.4.2 (r22196)

   compiled Aug  5 2009, 19:03:56

Copyright (C) 2000-2006 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 back-end (FS) modules are available:

* fs_base : Module for working with a Berkeley DB repository.

* fs_fs : Module for working with a plain file (FSFS) repository.

2.2 建立SVN 版本庫

[root@singledb ~]# mkdir /u02/svn

[root@singledb ~]# svnadmin create /u02/svn/davesvn  --davesvn為版本庫名稱

2.3  SVN 配置

建立版本庫後,在這個目錄下會生成3個配置檔案:

[root@singledb conf]# pwd

/u02/svn/davesvn/conf

[root@singledb conf]# ls

authz  passwd  svnserve.conf

(1)svnserve.conf:  svn服務配置檔案下。

(2)passwd: 使用者名密碼檔案。

(3)authz: 權限配置檔案。 

svnserve.conf 檔案, 該檔案配置項分為以下5項:

       anon-access: 控制非鑒權使用者通路版本庫的權限。

       auth-access:  控制鑒權使用者通路版本庫的權限。

       password-db: 指定使用者名密碼檔案名。

       authz-db:指定權限配置檔案名,通過該檔案可以實作以路徑為基礎的通路控制。

       realm:指定版本庫的認證域,即在登入時提示的認證域名稱。若兩個版本庫的認證域相同,建議使用相同的使用者名密碼資料檔案

Passwd 檔案 :

       我們在svnserve.conf檔案裡啟用這個檔案。然後配置如下:

[root@singledb conf]# cat passwd

### This file is an example password file for svnserve.

### Its format is similar to that of svnserve.conf. As shown in the

### example below it contains one section labelled [users].

### The name and password for each user follow, one account per line.

[users]

# harry = harryssecret

# sally = sallyssecret

dave = davepwd

tianlesoftware = tianlesoftwarepwd

authz  檔案 :

在網上找到一個很好的配置例子:

[groups]

admin = john, kate

devteam1 = john, rachel, sally

devteam2 = kate, peter, mark

docs = bob, jane, mike

training = zak

--這裡把不同使用者放到不同的組裡面,下面在設定目錄通路權限的時候,用目錄來操作就可以了。

# 為所有庫指定預設通路規則

# 所有人可以讀,管理者可以寫,危險分子沒有任何權限

[/]  --對應我測試裡的:/u02/svn 目錄

* = r

@admin = rw

dangerman =

# 允許開發人員可以完全通路他們的項目版本庫

[proj1:/]

@devteam1 = rw

[proj2:/]

@devteam2 = rw

[bigproj:/]

trevor = rw

# 文檔編寫人員對所有的docs目錄有寫權限

[/trunk/doc]

@docs = rw

# 教育訓練人員可以完全通路教育訓練版本庫

[TrainingRepos:/]

@training = rw

下面我們來配置我們的authz檔案:

[root@singledb conf]# cat authz

admin = dave

dev=tianlesoftware

[davesvn:/]

@dev = rw

[root@singledb conf]#

2.4 啟動和停止SVN服務

(1)啟動SVN服務:

[root@singledb conf]# svnserve -d -r /u02/svn

       -d表示背景運作

       -r 指定根目錄是 /u02/svn

[root@singledb conf]# ps -ef | grep svn

root      4592     1  0 18:04 ?        00:00:00 svnserve -d -r /u02/svn

root      4594  3709  0 18:04 pts/1    00:00:00 grep svn

(2)停止SVN服務:

ps -aux |grep svn

kill -9 程序殺掉

三. 用戶端連接配接SVN 伺服器

3.1 安裝TortoiseSVN 用戶端

       下載下傳位址在第一節已說明。

3.2 找到自己項目的目錄,右擊,進行SVN 操作

(1)建立測試目錄svn,進入後右鍵,點checkout:

SVN 伺服器的IP位址和版本庫名稱。

建立個檔案svn.txt. 把這個檔案上傳到SVN伺服器(add):

------------------------------------------------------------------------------

繼續閱讀