Linux搭建SVN server
一. SVN 簡單介紹
Subversion(SVN) 是一個開源的版本號控制系統, 也就是說 Subversion 管理著隨時間改變的數據。 這些數據放置在一個中央資料檔案庫 (repository) 中。 這個檔案庫非常像一個普通的文件server, 只是它會記住每一次文件的變動。 這樣你就能夠把檔案恢復到舊的版本號, 或是瀏覽文件的變動歷史。
SVN中的一些概念 :
(1). repository(源碼庫)
源碼統一存放的地方
(2). Checkout (提取)
當你手上沒有源碼的時候,你須要從repository checkout一份
(3). Commit (提交)
當你已經改動了代碼,你就須要Commit到repository
(4). Update (更新)
當你已經Checkout了一份源碼, Update一下你就能夠和Repository上的源碼同步,你手上的代碼就會有最新的變更
日常開發過程事實上就是這種(如果你已經Checkout而且已經工作了幾天):Update(獲得最新的代碼) -->作出自己的改動并調試成功 --> Commit(大家就能夠看到你的改動了) 。
假設兩個程序猿同一時候改動了同一個文件呢, SVN能夠合并這兩個程序猿的改動,實際上SVN管理源碼是以行為單位的,就是說兩個程序猿僅僅要不是改動了同一行程序,SVN都會自己主動合并兩種改動。假設是同一行,SVN會提示文件Confict, 沖突,須要手動確認。
client軟件:
(1)Windows下經常使用的client軟件經常使用TortoiseSVN。它是一個免費的開源的client。 下載地址:http://tortoisesvn.net/downloads.html
(2)向Myeclipse,也有一些SVN的插件。
Subversion提供下面主要功能:
(1)文件夾版本號控制
CVS 僅僅能跟蹤單個文件的歷史, 只是 Subversion 實作了一個 “虛擬” 的版本號控管文件系統, 可以依時間跟蹤整個文件夾的變動。 文件夾和文件都能進行版本號控制。
(2)真實的版本號歷史
自從CVS限制了文件的版本號記錄,CVS并不支持那些可能發生在文件上,但會影響所在文件夾內容的操作,如同復制和重命名。除此之外,在CVS里你不能用擁有相同名字可是沒有繼承老版本號歷史或者根本沒有關系的文件替換一個已經納入系統的文件。在Subversion中,你能夠添加(add)、刪除(delete)、復制(copy)和重命名(rename),不管是文件還是文件夾。全部的新加的文件都從一個新的、干凈的版本號開始。
(3)自己主動提交
一個提交動作,不是所有更新到了檔案庫中,就是全然不更新。這同意開發者以邏輯區間建立并提交變動,以防止當部分提交成功時出現的問題。
(4)納入版本號控管的元數據
每個文件與文件夾都附有一組屬性keyword并和屬性值相關聯。你能夠創建, 并儲存不論什么你想要的Key/Value對。 屬性是隨著時間來作版本號控管的, 就像文件內容一樣。
(5)選擇不同的網絡層
Subversion 有抽象的檔案庫存取概念, 能夠讓人非常easy地實作新的網絡機制。 Subversion 能夠作為一個擴展模塊嵌入到Apache HTTP server中。這個為Subversion提供了非常先進的穩定性和協同工作能力,除此之外還提供了很多重要功能: 舉例來說, 有身份認證, 授權, 在線壓縮, 以及文件庫瀏覽等等。另一個輕量級的獨立Subversionserver, 使用的是自己定義的通信協議, 能夠非常easy地通過 ssh 以 tunnel 方式使用。
(6)一致的數據處理方式
Subversion 使用二進制差異算法來異表示文件的差異, 它對文字(人類可理解的)與二進制文件(人類無法理解的) 兩類的文件都一視同仁。 這兩類的文件都相同地以壓縮形式儲存在檔案庫中, 并且文件差異是以兩個方向在網絡上傳輸的。
(7)有效的分支(branch)與標簽(tag)
在分支與標簽上的消耗并不必一定要與項目大小成正比。 Subversion 建立分支與標簽的方法, 就僅僅是復制該項目, 使用的方法就相似于硬連接(hard-link)。 所以這些操作僅僅會花費非常小, 并且是固定的時間。
(8)Hackability
Subversion沒有不論什么的歷史包袱; 它主要是一群共用的 C 程序庫, 具有定義完好的API。這使得 Subversion 便于維護, 而且可被其他應用程序與程序語言使用。
二. SVN server搭建
2.1 使用yum 安裝SVN包
關于YUM server的配置參考:
Linux 搭建 YUM server
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 |
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: username口令文件。
(3)authz: 權限配置文件。
svnserve.conf 文件, 該文件配置項分為下面5項:
anon-access: 控制非鑒權用戶訪問版本號庫的權限。
auth-access: 控制鑒權用戶訪問版本號庫的權限。
password-db: 指定username口令文件名稱。
authz-db:指定權限配置文件名稱,通過該文件能夠實現以路徑為基礎的訪問控制。
realm:指定版本號庫的認證域,即在登錄時提示的認證域名稱。若兩個版本號庫的認證域同樣,建議使用同樣的username口令數據文件
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 進程殺掉三. client連接SVN server
3.1 安裝TortoiseSVN client
下載地址在第一節已說明。
3.2 找到自己項目的文件夾,右擊,進行SVN 操作
(1)新建測試文件夾svn,進入后右鍵,點checkout:
SVN server的IP地址和版本號庫名稱。
新建個文件svn.txt. 把這個文件上傳到SVNserver(add):
posted on 2014-09-22 09:27 順其自然EVO 閱讀(236) 評論(0) 編輯 收藏 所屬分類: 測試學習專欄