一 . SVN 簡(jiǎn)介
Subversion(SVN) 是一個(gè)開源的版本控制系統(tǒng) , 也就是說(shuō) Subversion 管理著隨時(shí)間改變的數(shù)據(jù)。 這些數(shù)據(jù)放置在一個(gè)中央資料檔案庫(kù) (repository) 中。 這個(gè)檔案庫(kù)很像一個(gè)普通的文件服務(wù)器 , 不過它會(huì)記住每一次文件的變動(dòng)。 這樣你就可以把檔案恢復(fù)到舊的版本 , 或是瀏覽文件的變動(dòng)歷史。
SVN 中的一些概念 :
( 1 ) . repository (源代碼庫(kù))
源代碼統(tǒng)一存放的地方
( 2 ) . Checkout (提取)
當(dāng)你手上沒有源代碼的時(shí)候,你需要從 repository checkout 一份
( 3 ) . Commit (提交)
當(dāng)你已經(jīng)修改了代碼,你就需要 Commit 到 repository
( 4 ) . Update ( 更新 )
當(dāng)你已經(jīng) Checkout 了一份源代碼, Update 一下你就可以和 Repository 上的源代碼同步,你手上的代碼就會(huì)有最新的變更
日常開發(fā)過程其實(shí)就是這樣的(假設(shè)你已經(jīng) Checkout 并且已經(jīng)工作了幾天): Update( 獲得最新的代碼 ) --> 作出自己的修改并調(diào)試成功 --> Commit( 大家就可以看到你的修改了 ) 。
如果兩個(gè)程序員同時(shí)修改了同一個(gè)文件呢 , SVN 可以合并這兩個(gè)程序員的改動(dòng),實(shí)際上 SVN 管理源代碼是以行為單位的,就是說(shuō)兩個(gè)程序員只要不是修改了同一行程序, SVN 都會(huì)自動(dòng)合并兩種修改。如果是同一行, SVN 會(huì)提示文件 Confict, 沖突,需要手動(dòng)確認(rèn)。
客戶端軟件:
( 1 ) Windows 下常用的客戶端軟件常用 TortoiseSVN 。它是一個(gè)免費(fèi)的開源的客戶端。 下載地址: http://tortoisesvn.net/downloads.html
( 2 )向 Myeclipse ,也有一些 SVN 的插件。
Subversion 提供以下主要功能:
( 1 )目錄版本控制
CVS 只能跟蹤單個(gè)文件的歷史 , 不過 Subversion 實(shí)作了一個(gè) “虛擬” 的版本控管文件系統(tǒng) , 能夠依時(shí)間跟蹤整個(gè)目錄的變動(dòng)。 目錄和文件都能進(jìn)行版本控制。
( 2 )真實(shí)的版本歷史
自從 CVS 限制了文件的版本記錄, CVS 并不支持那些可能發(fā)生在文件上,但會(huì)影響所在目錄內(nèi)容的操作,如同復(fù)制和重命名。除此之外,在 CVS 里你不能用擁有同樣名字但是沒有繼承老版本歷史或者根本沒有關(guān)系的文件替換一個(gè)已經(jīng)納入系統(tǒng)的文件。在 Subversion 中,你可以增加( add )、刪除( delete )、復(fù)制( copy )和重命名( rename ),無(wú)論是文件還是目錄。所有的新加的文件都從一個(gè)新的、干凈的版本開始。
( 3 )自動(dòng)提交
一個(gè)提交動(dòng)作,不是全部更新到了檔案庫(kù)中,就是完全不更新。這允許開發(fā)人員以邏輯區(qū)間建立并提交變動(dòng),以防止當(dāng)部分提交成功時(shí)出現(xiàn)的問題。
( 4 )納入版本控管的元數(shù)據(jù)
每一個(gè)文件與目錄都附有一組屬性關(guān)鍵字并和屬性值相關(guān)聯(lián)。你可以創(chuàng)建 , 并儲(chǔ)存任何你想要的 Key/Value 對(duì)。 屬性是隨著時(shí)間來(lái)作版本控管的 , 就像文件內(nèi)容一樣。
( 5 )選擇不同的網(wǎng)絡(luò)層
Subversion 有抽象的檔案庫(kù)存取概念 , 可以讓人很容易地實(shí)作新的網(wǎng)絡(luò)機(jī)制。 Subversion 可以作為一個(gè)擴(kuò)展模塊嵌入到 Apache HTTP 服務(wù)器中。這個(gè)為 Subversion 提供了非常先進(jìn)的穩(wěn)定性和協(xié)同工作能力,除此之外還提供了許多重要功能 : 舉例來(lái)說(shuō) , 有身份認(rèn)證 , 授權(quán) , 在線壓縮 , 以及文件庫(kù)瀏覽等等。還有一個(gè)輕量級(jí)的獨(dú)立 Subversion 服務(wù)器, 使用的是自定義的通信協(xié)議 , 可以很容易地通過 ssh 以 tunnel 方式使用。
( 6 )一致的數(shù)據(jù)處理方式
Subversion 使用二進(jìn)制差異算法來(lái)異表示文件的差異 , 它對(duì)文字 ( 人類可理解的 ) 與二進(jìn)制文件 ( 人類無(wú)法理解的 ) 兩類的文件都一視同仁。 這兩類的文件都同樣地以壓縮形式儲(chǔ)存在檔案庫(kù)中 , 而且文件差異是以兩個(gè)方向在網(wǎng)絡(luò)上傳輸?shù)摹?
( 7 )有效的分支 (branch) 與標(biāo)簽 (tag)
在分支與標(biāo)簽上的消耗并不必一定要與項(xiàng)目大小成正比。 Subversion 建立分支與標(biāo)簽的方法 , 就只是復(fù)制該項(xiàng)目 , 使用的方法就類似于硬連接( hard-link )。 所以這些操作只會(huì)花費(fèi)很小 , 而且是固定的時(shí)間。
( 8 ) Hackability
Subversion 沒有任何的歷史包袱 ; 它主要是一群共用的 C 程序庫(kù) , 具有定義完善的 API 。這使得 Subversion 便于維護(hù) , 并且可被其它應(yīng)用程序與程序語(yǔ)言使用。
二 . SVN 服務(wù)器搭建
2.1 使用 yum 安裝 SVN 包
關(guān)于 YUM 服務(wù)器的配置參考:
Linux 搭建 YUM 服務(wù)器
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 ~]#
驗(yàn)證安裝版本:
[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 創(chuàng)建 SVN 版本庫(kù)
[root@singledb ~]# mkdir /u02/svn
[root@singledb ~]# svnadmin create /u02/svn/davesvn --davesvn 為版本庫(kù)名稱
2.3 SVN 配置
創(chuàng)建版本庫(kù)后,在這個(gè)目錄下會(huì)生成 3 個(gè)配置文件:
[root@singledb conf]# pwd
/u02/svn/davesvn/conf
[root@singledb conf]# ls
authz passwd svnserve.conf
( 1 ) svnserve.conf : svn 服務(wù)配置文件下。
( 2 ) passwd : 用戶名口令文件。
( 3 ) authz : 權(quán)限配置文件。
svnserve.conf 文件, 該文件配置項(xiàng)分為以下 5 項(xiàng):
anon-access : 控制非鑒權(quán)用戶訪問版本庫(kù)的權(quán)限。
auth-access : 控制鑒權(quán)用戶訪問版本庫(kù)的權(quán)限。
password-db : 指定用戶名口令文件名。
authz-db :指定權(quán)限配置文件名,通過該文件可以實(shí)現(xiàn)以路徑為基礎(chǔ)的訪問控制。
realm :指定版本庫(kù)的認(rèn)證域,即在登錄時(shí)提示的認(rèn)證域名稱。若兩個(gè)版本庫(kù)的認(rèn)證域相同,建議使用相同的用戶名口令數(shù)據(jù)文件
Passwd 文件 :
我們?cè)? svnserve.conf 文件里啟用這個(gè)文件。然后配置如下:
[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 文件 :
在網(wǎng)上找到一個(gè)很好的配置例子:
[groups]
admin = john, kate
devteam1 = john, rachel, sally
devteam2 = kate, peter, mark
docs = bob, jane, mike
training = zak
-- 這里把不同用戶放到不同的組里面,下面在設(shè)置目錄訪問權(quán)限的時(shí)候,用目錄來(lái)操作就可以了。
# 為所有庫(kù)指定默認(rèn)訪問規(guī)則
# 所有人可以讀,管理員可以寫,危險(xiǎn)分子沒有任何權(quán)限
[/] -- 對(duì)應(yīng)我測(cè)試?yán)锏模? /u02/svn 目錄
* = r
@admin = rw
dangerman =
# 允許開發(fā)人員可以完全訪問他們的項(xiàng)目版本庫(kù)
[proj1:/]
@devteam1 = rw
[proj2:/]
@devteam2 = rw
[bigproj:/]
@devteam1 = rw
@devteam2 = rw
trevor = rw
# 文檔編寫人員對(duì)所有的 docs 目錄有寫權(quán)限
[/trunk/doc]
@docs = rw
# 培訓(xùn)人員可以完全訪問培訓(xùn)版本庫(kù)
[TrainingRepos:/]
@training = rw
下面我們來(lái)配置我們的 authz 文件:
[root@singledb conf]# cat authz
[groups]
admin = dave
dev=tianlesoftware
[davesvn:/]
@admin = rw
@dev = rw
[root@singledb conf]#
2.4 啟動(dòng)和停止 SVN 服務(wù)
( 1 )啟動(dòng) SVN 服務(wù) :
[root@singledb conf]# svnserve -d -r /u02/svn
-d 表示后臺(tái)運(yùn)行
-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 服務(wù) :
ps -aux |grep svn
kill -9 進(jìn)程殺掉
三 . 客戶端連接 SVN 服務(wù)器
3.1 安裝 TortoiseSVN 客戶端
下載地址在第一節(jié)已說(shuō)明。
3.2 找到自己項(xiàng)目的目錄,右擊,進(jìn)行 SVN 操作
( 1 )新建測(cè)試目錄 svn ,進(jìn)入后右鍵,點(diǎn) checkout :
SVN 服務(wù)器的 IP 地址和版本庫(kù)名稱。
新建個(gè)文件 svn.txt. 把這個(gè) 文件上傳 到 SVN 服務(wù)器(add):
------------------------------------------------------------------------------
Blog : http://blog.csdn.net/tianlesoftware
網(wǎng)上資源: http://tianlesoftware.download.csdn.net
相關(guān)視頻: http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
DBA1 群: 62697716( 滿 ); DBA2 群: 62697977( 滿 )
DBA3 群: 62697850 DBA 超級(jí)群: 63306533;
聊天 群: 40132017
-- 加群需要在備注說(shuō)明 Oracle 表空間和數(shù)據(jù)文件的關(guān)系,否則拒絕申請(qǐng)
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
