Binge's Blog

          網(wǎng)絡(luò)文摘集(Java篇)
          posts - 4, comments - 0, trackbacks - 0, articles - 3
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          Subversion使用手記

          Posted on 2006-11-28 12:20 batistuta 閱讀(210) 評(píng)論(0)  編輯  收藏 所屬分類: Java綜合技術(shù)

          一直以來(lái)對(duì)于自己的項(xiàng)目都是使用CVS進(jìn)行管理,聽說Subversion很久了,但是都沒有時(shí)間去嘗試。想想時(shí)間都是省出來(lái)的,于是決定,一天學(xué)一點(diǎn),不多,積累成河嘛。
          ? Subversion和CVS相比,除了包含了CVS的全部特性之外,也加入了新的理念。
          ??????????????????????????????????? 新理念
          ? 1、路徑、改名、以及文件meta-data也可進(jìn)入版本控制范圍。
          ? 缺少這些特性是CVS被抱怨最多的方面之一,subversion不止對(duì)文件內(nèi)容和文件存放位置加入控制,也對(duì)目錄,拷貝,重命名操作加入版本控制。它也允許文件/目錄的相關(guān)元數(shù)據(jù)meta-data和文件/目錄本身一起被版本控制起來(lái),并提供一種機(jī)制對(duì)文件的執(zhí)行權(quán)限進(jìn)行控制。
          ? 2、Commit動(dòng)作真正成為原子級(jí)的操作了。
          直到整個(gè)commit動(dòng)作都成功前不會(huì)有任何部分的commit會(huì)生效。版本修訂號(hào)只是預(yù)確認(rèn),而不是對(duì)文件預(yù)確認(rèn)。(翻譯不出來(lái) -_-;)日志信息將綁定到修訂信息,而不是象CVS那樣冗余的存儲(chǔ)下來(lái)。
          ?3、提供Apache網(wǎng)絡(luò)服務(wù)器選項(xiàng),支持WebDAV/DeltaV協(xié)議。
          Subversion可以使用基于http協(xié)議的WebDAV/DeltaV協(xié)議進(jìn)行網(wǎng)絡(luò)通訊,并由Apache服務(wù)器提供源碼倉(cāng)庫(kù)方的網(wǎng)絡(luò)瀏覽服務(wù)。這為Subversion提供了比CVS更好的協(xié)同工作能力,并提供了各式各樣的自由的關(guān)鍵特性:授權(quán),基于路徑的授權(quán),線性壓縮,以及基本源碼倉(cāng)庫(kù)瀏覽。
          4、獨(dú)立服務(wù)器選項(xiàng)
          Subversion也能提供獨(dú)立服務(wù)器選項(xiàng),使用自定的協(xié)議(不是每個(gè)人都想運(yùn)行Apache2.x)獨(dú)立服務(wù)器可以作為系統(tǒng)的inetd服務(wù)運(yùn)行,并提供基本的授權(quán)。它也能使用ssh進(jìn)行加密。
          ?5、建立分支和標(biāo)簽操作成為不耗時(shí)的操作。
          這些動(dòng)作沒理由耗時(shí),所以我們不再讓它們耗時(shí)。
          6、分支與標(biāo)簽的實(shí)現(xiàn)都是基于底層的拷貝操作,一個(gè)拷貝占用一塊固定大小的空間。任何拷貝都可以作為一份標(biāo)簽;假如你開始對(duì)某個(gè)版本的拷貝進(jìn)行commit動(dòng)作,那它也就成為一個(gè)分支。(這與CVS的"分支節(jié)點(diǎn)做標(biāo)簽"方式不同)
          7、天然的client/server結(jié)構(gòu),層次化庫(kù)設(shè)計(jì)。
          Subversion從設(shè)計(jì)之初即采用client/server機(jī)構(gòu);因此避免了困擾CVS了許久的一些維護(hù)性難題。
          代碼被構(gòu)建為一組帶有詳細(xì)接口說明的模塊,用以方便的由其他應(yīng)用程序進(jìn)行調(diào)用。
          8、Client/server協(xié)議向雙方發(fā)送對(duì)比差異。
          網(wǎng)絡(luò)協(xié)議利用寬帶有效地發(fā)送對(duì)比差異給客戶端和服務(wù)器端雙方。( CVS只是 server->client,?沒有client->server )
          ?9、資源消耗與數(shù)據(jù)改變的大小成正比,而不是與數(shù)據(jù)本身大小成正比一般來(lái)說,一項(xiàng)Subversion操作所需時(shí)間與操作最終變化的大小成正比。而不是與操作所觸及的整個(gè)項(xiàng)目的大小成正比,這是Subversion源代碼倉(cāng)庫(kù)模型的一個(gè)特性。
          ?10、有效的處理二進(jìn)制文件
          Subversion對(duì)于二進(jìn)制文件和文本文件的處理同樣有效,因?yàn)閟ubversion使用一種二進(jìn)制差異比較算法來(lái)增量存儲(chǔ)那些連續(xù)的修訂本。
          ?11、易于語(yǔ)法分析的輸出。
          所有Subversion命令行客戶端的輸出都是仔細(xì)設(shè)計(jì)的,可輕松為人所理解,也適于程序自動(dòng)解析??蛇M(jìn)行腳本語(yǔ)言處理將是下一步優(yōu)先考慮的特性。
          ?好了,開始使用吧。
          Subversion到目前的安裝已經(jīng)非常簡(jiǎn)單了。到Subversion網(wǎng)站下載Windows下的安裝文件,簡(jiǎn)單的步驟就可以完成安裝,而且安裝程序已經(jīng)自動(dòng)注冊(cè)Path,直接在命令行模式就可以使用了。
          ? 首先初始化Repository,輸入命令:
          ?svnadmin create D:\TestRepository\
          然后,把現(xiàn)有的項(xiàng)目的目錄結(jié)構(gòu)以及文件導(dǎo)入到Repository中:
          ?svn import D:\Projects\Project1 file:///D:\TestRepository\Project1 -m “初始化“
          ?用啟動(dòng)服務(wù)
          ?svnserve -d -r D:\TestRepository\
          ?客戶端Checkout
          ?svn checkout svn://主機(jī)名/Project1?? (即獲取Project1的項(xiàng)目)
          ?以上都是很簡(jiǎn)單的命令。而且上面只用到了一種服務(wù)模式,Apache的還在嘗試中。
          ?目前只用到了Subversion的基本功能,就已經(jīng)感覺不錯(cuò)了,覺得入門很輕松,幫助文檔也比CVS要好的多。
          ?Subversion也有圖形的客戶端,可以在 TortoiseSVN 找到。
          ?Subversion也VS.Net的插件,可以在AnkhSVN 找到。
          ?TortoiseSVN相信不錯(cuò),因?yàn)橐郧坝眠^它的另一個(gè)For CVS的工具,可以和瀏覽器結(jié)合在一起,非常方便和美觀。
          服務(wù)
          ??? Subversion具有兩種服務(wù)模式,一個(gè)是作為Apache的模塊,另一個(gè)是自定義協(xié)議的Subserve服務(wù)。作為Apache的模塊,客戶端可以通過WebDAV/DeltaV協(xié)議訪問Repository,而使用Subserve則使用
          Subversion的自定義協(xié)議。
          下表是兩種服務(wù)模式的比較:

          功能

          ?

          Apache + mod_dav_sub

          Svnserve

          驗(yàn)證方式

          基于HTTPSX.509、LDAP、NTLM或其他Apache支持的驗(yàn)證

          CRAM-MD5 或者SSH

          用戶帳戶管理

          私有的用戶文件

          私有的用戶文件或已有的系統(tǒng)帳戶

          授權(quán)管理

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

          blanket read/write access

          加密

          可選的SSL

          可選的SSH隧道

          交互性

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

          無(wú)交互性

          Web 訪問

          有限的內(nèi)置支持,或通過第三方的工具,例如ViewCVS

          通過第三方的支持,如ViewCVS

          速度

          稍慢

          稍快

          初始安裝

          稍復(fù)雜

          相當(dāng)簡(jiǎn)單


          ?????????????????????????????????? 啟動(dòng)svnserve服務(wù)
          svnserve 是一個(gè)輕量級(jí)的服務(wù), 使用自定義的協(xié)議通過TCP/IP與客戶端通訊。
          客戶端通過由 svn:// 或者 svn+ssh:// 開始的URL訪問svnserve服務(wù)器。
          啟動(dòng)服務(wù)器
          端口監(jiān)控(inetd)模式
          如果你打算用端口監(jiān)控來(lái)啟動(dòng)處理客戶的訪問請(qǐng)求的進(jìn)程,你可以通過傳入?yún)?shù)-i來(lái)啟動(dòng):
          svnserve -i
          當(dāng)使用-i參數(shù)啟動(dòng)服務(wù)的時(shí)候,svnserve通過stdin和stdout用自定義協(xié)議和客戶端
          通訊。同時(shí)服務(wù)偵聽3690端口。
          獨(dú)立端口監(jiān)控進(jìn)程
          使用參數(shù)-d啟動(dòng)服務(wù)作為一個(gè)獨(dú)立的端口監(jiān)控進(jìn)程。
          svnserve -d
          當(dāng)運(yùn)行svnserve在獨(dú)立端口監(jiān)控模式時(shí),你可以使用--listen-port=和--listen-host=參數(shù)來(lái)自定義需要的端口和主機(jī)名稱。當(dāng)前模式默認(rèn)的端口是3690。
          當(dāng)然,也有第三種方法啟動(dòng)svnserve,也就是使用“隧道模式”,使用-t參數(shù)啟動(dòng)服務(wù)。這個(gè)模式要求遠(yuǎn)程服務(wù)程序,如RSH或SSH,已經(jīng)成功驗(yàn)證用戶,并且使用已經(jīng)校驗(yàn)的用戶啟動(dòng)一個(gè)屬于該用戶的svnserve進(jìn)程。當(dāng)使用該模式提供服務(wù)時(shí),要確認(rèn)啟動(dòng)的用戶帳戶具備對(duì)Repository的讀/寫權(quán)限。
          設(shè)置項(xiàng)目目錄
          當(dāng)svnserve開始運(yùn)行時(shí),它將會(huì)暴露所有的Repository到網(wǎng)絡(luò)上。不過,當(dāng)客戶端需要獲取一個(gè)Repository的內(nèi)容時(shí),需要指定Reopsitory的絕對(duì)路徑。例如:一個(gè)Repository放在文件路徑
          C:/Project Repository/Project1
          那么當(dāng)客戶端訪問時(shí),需要指定絕對(duì)路徑:
          svn://host/C:/Project Repository/Project1
          所以,為了增加保密性,你可以使用參數(shù)-r指定需要暴露的Repository的路徑,當(dāng)用戶訪問時(shí),只需指定Repository的名稱即可。例如上面的Repository,當(dāng)啟動(dòng)服務(wù)時(shí),使用如下的方法:
          svn -d -r C:/Project Repository
          那么當(dāng)客戶端訪問時(shí),則使用
          svn://host/Project1
          就可以獲取數(shù)據(jù)了。
          內(nèi)置的驗(yàn)證和授權(quán)
          當(dāng)客戶端連接到一個(gè)svnserve進(jìn)程時(shí),下面的流程就會(huì)觸發(fā):
          1、客戶選擇一個(gè)指定的Repository;
          2、服務(wù)處理Repository的配置文件 conf/svnserve.conf文件,并且開始執(zhí)行在其中定義的所有驗(yàn)證和授權(quán)策略;
          3、依賴與情形和授權(quán)策略:
          a)客戶端也許允許匿名訪問而不需要驗(yàn)證,或者
          b)客戶但也許需要在任何時(shí)候被要求驗(yàn)證,或者
          c)假如處于"隧道模式"中,客戶端將聲明自己已經(jīng)可以被外部驗(yàn)證。
          很顯然,如上所說,用戶文件是一個(gè)名為svnserve.conf的,放在conf目錄下的文件。
          現(xiàn)在我們來(lái)看看如何配置這個(gè)文件:
          這個(gè)配置文件放置在Repository的目錄中的conf目錄下,它有兩個(gè)節(jié)點(diǎn):
          [general]
          [users]
          其中,[general]的配置信息有:
          anon-access = read
          auth-access = write
          其中表示對(duì)于驗(yàn)證有效的以及沒通過驗(yàn)證的用戶可以做什么事情。分別有read, write和none
          [users]的標(biāo)簽的配置內(nèi)容有:
          USERNAME = PASSWORD
          password-db = passwd
          realm = My First Repository
          其中表示,用戶名對(duì)應(yīng)的密碼是什么,或者指定一個(gè)存儲(chǔ)用戶名和密碼的文件的相對(duì)或絕對(duì)路徑以及指定了Repository的驗(yàn)證領(lǐng)域。如果兩個(gè)Repository有相同的驗(yàn)證領(lǐng)域,那么它們應(yīng)該有相同的密碼數(shù)據(jù)庫(kù),反之亦然。默認(rèn)的領(lǐng)域就是指向當(dāng)前的Repository的路徑,與服務(wù)器的Repository的根目錄相關(guān)。


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 元谋县| 元氏县| 海原县| 忻州市| 平邑县| 噶尔县| 华蓥市| 鲁甸县| 大悟县| 偃师市| 鄂伦春自治旗| 潮安县| 安图县| 密山市| 麻栗坡县| 淮阳县| 渭南市| 闽清县| 九龙坡区| 常山县| 开江县| 同德县| 扎赉特旗| 永春县| 枝江市| 宜都市| 且末县| 称多县| 乌恰县| 五家渠市| 濉溪县| 吕梁市| 高尔夫| 灵武市| 通渭县| 鄢陵县| 芜湖县| 仲巴县| 紫金县| 廊坊市| 西安市|