軟件開發(fā)流程-打包發(fā)布
2014-04-30 16:30:38 訪問(wèn):
一、軟件打包宣布-概述
測(cè)試完成以后的下一步就要斟酌如何進(jìn)行程序發(fā)布了,程序發(fā)布的技術(shù)問(wèn)題這里就不再做具體的解釋,在這里重點(diǎn)講一下如何對(duì)程序的版本進(jìn)行詳細(xì)的管理。
版本控制已經(jīng)出現(xiàn)有些年頭了。然而,我仍是會(huì)被人問(wèn)起一些,諸如版本控制是什么或者它是如何工作的,這樣基礎(chǔ)的問(wèn)題。本文會(huì)概括地解釋版本控制解決的主要問(wèn)題,并用簡(jiǎn)單的案例講授如何進(jìn)行詳細(xì)的管理。
二、版本管理的基礎(chǔ)定義:
版本節(jié)制(Version Control)的作用是追蹤文件的變更。為什么須要版本把持?簡(jiǎn)略說(shuō),就是當(dāng)你犯錯(cuò)了,能夠很輕易地回到?jīng)]出錯(cuò)時(shí)的狀況。
你可能已經(jīng)在人不知鬼不覺(jué)中,安排了自己的版本控制系統(tǒng)。比如,創(chuàng)建了類似下面這樣的文件名:
* KalidAzadResumeOct2006.doc
* KalidAzadResumeMar2007.doc
* instacalc-logo3.webp
* instacalc-logo4.webp
* logo-old.webp
這就是軟件中為什么有"Save As"命令的原因。它使得你可以在不損壞源文件的基礎(chǔ)上,得到一個(gè)相似的新文件。文件的多版本保存是一個(gè)常見問(wèn)題,通常的解決措施是這樣的:
* 做一個(gè)文件備份(比如Document.old.txt)。
* 在文件名中加入版本號(hào)或日期(比如Document_V1.txt,DocumentMarch2007.txt)。
* 在多人編輯的環(huán)境下,共享一個(gè)文件目錄,并且請(qǐng)求每個(gè)人編輯完以后,在文件上做出標(biāo)識(shí)。
三、什么是版本控制系統(tǒng)(VCS)?
通過(guò)文件名辨認(rèn)版本,對(duì)小型名目或者單個(gè)文件也允許行。然而對(duì)于濟(jì)南軟件開發(fā)來(lái)說(shuō),是不實(shí)用的。
你能想像嗎,要是Windows操作系統(tǒng)的源文件,是在一個(gè)叫做"Windows2007-Latest-UPDATED!!"的共享目錄中開發(fā)的,并且每個(gè)程序員都可以編輯,都有一個(gè)本人的子目錄,那會(huì)發(fā)生什么情況?那么,Windows就基本不可能被制作出來(lái)。
大型的、頻繁修正的、多人編寫的軟件項(xiàng)目,需要一個(gè)版本掌握體系(簡(jiǎn)稱VCS,行話叫做"文件數(shù)據(jù)庫(kù)"),追蹤文件的變化,防止呈現(xiàn)凌亂。一個(gè)好的VCS應(yīng)當(dāng)做到以下多少點(diǎn):
* 備份(Backup)和恢復(fù)(Restore)。文件的每一次編輯都得到保存,可以恢復(fù)到任意一個(gè)日期。需要2007年2月23日的版本?沒(méi)問(wèn)題。
* 同步(Synchronization)。讓不同用戶隨時(shí)都能得到文件的最新版本。
* 短期撤銷(Short-term undo)。文件被你搞亂了,怎么辦?那就撤銷編輯,回到最近一次的無(wú)錯(cuò)誤版本。
* 長(zhǎng)期撤銷(Long-term undo)。有時(shí)候,你會(huì)過(guò)了良久才發(fā)現(xiàn)出錯(cuò)了。假如你想撤銷一年前的一次編輯,怎么辦?那就去取回一年之前的那個(gè)版本。
* 追蹤修改(Track Changes)。文件的每一次編輯,你都可以寫下注解,說(shuō)明編輯的起因。(這些信息貯存在VCS中,而不是文件中。)這樣就很容易看出,長(zhǎng)期中文件變化的脈絡(luò)和原因。
* 追蹤權(quán)限(Track Ownership)。VCS會(huì)記錄每一次提交新版本的用戶名。這樣就容易追蹤義務(wù)。
* 實(shí)驗(yàn)功效(Sandboxing)。當(dāng)你對(duì)文件做出重大變革時(shí),你可以把編纂內(nèi)容臨時(shí)性地保留在一個(gè)獨(dú)自的區(qū)域,一直進(jìn)行測(cè)試跟除錯(cuò)。等到確認(rèn)準(zhǔn)確當(dāng)前,再參加主版本。
* 分支(Branching)和合并(merging)。分支功能可以看成是一個(gè)更大的測(cè)試版本。你將全部的代碼做一份拷貝,而后再起一個(gè)獨(dú)破的名字,追蹤其變化,與原版本脫離關(guān)聯(lián),這就是分支。以后,你還可以將分支版本再并入源版本,這就是合并。
固然共享文件夾操作起來(lái)更疾速和簡(jiǎn)單,但是它做不到上面這些功能。
大多數(shù)VCS都有下面一些獨(dú)特的概念,不外名字可能會(huì)稍有不同。
四、版本控制的詳細(xì)案例
目前有良多不同類型的版本控制系統(tǒng)(Version Control System, VCS)。一些VCS,比方Subversion和CVS,以中央倉(cāng)庫(kù)(repository)為核心進(jìn)行架構(gòu)。此外,還有散布式的VCS(Distributed VCS,DVCS), Git 和 Mercurial 是兩個(gè)早先涌現(xiàn)的DVCS。然而,在上述兩品種型的環(huán)境中,通常會(huì)有一個(gè)“指定的”中心倉(cāng)庫(kù)。對(duì)應(yīng)地,好比一個(gè)Subversion服務(wù)器或者一個(gè)GitHub倉(cāng)庫(kù)。下面會(huì)基于這個(gè)場(chǎng)景進(jìn)行圖示闡明。那么讓咱們開端吧。
在開發(fā)者拷貝到本機(jī)之前,服務(wù)器需要?jiǎng)?chuàng)立一個(gè)倉(cāng)庫(kù)。創(chuàng)建初始倉(cāng)庫(kù)會(huì)因?yàn)楫a(chǎn)品不同而有所差異。從當(dāng)初起,你所要曉得的就是,在服務(wù)器上有一個(gè)初始空間。我把這個(gè)版本稱作版本“A”。
現(xiàn)在,每個(gè)開發(fā)者(開發(fā)者1和開發(fā)者2)都會(huì)拷貝版本“A”到他們本地電腦。再一次地,從服務(wù)器拷貝的進(jìn)程會(huì)由于產(chǎn)品不同采取的技巧會(huì)有所差別。
每個(gè)開發(fā)者會(huì)在他們的本地拷貝長(zhǎng)進(jìn)行開發(fā)。他們的本地拷貝基于版本“A”。然而,因?yàn)樗麄儜?yīng)該不會(huì)做同樣的開發(fā),因此他們的版本會(huì)有所差別。因而,會(huì)有2個(gè)以上的版本會(huì)同時(shí)被創(chuàng)建,比如版本“B&rdquo,電腦公司管理系統(tǒng);和版本“C”。
開發(fā)者1首先完成了她的工作并提交到服務(wù)器。服務(wù)器上確當(dāng)前版本被更新成版本“B”。
開發(fā)者2現(xiàn)在完成了他的工作并試圖提交到服務(wù)器。然而,這是服務(wù)器告訴他基于開發(fā)的版本已經(jīng)發(fā)生轉(zhuǎn)變。這也是為什么采用版本控制的重要原因之一。這個(gè)特征是對(duì)網(wǎng)絡(luò)共享代碼然后由開發(fā)者手動(dòng)更新的一個(gè)逾越式發(fā)展,這確保了之前的編輯不被新的修改籠罩。
開發(fā)者2必需首先取得所有版本“B”的變化,并合并到他的修改中,然后才可以提交到服務(wù)器。這個(gè)過(guò)程聽起來(lái)有些龐雜。然而,大多數(shù)古代的版本控制系統(tǒng)非常高級(jí),可以主動(dòng)在開發(fā)者的本地拷貝上完成合并。有幾種情形會(huì)發(fā)生抵觸(例如:開發(fā)者1和開發(fā)者2同時(shí)修改了統(tǒng)一個(gè)文件的同一行)。這就是一些VCS產(chǎn)品比其他更高等的處所。不管如何實(shí)現(xiàn)合并,現(xiàn)在開發(fā)者2在他們的本地系統(tǒng)上同時(shí)混雜了版本B和版本C。
現(xiàn)在開發(fā)者2可以提交他的版本到服務(wù)器。
這是一個(gè)版本控制的基本。通過(guò)留神察看圖中服務(wù)器的連線可以發(fā)明版本控制的原理。服務(wù)器記載了所有先前的版本包含發(fā)生的變化,什么時(shí)候產(chǎn)生以及由誰(shuí)進(jìn)行修改。當(dāng)需要進(jìn)行代碼回溯或者引入其余bug時(shí),這個(gè)記載可能解除窘境。