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