一直使用MyEclipse進行項目開發,利用CVS進行版本控制,常常會遇到衝突,一直不太瞭解產生緣由及解決方法,通過網上一番查找資料,終於弄懂了,mark一下!html
首先是衝突產生的緣由,說來很簡單:A、B同時下載服務器上同一文件,A修改完後同步到服務器,此時B也完成修改後,要將文件同步到服務器上,此時服務器和本地文件都發生改變,因此就會產生衝突。java
解決辦法就是人工手動檢查錯誤,將服務器上的改動添加到本地,再將本地的改動同步到服務器,便可完成版本更新。其中要用到一個功能:mark as merged。做用就是忽略衝突,將本地文件直接覆蓋掉服務器上的文件。shell
此處粘上一些我查到的有用的文章,以供查閱!windows
ZZ1:http://topic.csdn.net/u/20120616/21/a672a836-ecac-4272-a69b-3b2dfce3829d.html安全
用了mark as merged後,再commit仍是把別人的東西覆蓋掉了。服務器
最後,作了實驗發現以下問題。
1.有一個test文檔。其中,內容是
aaa網絡
2.A加上一行:
aaa
bbb併發
3.同時,B也加了一行:
aaa
ccceclipse
4.B commit分佈式
5.A 同步test文件,出現紅色的雙箭頭,說明本地和服務器都有更新。
6.A 採用 mark as merged命令。以後,test文件變成灰色的向右箭頭,說明A的本地文件中一同步B的變動。
7.A commit
8.最後發現,服務器上的test文件中竟然沒有B的內容,只有:
aaa
bbb
結論:此法會覆蓋掉服務器上的文件!
ZZ2:http://www.blogjava.net/sgsoft/articles/737.html
版本控制工具
版本控制是程序開發、管理必不可少的工具,特別是在多人協做的團隊中,適宜的版本控制工具能夠提升開發效率,消除不少有代碼版本帶來的問題。本文首先列舉沒有版本控制工具時可能遇到的問題,再對主流版本控制工具作概要介紹,以後對做爲Java開發者首選的版本控制工具CVS的歷史、功能、概念作詳細的介紹;最後在Eclipse+CVS環境中,以CVS使用的一個完整流程爲例,介紹如何正確的使用CVS工具。
爲何要使用版本控制工具?
若是沒有版本控制工具的協助,在開發中咱們常常會遇到下面的一些問題:
1、 代碼管理混亂。若是是別人添加或刪除一個文件,你很難發現。沒有辦法對文件代碼的修改追查跟蹤。甚至出現文件丟失,或新版本代碼被同伴無心覆蓋等現象。
2、 解決代碼衝突困難。當你們同時修改一個公共文件時,解決代碼衝突是一件很頭疼的事。最原始的辦法是手工打開衝突文件,逐行比較,再手工粘貼複製。更高級的作法是使用文件比較工具,但仍省不了繁雜的手工操做,一不當心,甚至會引入新的bug。
3、 在代碼整合期間引入深層BUG。例如開發者A寫了一個公共函數,B以爲正好能夠複用;後來A又對這個公共函數進行了修改,添加了新的邏輯,而這個改動的倒是B不想要的。或者是A發現這個公共函數不夠用,又新作了一個函數,B卻沒有及時得到通知。這些,都爲深層BUG留下隱患。
4、 沒法對代碼的擁有者進行權限控制。代碼徹底暴露在全部的開發者面前,任何人均可以隨意進行增、刪、改操做,沒法指定明確的人對代碼進行負責。特別是產品的開發,這是極其危險的。
5、 項目不一樣版本發佈困難。特別是對產品的開發,你會頻繁的進行版本發佈,這時若是沒有一個有效的管理產品版本的工具,一切將變得很是艱難。
上面只是列舉了一些沒有版本控制系統可能帶來的問題,特別是對大型項目和異地協同開發有了一個合適的版本控制工具,它能夠有效解決由於代碼版本不一樣引發的各類問題,讓咱們的開發人員能更多的把精力花費在開發上面。而不是每次都花費不少時間進行代碼整合和解決版本不一樣帶來的各類問題。
主流版本控制工具介紹
如今,有不少優秀的版本控制工具供咱們選擇,下面就五種主流的版本控制工具作簡單的介紹。
Starteam
是一個集合了版本控制、構建管理(Build Management)和缺陷跟蹤系統爲一體的軟件,而且具備強大的圖形界面,易學易用;但管理複雜、維護困難。2002年末被Borland公司收購。
PVCS Version Manager
是美國的MERANT公司軟件配置管理工具PVCS 家族中的一個組成部分,它可以實現源代碼、可執行文件、應用文件、圖形文件和文檔的版本管理;它能安全地支持軟件並行開發,對多個軟件版本的變動進行有效的控制管理。
ClearCase(CC)
是ROSE構件的一部分,目前最牛的配置管理工具,主要應用於複雜的產品發放、分佈式團隊合做、並行的開發和維護任務。能夠控制word, excel,powerpoint,visio等文件格式,對於不認識的格式能夠本身定義一種類型來標識。
Visual SourceSafe(VSS)
簡單易用、方便高效、與Windows操做系統及微軟開發工具高度集成。
CVS(Concurrent Versions System)
是開發源碼的併發版本系統,它是目前最流行的面向軟件開發人員的源代碼版本管理解決方案。它可用於各類平臺,包括 Linux 、Unix和 Windows NT/2000/XP等等。
前面三種是重量級的商業版本控制工具,更適合龐大的團隊和項目,而且價格不菲。Visual SourceSafe是微軟的產品,固然只能用在windows平臺並與微軟的開發工具無縫集成。CVS免費開源,而且幾乎全部開源項目都是使用CVS進行版本管理,無疑,它是咱們Java開發者最優選擇。
CVS的歷史、功能、基本概念的介紹
歷史
CVS 誕生於 1986 年,當時做爲一組 shell 腳本而出現;1989年3月,Brian Berlinor用C語言從新設計並編寫了CVS的代碼;1993年先後,Jim Kingdon最終將CVS設計成基於網絡的平臺,開發者們能從Internet任何地方得到程序源代碼。截至目前最新版本是2004年12月13日發佈的1.12.11。
功能介紹
1、 代碼統一管理,保存全部代碼文件更改的歷史記錄。對代碼進行集中統一管理,能夠方便查看新增或刪除的文件,可以跟蹤全部代碼改動痕跡。能夠隨意恢復到之前任意一個歷史版本。並避免了由於版本不一樣引入的深層BUG。
2、 完善的衝突解決方案,能夠方便的解決文件衝突問題,而不須要藉助其它的文件比較工具和手工的粘貼複製。
3、 代碼權限的管理。能夠爲不一樣的用戶設置不一樣的權限。能夠設置訪問用戶的密碼、只讀、修改等權限,並且經過CVS ROOT目錄下的腳本,提供了相應功能擴充的接口,不但能夠完成精細的權限控制,還能完成更加個性化的功能。
4、 支持方便的版本發佈和分支功能。
基本概念
資源庫(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正確使用步驟
1、 同步(Synchronize)
就是將本地更改與服務器同步,同步以後能夠清晰的看到上一撿出(Check Out)版本以後本地、服務器上的最新改動。這是很是有用的,特別是敏捷開發,強調集體擁有代碼。有了同步功能,你能夠全局把握項目的代碼,能夠很方便的跟蹤公共模塊代碼的任何改動。
具體操做:在Eclipse的資源視圖(Resource Perspective)或者Java視圖(Java Perspective)中,選中要同步的目錄,點擊右鍵選擇"Synchronize with Repository",以後它將顯示同步的視圖。以下圖:
(圖1、CVS同步視圖)
同步以後,它有四種Mode能夠選擇,見上圖綠色框框裏按鈕。從作到右分別爲:
Incoming Mode:表示修改是來自服務器,對應於更新(update)操做。
Outgoing Mode:表示修改是來自本地,對應提交(commit)操做。
Incoming/ Outgoing Mode:本地和服務器修改都在該模式(Mode)中顯示。
Conflicts Mode:顯示本地和服務器修改的衝突文件。
2、 更新(update)
比較簡單,選擇Incoming Mode,再選中要更新的文件,右鍵選擇update操做。
3、 解決衝突併合並(solve conflct and merge)
若是有衝突文件,衝突文件不能更新。你必須先解決衝突再操做。選中衝突的文件,再點右鍵選擇"Open in Compare Editor",用比較工具打開該文件。以下圖:
(圖2、CVS比較器視圖)
比較器(Compare)視圖,左邊版本底的是本地文件(Local File),右邊是遠程服務器文件(Remote File)。使用"Select Next Change"按鈕(綠框中的第一箭頭向下按鈕),逐一查看不一樣點。若是不一樣點標識爲黑色框框,則不用管它。若是是藍色框框,則須要手工調整。如上圖,不一樣點是藍色框框,將鼠標放到兩個不一樣點的中間小方框中,則凸出一個向右的按鈕,並顯示提示信息"Copy Current Change from Right to Left",意思是將右邊服務器的不一樣點覆蓋到左邊的本地文件。點中此按鈕。重複這樣的操做,將全部服務器上的更改拷貝到本地。
若是有一行代碼,本地和服務器都同時作了修改。這時,修改點則顯示紅色框框。這時,你就必須手工作正確的修改。所有修改完成,保存本地文件。
此時,若是修改點沒有了藍色的框框,就能夠開始作合併(merge)操做了。操做也很簡單,選擇該文件,點擊右鍵,選擇"Mark as merged"。
注意:必須確保沒有藍色框框,即徹底拷貝了服務器的修改才能夠作合併(merge)操做,不然會覆蓋服務器上的代碼。
4、 提交(commit)
更新服務器代碼,解決衝突以後,首先要查看本地文件修改以後是否有錯誤。若是有,固然首先解決錯誤,再提交。
附錄:
http://www.8848software.com/scmchina/scmtools.htm 由不少版本控制工具的文檔連接。
http://www.perforce.com/perforce/reviews.html Infrastructure Group對Perforce 和Clearcase, CVS, PVCS,Visual SourceSafe (VSS)幾種CM工具進行了定量和定性的比較. 對於定性的比較,內容涉及工具支持的方法和環境;對於定量的比較,包括在不一樣的項目規模上,執行不一樣的活動所須要的時間。
---------------------------
討論摘錄:
單就功能來講,Subversion 比起 CVS 仍是要多了一些東西的,有些仍是不錯的;至於「市場」,仍是要看需求,如今已經有一些開元軟件在使用 Subversion 了。
以爲 WinCVS 很差用的,能夠試試 TortoiseCVS,這是一個徹底與資源管理器集成的 CVS 工具,比較符合 Windows 使用者的思路,很容易上手;主頁是http://tortoisecvs.sourceforge.net。
對於 Subversion,也有類似的工具 TortoiseSVN,使用方法幾乎徹底相同,主頁是http://tortoisesvn.tigris.org。
一樣,網站上也提供了其餘關於軟件配置管理工具的部分學習資料下載:
參考:http://www.askguoyu.com
轉自:https://blog.csdn.net/herb777/article/details/7696332
做者:herb777