一. SVN 簡介html
Subversion(SVN) 是一個開源的版本控制系統, 也就是說 Subversion 管理着隨時間改變的數據。 這些數據放置在一箇中央資料檔案庫 (repository) 中。 這個檔案庫很像一個普通的文件服務器, 不過它會記住每一次文件的變更。 這樣你就能夠把檔案恢復到舊的版本, 或是瀏覽文件的變更歷史。程序員
SVN中的一些概念 :算法
(1). repository(源代碼庫)服務器
源代碼統一存放的地方網絡
(2). Checkout (提取)eclipse
當你手上沒有源代碼的時候,你須要從repository checkout一份ssh
(3). Commit (提交)svn
當你已經修改了代碼,你就須要Commit到repository測試
(4). Update (更新).net
當你已經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)。因此這些操做只會花費很小, 並且是固定的時間。
(8)Hackability
Subversion沒有任何的歷史包袱; 它主要是一羣共用的 C 程序庫, 具備定義完善的API。這使得 Subversion 便於維護, 而且可被其它應用程序與程序語言使用。
二. SVN 服務器搭建
2.1 使用yum 安裝SVN包
關於YUM 服務器的配置參考:
Linux 搭建 YUM 服務器
http://blog.csdn.net/tianlesoftware/archive/2011/01/03/6113902.aspx
[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
(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:/]
@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):
-------------------------------------------------------------------------