Subversion使用扎記


一直以來對於自己的專案都是使用CVS進行管理,聽說Subversion很久了,但是都沒有時間去嘗試。想想時間都是省出來的,於是決定,一天學一點,不多,積累成河嘛。

Subversion
CVS相比,除了包含了CVS的全部特性之外,也加入了新的理念:

1
、路徑、改名、以及檔meta-data也可進入版本控制範圍。缺少這些特性是CVS被抱怨最多的方面之一,subversion不止對檔內容和檔存放位置加入 控制,也對目錄,拷貝,重命名操作加入版本控制。它也允許檔/目錄的相關元資料 meta-data和檔/目錄本身一起被版本控制起來,並提供一種機制對檔的執行許可權進行控制。
2
、Commit動作真正成為原子級的操作了
直到整個commit動作都成功前不會有任何部分的commit會生效。版本修訂號只是預確認,而不是對檔預確認。(翻譯不出來 -_-;)日誌資訊將綁定到修訂資訊,而不是象CVS那樣冗餘的存儲下來。
3
、提供Apache網路服務器選項,支援WebDAV/DeltaV協定。Subversion可以使用基於http協定的WebDAV/DeltaV協定進行網路通訊,並由Apache伺服器 提供源碼倉庫方的網路流覽服務。這為Subversion提供了比CVS更好的協同工作能力,並提供了各式各樣的自由的關鍵特性:授權,基於路徑的授權,線性壓縮,以及基本源碼倉庫流覽。
4
、獨立伺服器選項
Subversion
也能提供獨立伺服器選項,使用自定的協定(不是每個人都想運行Apache2.x)獨立伺服器可以作為系統的inetd服務運行,並提供基本的授權。它也能使用ssh進行加密。
5
、建立分支和標籤操作成為不耗時的操作。這些動作沒理由耗時,所以我們不再讓它們耗時。
6
、分支與標籤的實現都是基於底層的拷貝操作,一個拷貝佔用一塊固定大小的空間。任何拷貝都 可以作為一份標籤;假如你開始對某個版本的拷貝進行commit動作,那它也就成為一個分支。(這與CVS"分支節點做標籤"方式不同)
7
天然的client/server結構,層次化庫設計。Subversion從設計之初即採用client/server機構;因此避免了困擾CVS了許久的一些維護性難題。代碼被構建為一組帶有詳細介面說明的模組,用以方便的由其他應用程式進行調用。
8
、Client/server協議向雙方發送對比差異。網路協定利用寬頻有效地發送對比差異給用戶端和伺服器端雙方。( CVS只是 server->client, 沒有client->server )
9
、資源消耗與資料改變的大小成正比,而不是與資料本身大小成正比
一般來說,一項Subversion操作所需時間與操作最終變化的大小成正比。而不是與操作所觸 及的整個項目的大小成正比,這是Subversion源代碼倉庫模型的一個特性。
10
、有效的處理二進位檔
Subversion
對於二進位檔和文字檔案的處理同樣有效,因為subversion使用一種二進位差異比較演算法來增量存儲那些連續的修訂本。
11
、易於語法分析的輸出。
所有Subversion命令行用戶端的輸出都是仔細設計的,可輕鬆為人所理解,也適於程式自動 解析。可進行腳本語言處理將是下一步優先考慮的特性。


好了,開始使用吧。

Subversion
到目前的安裝已經非常簡單了。到Subversion網站下載Windows下的安裝檔,簡單的步驟就可以完成安裝,而且安裝程式已經自動註冊Path,直接在命令行模式就可以使用了。

首先初始化Repository,輸入命令:
svnadmin create D:TestRepository

然後,把現有的專案的目錄結構以及檔導入到Repository中:
svn import D:ProjectsProject1 file:///D:TestRepositoryProject1 -m “
初始化

用啟動服務
svnserve -d -r D:TestRepository

用戶端Checkout
svn checkout svn://
主機名/Project1 (即獲取Project1的項目)

以上都是很簡單的命令。而且上面只用到了一種服務模式,Apache的還在嘗試中。

目前只用到了Subversion的基本功能,就已經感覺不錯了,覺得入門很輕鬆,幫助文檔也比CVS要好的多。

Subversion
也有圖形的用戶端,可以在 TortoiseSVN 找到。
Subversion
VS.Net的插件,可以在AnkhSVN 找到。
TortoiseSVN
相信不錯,因為以前用過它的另一個For CVS的工具,可以和流覽器結合在一起,非常方便和美觀。

Subversion使用手記(二)——服務

