<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Sung in Blog

               一些技術文章 & 一些生活雜碎
    CVS client使用前必須明白的基本概念
    1,CVS

    CVS (Cuncurrent Versions System)是基于TCP/IP協議的版本控制工具,也是Open source界最重要的開發工具之一。
    它原來主要工作在UNIX平臺下,現在在windows平臺上也出現了很多GUI工具。
    關于其由來,發展,請參閱http://www.redsaga.com/CVS_newbie_win32/www.cvshome.org 。
    CVS和其他大部分版本控制軟件一樣,是Client/Server結構的。你必須在本地為CVS repository準備好一個目錄,來和服務器同步源代碼。
    和在Windows 開發平臺中擁有很大用戶群的Visual Source Safe(VSS)相比,CVS主要由兩個不同之處。
    一是VSS依靠服務器上的一個共享目錄提供服務,每一個client必須能夠訪問這個共享目錄。這也就決定了source safe在TCP/IP環境下使用很困難。對于分布跨越數個城市甚至國家的工作小組來說,只有通過VPN才能夠安全的訪問source safe數據庫。(SourceGear公司(www.sourcegear.com)發售名為SourceOffSite的商業軟件包,US$239 per user,也可以為遠程用戶提供通過TCP/IP訪問source safe數據的能力。) 而CVS依靠TCP/IP連接提供服務,所以它天生就是為了在internet上協同工作而設計的。雖然基本的pserver連接安全性不是很高,但是通過使用SSH,可以獲得很高的安全性。
    二是CVS反對對文件上鎖的機制。VSS以及其他很多傳統版本控制工具要求一個文件只能有一個使用者,它必須先checkout聲明編輯文件的獨享權力,直到checkin為止。但是對于地理上不限制使用者位置的CVS來說,等待一個用戶checkin是一件痛苦的事情,而互相溝通比一個緊密工作的團體更困難。CVS采取多個用戶可以同時對一個文件進行編輯,然后commit的方式解決這個問題。假設由于溝通不足出現沖突,使用者必須手工解決沖突之后再進行commit。在這種情況下,沖突的開發者必須努力進行足夠的溝通以避免再次沖突。
    CVS服務器可以被配置為把commit記錄自動張貼到新聞組或者開發者的email信箱中去。注意這些輔助記錄將有助于開發者之間的合作。
    2, repository,module
    CVS服務器上,一個源代碼倉庫被稱為一個repository,一個server上通常可以運行多個repository,每個repository都是完全獨立的,可以有不同的用戶列表和訪問規則。在一個repository之下,文件按照module組織,每一個module就相當于一個工程,大致上相當于Source safe里面的project。
    VSS在你連接上服務器之后,會列出所有的project。但并不是所有的CVS server都會提供module的列表。事實上,哪些module被公開是由管理員控制的。如果你知道一個被隱藏的module的名字,你仍然可以正常的訪問這個module。
    3,CVSROOT
    CVS依靠運行在服務器上的一個服務程序提供TCP/IP的連接。為了訪問一個CVS數據庫,你必須知道你所使用的協議,服務器的地址,服務器提供的Repository的名稱以及你的用戶名和密碼。
    有數種協議可供選擇。Unix/Linux機器上的CVS通常使用pserver協議,這是一種不非常安全的協議,但是如果你有額外的安全要求,可以通過SSH進行增強。除此之外,NT機器還支持ntserver協議,它通過主機的NT用戶表進行訪問控制(但是這是在internet上不可用的方法)。kserver和gserver協議用的比較少,他們依據Kerboses提供額外的安全保護。
    你有必要知道CVSROOT這個參數。CVSROOT是一個用":"開始及分隔各個部分的字符串,它包含了協議、用戶名、服務器地址和repository名稱。對于用戶來說,CVSROOT就像URL一樣,是訪問一個server的途徑。
    一個典型的CVSROOT=:perser:cao@61.155.107.187:/cvs。這里,pserver是協議名稱,cao是用戶id,61.155.107.187是主機ip,/cvs是repository的名字。NT主機的repository一般會采取d:/CVSROOT之類的格式。
    另一個例子是:pserver:anonymous@jivesoftware.com:/cvs,這是jivesoftware公司提供的開放源代碼java技術論壇的CVSROOT。
    在windows下使用命令行方式,這個參數可以通過一個環境變量使用。在windows 2000/XP系統中,你可以通過在'My computer'的properties中選擇advanced,然后選擇'Enviroment Variables'來輸入這個環境變量。
    4,checkout,update
    為了得到module下面的源代碼,你只需要使用checkout指令。和Visual source safe不一樣,checkout只是取得文件,而非鎖文件。
    如果你已經有了本地文件,為了和server保持同步,你需要進行update操作。update會自動把server上的新內容取到本機來,如果你本地文件進行過了改動,它會幫您做合并工作。
    checkout 和 update既可以針對一個特定的文件,也可以針對一個目錄或者整個module。
    5, commit
    如果你對本地代碼做了任何修改,或者增加一個文件,刪除一個文件,每當你需要把你的改變提交到server上的時候,你就需要做commit動作。假設兩個人都在本地修改了同一個文件,那么他們就像在進行一個競賽,如果你快,那么你贏了。后commit的人將被server拒絕,不得不合并你的修改再次提交。
    commit既可以針對一個特定的文件,也可以針對一個目錄或者整個module。
    6, revision
    Revision是指每一個文件的版本信息。當你第一次增加一個文件到repository的時候,它會有一個初始revision是1.1,以后每次提交,就會增加到1.2,1.3...
    在一個branch中的文件,有相對于這個branch的版本號。如果你對文件作了tag,那么你會看到revision變成1.1.1.1的形式。具體的含義我們在branch和tag的時候描述。
    7,branch
    Branch是一棵正常生長的代碼樹中的枝杈。開始的時候,任何一個module都有一個主枝被稱為'HEAD'。
    一個branch最終要么被合并到主干中去,要么被結束。branch通常用來debug,如果這個bug被fix了,修改bug的代碼應該被合并到主枝上去。一個branch也可能經歷多次與主枝的合并。
    8, tag
    Tag用來進行標示必要的信息。當您進行一次公開發布之前,您有必要對主枝標示"release 1.0"。這樣您以后就可以隨時回到這個版本。
    //to do: 請完善這里的描述

    CVS命令行
    在得到CVSROOT和你的口令之后,你就可以試著登陸了。
    首先,由于其他所有的GUI工具都是基于CVS基本協議的,而且他們可能會提供CVS的命令行或者等價形式作為顯示的一部分,所以你應該對命令行操作有所了解。如果你還沒有一個cvs。exe的命令行程序,從http://www.redsaga.com/CVS_newbie_win32/www.cvsnt.org你可以得到一個cvsnt的下載連接,其中就包含了一個命令行的cvs.exe程序。我們先從它開始(為了作為一個client使用,你不需要安裝cvsnt的server組件)。CVSNT的cvs.exe是專門為windows編寫的,你需要把cvs.exe放在你的path里面。
    1.進入命令行方式。
    和VSS一樣,你也需要在本地有一個工作目錄對應于一個repository。假設這個目錄是'd:\works\sandbox'。請切換到這個目錄。
    輸入"cvs"。你會看到:

    這些提示信息告訴您關于cvs的基本語法。cvs后面跟著的是全局參數,然后是命令,最后是命令的參數。
    2.login
    正確的login不會有任何輸出,否則會告訴你錯誤原因。
    cvs

    3.下面我們看看這個CVS server中有哪些module。

    4.假設現在我們工作的項目是projectX,下面我們需要得到它下面的全部文件。

    現在讓我們看一下我們得到了什么。
    在d:/works/sandbox目錄下,你可以看到有一個projectX目錄。這就是你得到的所有文件。
    這個目錄下你會發現一個叫做 CVS的目錄。危險!請不要刪除這個目錄,或者改名,或者改動其中的任何文件,除非你知道你在做什么。這個目錄是CVS的控制目錄。如果你用過source safe,你一定很熟悉。scc這個文件,CVS目錄的作用就和這個控制文件一樣,都是用來記錄你訪問服務器的參數。
    這里我們需要解釋一下cvs和VSS的名詞差別。在VSS中,checkout意味著你將獲得一個文件的修改權,而cvs中checkout的這個含義取消了,僅僅指取得文件的新版本。很多cvs server會有一個anonymous用戶,他只有checkout權限,也就意味著它只讀。

    5.讓我們試著加入一個文件:
    在d:/works/sandbox/projectX下,新建一個文件newfile.txt,
    然后,在這個目錄下執行:

    你需要commit它才能被sever接受。

    一個notepad窗口彈出請您輸入注釋。

    這是commit完成的結果。現在的版本號是1.1。

    6.好了,現在假設您需要改一下這個文件的內容。

    CVS可以幫助您比較現在您的版本和repository中的版本有什么不同。

    好了,現在您可以提交您的新文件。

    CVS會幫您保留您的各個版本。在commit之后,現在我們來看一看各個版本的history。

    7.最后,為了完成這個試驗,請把這個newfile文件刪去。

    我們現在認識了一些最基本的CVS入門級指令。
    其實CVS是非常強大的,我們并沒有用到一些更復雜的功能,請參閱cvs的手冊來得到更為詳盡的幫助。
    在多人同時開發的時候,沖突有時候也是不能避免的。
    // to do:加入處理 cvs update和處理merge的部分。
    更多的資料請參閱Karl Fogel的《Open Source Development With CVS》一書。該書的中文譯本《CVS開源軟件開發技術》由機械工業出版社出版(ISBN 7-111-08891-3/TP.1885,人民幣35.00)。按此連接到華儲網上電腦書店訂購http://www.huachu.com.cn/asp/book/brow.asp?lbbh=B99112091
    用MFC編寫的windows平臺CVS圖形界面 --- WinCVS(未完成)
    好了,就像黑白電影總是會過渡到彩色電影一樣(正巧,就像現在發生在移動電話市場的情況一樣),cvs命令行之外,一些圖形界面的程序被編寫出來簡化你的操作。由于CVS的協議是公開的,所以,只要你的編程語言支持socket通訊,你也可以寫一個。這個世界上有好幾個這樣的嘗試,WinCVS就是其中一個。它是在win32平臺上用MFC開發的。從我自己的體會來看,這是一個有益的嘗試,但是還遠遠稱不上精美。和VSS和source off site,borland的tram source,以及PVCS的界面比較,這個windows界面還顯得很粗糙,差強人意。
    但是我們還是可以從它開始進行我們的工作。
    下載請至http://www.redsaga.com/CVS_newbie_win32/www.cvsgui.org,那里有最新的版本。
    打開開始菜單的之后,你看到的是這樣一個界面:

    界面由3個主要區域組成,坐上角是目錄結構,右上角是文件夾詳細內容,下方是CVS命令的log。你可以從下方的log中得知cvs運行的詳細信息。

    首先你要做的事情就是告訴winCVS你的CVSROOT。

    這個對話框在winCVS1。2和1。3的各個版本中稍有不同,但是不妨礙你輸入CVS服務器的詳細信息。

    下一步就是login。

    好了,現在我們就可以去得到一份jive2的源代碼了。

    你可以看到,winCVS默認會加上壓縮的參數,這樣可以減少網絡流量,加快速度。

    同樣,用winCVS進行文件修改也是挺方便的。

    以上就是winCVS的簡要操作指南。更進一步的復雜操作,請參閱其幫助。

    評價:值得關注,但不推薦。
    在windows Explorer里直接checkout ---- TortoiseCVS
    TortoiseCVS已經是一個相當成熟的cvs界面了,它的工作方式也是非常有趣的。
    TortoiseCVS是一個簡潔有效的CVS界面。你完全可以用它替代winCVS做日常絕大多數的工作。他獨特的運行方式非常迷人,在一些商用配置管理工具,比如Rational ClearCase中,你也可以看到這樣的windows explorer擴展程序的工作方式。
    缺點:
    1,tortoiseCVS會一直不釋放它所操作的一些CVS文件和文件夾的系統資源。你可能會在試圖刪除一個在CVS控制之下的目錄時遇到麻煩。windows系統認為有另一個進程正在打開它(顯然就是TortoiseCVS),我沒有找到如何殺掉在后臺執行的TortoiseCVS的方法。在這種情況,用TortoiseCVS去update一下另一個module有所幫助。或者請重起你的explorer。
    2,如果你需要在兩個不同的server或者repository上做checkout的工作,TortoiseCVS有一個bug。它會在你輸入CVSROOT信息,checkout第二個module的時候仍然使用第一個repository的CVSROOT。但是再做一次同樣的操作就會成功的達到你的目的。
    評價:推薦。
    按此進入關于使用TortoiseCVS的詳細說明
    基于Netbeans Java類庫的漂亮GUI ---- SmartCVS
    使用java編寫的CVS GUI在過去一兩年中得到了長足的發展。拜jdk1.3所托,現在java程序的執行速度也有很大提高。Netbeans是由sun贊助的一個開放IDE,它其中包含了了CVS的基礎類庫。一個商業性的GUI,SmartCVS,就是在netbeans的穩定的cvs核心之上編寫的。 雖然SmartCVS的商業版本收費,但是其基礎版本是完全免費的,而這個基礎版本已經足夠大多數應用所需。

    SmartCVS你可以在www.regnis.de下載。
    SmartCVS自從1.2beta版本開始引入smartCommit,不再區分add和checkin,統一使用commit進行操作。

    利用SmartCVS,你也可以看到一個文件的歷史,以及圖形化表示的各個分支。

    總結:SmartCVS正如他的名字所說的,是一個相當聰明,精致,漂亮的CVS 客戶端。作為日常工作它是完全可以勝任的。如果和TortoiesCVS結合起來,可以給你相當理想的CVS工作平臺。
    同時,它也可以在所有jdk環境中運行,不僅僅局限于windows平臺。

    IDE集成
    對程序員來說,真正在編碼的時候,IDE才是每天接觸最多的環境。如果能夠在熟悉的IDE中使用CVS,當然實用性增強很多。Visual source safe 在Microsoft的開發工具產品VB,VC中集成得相當出色,也大大提高了使用使用Microsoft開發平臺的工作效率。
    下面我們就來看看一下在流行的java開發工具中如何使用CVS。

    IBM Visual age for java IDE集成 插件 --- vajcvs (未完成)
    Visual age for java支持一個開放的Tool API,CVSin就是這樣的一個tool。
    下載地址:

    安裝參見其內部readme文件。

    Borland jBuilder 內置CVS支持
    jBuilder很早就在3.0中內置CVS支持,而且當時cvs是jbuilder唯一一個正式支持的源代碼管理工具。在最新的Builder 6中,當然對CVS也支持得很好。

    完善的設計,領先的強大工作平臺 --- Eclipse
    及內置CVS支持IBM新的開放式集成開發環境,將是IBM visual age 系列開發工具的下一個平臺。它提供CVS作為基礎集成的一部分。在Eclipse中訪問CVS是一件相當輕松自如的事情,Eclipse按照自己的需要封裝了CVS,你可以看到,和其他訪問方式完全不同,Eclipse是到現在為止最強大的CVS工作平臺。
    posted on 2005-10-28 08:48 Sung 閱讀(639) 評論(0)  編輯  收藏 所屬分類: software Development
    主站蜘蛛池模板: 亚洲视频一区二区在线观看| 亚洲精品久久久久无码AV片软件| 蜜臀AV免费一区二区三区| 亚洲福利秒拍一区二区| 国产成人免费爽爽爽视频| 国产亚洲精彩视频| 亚洲Av综合色区无码专区桃色| 99久久久精品免费观看国产| 相泽南亚洲一区二区在线播放| 国产亚洲精品观看91在线| 99在线视频免费观看视频| 窝窝影视午夜看片免费| 久久综合亚洲色HEZYO社区| 国产又黄又爽又刺激的免费网址 | 亚洲视频免费一区| 国产jizzjizz视频免费看| 日韩电影免费在线观看中文字幕| 亚洲综合激情五月丁香六月| 三上悠亚亚洲一区高清| 100000免费啪啪18免进| www在线观看免费视频| 亚洲AV无码一区二区三区牛牛| 亚洲精品无码Av人在线观看国产| 一二三四免费观看在线电影| 一区二区三区在线免费| 中文日韩亚洲欧美制服| 亚洲爆乳无码专区| 全黄性性激高免费视频| 精品国产污污免费网站aⅴ| 久久99精品免费一区二区| 亚洲日韩一中文字暮| 久久亚洲美女精品国产精品| 亚洲高清成人一区二区三区| 久久受www免费人成_看片中文| 国产免费久久久久久无码| 亚洲国产aⅴ成人精品无吗| 亚洲精品国产第1页| 亚洲欧洲成人精品香蕉网| 亚洲成A人片在线观看中文| 97在线线免费观看视频在线观看| 久久免费美女视频|