憨厚生

          ----Java's Slave----
          ***Java's Host***

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            165 隨筆 :: 17 文章 :: 90 評論 :: 0 Trackbacks
          歷史 
              CVS 誕生于 1986 年,當時作為一組 shell 腳本而出現;1989年3月,Brian Berlinor用C語言重新設計并編寫了CVS的代碼;1993年前后,Jim Kingdon最終將CVS設計成基于網絡的平臺,開發者們能從Internet任何地方獲得程序源代碼。截至目前最新版本是2004年12月13日發布的1.12.11。 

          功能介紹 
          一、 代碼統一管理,保存所有代碼文件更改的歷史記錄。對代碼進行集中統一管理,可以方便查看新增或刪除的文件,能夠跟蹤所有代碼改動痕跡。可以隨意恢復到以前任意一個歷史版本。并避免了因為版本不同引入的深層BUG。 
          二、 完善的沖突解決方案,可以方便的解決文件沖突問題,而不需要借助其它的文件比較工具和手工的粘貼復制。 
          三、 代碼權限的管理。可以為不同的用戶設置不同的權限。可以設置訪問用戶的密碼、只讀、修改等權限,而且通過CVS ROOT目錄下的腳本,提供了相應功能擴充的接口,不但可以完成精細的權限控制,還能完成更加個性化的功能。 
          四、 支持方便的版本發布和分支功能。

          基本概念 
          資源庫(Repository)
           
          CVS的資源庫存儲全部的版本控制下的文件copy,通常不容許直接訪問,只能通過cvs命令,獲得一份本地copy,改動后再check in(commit)回資源庫。而資源庫通常為與工作目錄分離的。CVS通過多種方式訪問資源庫。每種方法有不同目錄表示形式。 
          版本(Revision) 
          每一個文件的各個版本都不相同,形如1.1, 1.2.1,一般1.1是該文件的第一個revision,后面的一個將自動增加最右面的一個整數,比如1.2, 1.3, 1.4...有時候會出現1.3.2.2,原因見后。revision總是偶數個數字。一般情況下將revision看作時CVS自己內部的一個編號,而tag則可以標志用戶的特定信息。 
          標簽(Tag) 
          用符號化的表示方法標志文件特定revision的信息。通常不需要對某一個孤立的文件作tag,而是對所有文件同時作一個tag,以后用戶可以僅向特定tag的文件提交或者checkout。另外一個作用是在發布軟件的時候表示哪些文件及其哪個版本是可用的;各文件不同revision可以包括在一個tag中。如果命名一個已存在的tag默認將不會覆蓋原來的; 
          分支(Branch) 
          當用戶修改一個branch時不會對另外的branch產生任何影響。可以在適當的時候通過合并的方法將兩個版本合起來;branch總是在當前revision后面加上一個偶數整數(從2開始,到0結束),所以branch總是奇數個數字,比如1.2后面branch為1.2.2,該分支下revision可能為1.2.2.1,1.2.2.2,... 
          沖突(Conflct) 
          完全是純文本的沖突,不包含邏輯上的矛盾。一般是一份文件,A做了改動,B在A提交之前也做了改動,這樣最后誰commit就會出現沖突,需要手工解決沖突再提交。 

          CVS與eclipse集成開發 
            前面對CVS的歷史、功能、概論等理論知識做了介紹。下面我們將使用最流行的Java IDE Eclipse中內置的CVS工具,以一個完整開發流程,介紹實際環境中CVS的正確使用。關于CVS系統的安裝,不是本文的內容,您可以從附錄的鏈接中獲取安裝的介紹資料。 

          常用的CVS控制命令 
          Check Out(檢出) 
          把源文件從cvs源代碼倉庫中取出,缺省的版本是最新的版本,你也可以選擇指定的版本。在每次更改源代碼之前,需要Check Out最新的版本,再起基礎之上對源代碼進行修改。將代碼目錄checkout到指定目錄下,所有文件都是read-write。 
          Check In(檢入) 
          把源代碼加入到cvs源代碼倉庫中,每一個添加進代碼庫中的文件的版本是 1.1。以后每次修改文件重新ci以后,此文件的版本遞增為1.2 ,1.3.……。在每次對源代碼修改之后,需要Check In,提交最新版本的源代碼。 
          Synchronize with Repository(與資源庫同步,簡稱同步) 
          使本地更改與資源庫同步,它會列出本地和資源庫之間不同的所有文件。 
          Add to Version Control 
          將新的文件加入到版本控制之中。 
          Add to .cvsIgnore 
          將文件設置到版本控制之外,這樣該文件或目錄中的文件的更改在CVS中不可見,即使同步也無法發現。

          CVS正確使用步驟 
          一、 同步(Synchronize)
           
          就是將本地更改與服務器同步,同步之后可以清晰的看到上一撿出(Check Out)版本之后本地、服務器上的最新改動。這是非常有用的,特別是敏捷開發,強調集體擁有代碼。有了同步功能,你可以全局把握項目的代碼,可以很方便的跟蹤公共模塊代碼的任何改動。 
          具體操作:在Eclipse的資源視圖(Resource Perspective)或者Java視圖(Java Perspective)中,選中要同步的目錄,點擊右鍵選擇"Synchronize with Repository",之后它將顯示同步的視圖。如下圖: 

          (圖一、CVS同步視圖) 
          同步之后,它有四種Mode可以選擇,見上圖綠色框框里按鈕。從做到右分別為: 
          Incoming Mode:表示修改是來自服務器,對應于更新(update)操作。 
          Outgoing Mode:表示修改是來自本地,對應提交(commit)操作。 
          Incoming/ Outgoing Mode:本地和服務器修改都在該模式(Mode)中顯示。 
          Conflicts Mode:顯示本地和服務器修改的沖突文件。 
          二、 更新(update) 
          比較簡單,選擇Incoming Mode,再選中要更新的文件,右鍵選擇update操作。 
          三、 解決沖突并合并(solve conflct and merge) 
          如果有沖突文件,沖突文件不能更新。你必須先解決沖突再操作。選中沖突的文件,再點右鍵選擇"Open in Compare Editor",用比較工具打開該文件。如下圖: 

          (圖二、CVS比較器視圖)

          比較器(Compare)視圖,左邊版本底的是本地文件(Local File),右邊是遠程服務器文件(Remote File)。使用"Select Next Change"按鈕(綠框中的第一箭頭向下按鈕),逐一查看不同點。如果不同點標識為黑色框框,則不用管它。如果是藍色框框,則需要手工調整。如上圖,不同點是藍色框框,將鼠標放到兩個不同點的中間小方框中,則凸出一個向右的按鈕,并顯示提示信息"Copy Current Change from Right to Left",意思是將右邊服務器的不同點覆蓋到左邊的本地文件。點中此按鈕。重復這樣的操作,將所有服務器上的更改拷貝到本地。 
          如果有一行代碼,本地和服務器都同時做了修改。這時,修改點則顯示紅色框框。這時,你就必須手工做正確的修改。全部修改完成,保存本地文件。 
          此時,如果修改點沒有了藍色的框框,就可以開始做合并(merge)操作了。操作也很簡單,選擇該文件,點擊右鍵,選擇"Mark as merged"。 
          注意:必須確保沒有藍色框框,即完全拷貝了服務器的修改才可以做合并(merge)操作,否則會覆蓋服務器上的代碼。 
          四、 提交(commit) 
          更新服務器代碼,解決沖突之后,首先要查看本地文件修改之后是否有錯誤。如果有,當然首先解決錯誤,再提交。 

          posted on 2010-03-30 09:48 二胡 閱讀(528) 評論(0)  編輯  收藏 所屬分類: 版本控制

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 饶平县| 华亭县| 湛江市| 徐州市| 吉林省| 大理市| 韶山市| 泽普县| 马鞍山市| 精河县| 萝北县| 盐边县| 印江| 赞皇县| 铁力市| 龙门县| 合江县| 郁南县| 泰和县| 上犹县| 莱州市| 赣榆县| 满洲里市| 五原县| 汾西县| 抚顺市| 静宁县| 鲁山县| 高碑店市| 波密县| 沂南县| 新宾| 高安市| 五峰| 双鸭山市| 梅河口市| 新乡市| 泾川县| 镇宁| 德惠市| 响水县|