Subversion具有兩種服務模式,一個是作為Apache的模組,另一個是自定義協定的Subserve服務。
作為Apache的模組,用戶端可以通過WebDAV/DeltaV協定訪問Repository,而使用Subserve則使用
Subversion
的自定義協議。
下表是兩種服務模式的比較:

功能

Apache + mod_dav_sub

Svnserve

驗證方式

基於HTTPSX.509LDAPNTLM或其他Apache支持的驗證

CRAM-MD5或者SSH

用戶帳戶管理

私有的用戶檔

私有的用戶檔或已有的系統帳戶

授權管理

blanket read/write access或單一目錄的訪問控制

blanket read/write access

加密

可選的SSL

可選的SSH隧道

交互性

可通過支持WebDAV的用戶端訪問

無交互性

Web訪問

有限的內置支持,或通過第三方的工具,例如ViewCVS

通過第三方的支持,如ViewCVS

速度

稍慢

稍快

初始安裝

稍複雜

相當簡單

 

Subversion 使用手記(三)-啟動svnserve服務

svnserve 是一個羽量級的服務, 使用自定義的協定通過TCP/IP與用戶端通訊。

用戶端通過由 svn:// 或者 svn+ssh:// 開始的URL訪問svnserve伺服器。

啟動伺服器

埠監控(inetd)模式

如果你打算用埠監控來啟動處理客戶的訪問請求的進程,你可以通過傳入參數-i來啟動:

svnserve -i

當使用-i參數啟動服務的時候,svnserve通過stdinstdout用自定義協議和用戶端
通訊。同時服務偵聽3690埠。

獨立埠監控進程

使用參數-d啟動服務作為一個獨立的埠監控進程。

svnserve -d

當運行svnserve在獨立埠監控模式時,你可以使用--listen-port=--listen-host=參數來自定義需要的埠和主機名稱。當前模式默認的埠是3690

當然,也有第三種方法啟動svnserve,也就是使用隧道模式,使用-t參數啟動 服務。這個模式要求遠端服務程式,如RSHSSH,已經成功驗證用戶,並且使用已經校驗的用戶啟動一個屬於該用戶的svnserve進程。當使用該模式 提供服務時,要確認啟動的用戶帳戶具備對Repository的讀/寫許可權。

設置專案目錄

svnserve開始運行時,它將會暴露所有的Repository到網路上。不過,當用戶端需要獲取一個Repository的內容時,需要指定Reopsitory的絕對路徑。例如:一個Repository放在檔路徑
C:/Project Repository/Project1
那麼當用戶端訪問時,需要指定絕對路徑:
svn://host/C:/Project Repository/Project1
所以,為了增加保密性,你可以使用參數-r指定需要暴露的Repository的路徑,當用戶訪問時,只需指定Repository的名稱即可。例如上面的Repository,當啟動服務時,使用如下的方法:
svn -d -r C:/Project Repository
那麼當用戶端訪問時,則使用
svn://host/Project1
就可以獲取資料了。

內置的驗證和授權

當用戶端連接到一個svnserve進程時,下面的流程就會觸發:
1、客戶選擇一個指定的Repository
2、服務處理Repository的配置檔 conf/svnserve.conf檔,並且開始執行在其中定義的所有驗證和授權策略;
3、依賴與情形和授權策略:
a)用戶端也許允許匿名訪問而不需要驗證,或者
b)客戶但也許需要在任何時候被要求驗證,或者
c)假如處於"隧道模式"中,用戶端將聲明自己已經可以被外部驗證。

很顯然,如上所說,用戶檔是一個名為svnserve.conf的,放在conf目錄下的檔。
現在我們來看看如何配置這個檔:
這個配置檔放置在Repository的目錄中的conf目錄下,它有兩個節點:
[general]
[users]
其中,[general]的配置資訊有:
anon-access = read
auth-access = write
其中表示對於驗證有效的以及沒通過驗證的用戶可以做什麼事情。分別有read, writenone

[users]的標籤的配置內容有:
USERNAME = PASSWORD
password-db = passwd
realm = My First Repository
 中表示,用戶名對應的密碼是什麼,或者指定一個存儲用戶名和密碼的檔的相對或絕對路徑以及指定了Repository的驗證領域。如果兩個 Repository有相同的驗證領域,那麼它們應該有相同的密碼資料庫,反之亦然。默認的領域就是指向當前的Repository的路徑,與伺服器的 Repository的根目錄相關。

arrow
arrow
    全站熱搜

    Bluelove1968 發表在 痞客邦 留言(2) 人氣()