Linux 搭建SVN 服務器

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, 衝突,需要手動確認。

 

客戶端軟件:

       (1)Windows下常用的客戶端軟件常用TortoiseSVN。它是一個免費的開源的客戶端。 下載地址:http://tortoisesvn.net/downloads.html

       (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)。 所以這些操作只會花費很小, 而且是固定的時間。

 

8Hackability

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

 

 

.  SVN 服務器搭建

 

2.1 使用yum 安裝SVN

 

[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

--> Running transaction check

---> Package subversion.i386 0:1.4.2-4.el5_3.1 set to be updated

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

 

1svnserve.conf  svn服務配置文件下。

2passwd 用戶名口令文件。

3authz 權限配置文件。 

 

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:/]

@devteam1 = rw

@devteam2 = rw

trevor = rw

 

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

[/trunk/doc]

@docs = rw

 

# 培訓人員可以完全訪問培訓版本庫

[TrainingRepos:/]

@training = rw

 

下面我們來配置我們的authz文件:

[root@singledb conf]# cat authz

[groups]

admin = dave

dev=tianlesoftware

[davesvn:/]

@admin = rw

@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):

 

 

 

 

 

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

Blog: http://blog.csdn.net/tianlesoftware

發佈了59 篇原創文章 · 獲贊 7 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章