一 . 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 )。 所以這些操作只會花費很小 , 而且是固定的時間。
( 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):
------------------------------------------------------------------------------
Blog : http://blog.csdn.net/tianlesoftware
網上資源: http://tianlesoftware.download.csdn.net
相關視頻: http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
DBA1 群: 62697716( 滿 ); DBA2 群: 62697977( 滿 )
DBA3 群: 62697850 DBA 超級群: 63306533;
聊天 群: 40132017
-- 加群需要在備注說明 Oracle 表空間和數據文件的關系,否則拒絕申請
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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