隨著(zhù)技術(shù)的發(fā)展,新的管理技術(shù)以及管理理念不斷涌現。版本控制、單元測試、以及項目自動(dòng)化這三大技術(shù)現在已經(jīng)成為很多軟件項目賴(lài)以成功的基石。
版本控制
為什么要使用版本控制系統?
Ø 給團隊提供一個(gè)項目級別的撤銷(xiāo)按鈕
Ø 記錄著(zhù)項目每時(shí)每刻的改動(dòng)
Ø 使得多個(gè)程序員可以有序的同時(shí)為一個(gè)項目寫(xiě)代碼
國內早期的版本管理多數使用Microsoft的Visual SourceSafe6.0簡(jiǎn)稱(chēng)VSS,使用這種管理方式多數是單線(xiàn)的管理方式,雖然VSS也提供一些分支與共享功能,但是它的性能低下,而且經(jīng)常會(huì )出現問(wèn)題,其可用性不高。其主要的版本管理模式如下圖。
.jpg)
圖1:VSS中的代碼倉庫生命周期
中間的方塊顯示了我們代碼倉庫的狀態(tài),在最開(kāi)始只有一個(gè)主干(標準版)程序,我們把這個(gè)程序應用于項目1的時(shí)候,可能會(huì )發(fā)現一些新需求或者新BUG。然后我們在代碼倉庫上進(jìn)行修改,把這些改動(dòng)簽入了版本庫,這時(shí)我們的標準版仍有可能在改動(dòng),程序員可能會(huì )為標準版添加一些新特性(用*表示改動(dòng)了),這就意味著(zhù)版本可能出于一種不穩定的狀態(tài),新特性可能短時(shí)間內不能達到可以發(fā)布的狀態(tài),這時(shí)給項目1的團隊更新程序(即發(fā)布新版本)時(shí)就要把這些不穩定的新特性代碼過(guò)濾掉,再進(jìn)行發(fā)布,當多個(gè)項目同時(shí)使用這個(gè)代碼倉庫時(shí),會(huì )造成了一個(gè)目錄中實(shí)際疊加了多個(gè)項目的代碼。這是這種早期版本控制方式的主要缺陷。在VSS之后出現的CVS(Concurrent Version System)軟件統治了版本管理領(lǐng)域相當長(cháng)一段時(shí)間,CVS針對VSS存在的問(wèn)題做出了一定的改善,但是仍不能滿(mǎn)足需求。最終Subversion(簡(jiǎn)稱(chēng)SVN)出現了,總結了CVS的長(cháng)處,改進(jìn)了不足,力圖成為CVS的接班人,它也的確做到了?,F在幾乎主流的開(kāi)源組織,以及提供網(wǎng)上代碼倉庫的網(wǎng)站都在使用Subversion,他們包括鼎鼎大名的Apache Software Foundation、Google Code、SourceForge.net等Subversion中分支是非常重要的概念。Subversion認為:開(kāi)發(fā)者應該使用分支把與主線(xiàn)開(kāi)發(fā)(標準版開(kāi)發(fā))具有不同生命周期的代碼(如各項目的發(fā)布版)從主線(xiàn)中分離出去。Subversion中項目具有如下的結構。

圖2:Subversion中代碼倉庫的生命周期
程序員們在主干目錄上進(jìn)行開(kāi)發(fā)。當代碼已經(jīng)處于比較完善的狀態(tài)時(shí),決定發(fā)布它并在項目1中使用。這時(shí)我們應該在分支目錄中為主干目錄創(chuàng )建一個(gè)分支(在Subversion中即一個(gè)拷貝)并打上一個(gè)標簽(如XX月XX日發(fā)貨,打標簽在Subversion中也是一個(gè)拷貝),然后項目1的工作組負責對這個(gè)分支進(jìn)行維護,而主要的開(kāi)發(fā)團隊仍在主干上進(jìn)行開(kāi)發(fā)。這樣主干和項目分支物理上處于不同的目錄,各自有獨立的生命周期,程序員對主干的標準版程序添加代碼不會(huì )對項目1造成影響,項目1分支中的代碼將會(huì )保持相對的穩定,對項目1的修改也可以有選擇的轉移到標準版中(這個(gè)轉移混合的過(guò)程在Subversion中是非常容易實(shí)現)。各個(gè)版本不會(huì )互相混淆,隨時(shí)可以取得各個(gè)發(fā)布版本。在Subversion中,分支主要用于發(fā)布、BUG修正、以及技術(shù)試驗。除此之外Subversion還提供了很多很好的特性,如:
1.所有的文件統一使用一個(gè)版本號,這樣每一個(gè)版本號在項目生命周期代表一個(gè)切片,保留了一個(gè)一致性的快照。
2.支持多人同時(shí)遷出一個(gè)文件,只要不同時(shí)修改同一行,Subversion都可以智能的進(jìn)行合并,如果在同一行上存在沖突,Subversion會(huì )提示你解決他。你也可以鎖定這個(gè)文件以避免其他人簽出。
3.一次提交不管是單個(gè)還是多個(gè)文件,都是作為一個(gè)整體提交的,在這當中發(fā)生的意外例如傳輸中斷,不會(huì )引起數據庫的不完整和數據損壞。
Subversion的理念與VSS是不同的。使用VSS的感覺(jué)像套著(zhù)沉重的枷鎖,而Subversion更像是是一個(gè)輕巧的拐棍,幫助你將項目不同的版本管理的井井有條。
聯(lián)系客服