一. svn 簡單介紹
svn中的一些概念 :
(1). repository(源碼庫)
源碼統一存放的地方
(2). checkout (提取)
當你手上沒有源碼的時候,你須要從repository checkout一份
(3). commit (送出)
當你已經改動了代碼,你就須要commit到repository
(4). update (更新)
當你已經checkout了一份源碼, update一下你就能夠和repository上的源碼同步,你手上的代碼就會有最新的變更
假設兩個程式猿同一時候改動了同一個檔案呢, svn能夠合并這兩個程式猿的改動,實際上svn管理源碼是以行為機關的,就是說兩個程式猿僅僅要不是改動了同一行程式,svn都會自己主動合并兩種改動。假設是同一行,svn會提示檔案confict, 沖突,須要手動确認。
client軟體:
(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:/]
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 程序殺掉三. client連接配接svn server
3.1 安裝tortoisesvn client
下載下傳位址在第一節已說明。
3.2 找到自己項目的檔案夾,右擊,進行svn 操作
(1)建立測試檔案夾svn,進入後右鍵,點checkout:
svn server的ip位址和版本号庫名稱。
建立個檔案svn.txt. 把這個檔案上傳到svnserver(add):
最新内容請見作者的github頁:http://qaseven.github.io/