軟件的版本控制
版本控制是一種技術(shù)菠劝,它能幫助我們記錄一個(gè)文件從誕生到定案的過程中發(fā)生的變化维雇,便于將來查閱特定版本的修訂情況淤刃。
1 沒有版本控制時(shí)的問題
如果我們沒有對編寫的代碼進(jìn)行版本控制,那么會(huì)出現(xiàn)以下幾個(gè)問題:
- 需要手動(dòng)備份不同版本的代碼吱型,浪費(fèi)時(shí)間和空間逸贾。
- 難以恢復(fù)至以前的正確版本。例如:我上周寫的代碼是對的津滞,這周改出問題了铝侵,但是沒有對上周寫的進(jìn)行備份,如果想恢復(fù)到上周寫的樣子触徐,那就得重新寫一遍咪鲜。
- 代碼整合過程需要人工拷貝,再復(fù)制和粘貼锌介,極其繁瑣嗜诀。
- 修復(fù)Bug困難。例如:現(xiàn)在需要整合代碼孔祸,大家都紛紛開始復(fù)制和粘貼代碼隆敢,所有人都把自己寫的代碼放在前面,別人寫的代碼放在后面崔慧。如果合并的代碼出現(xiàn)了沖突拂蝎,有人說第100行代碼有運(yùn)行時(shí)錯(cuò)誤需要修改,那么問題來了惶室,每個(gè)人的第100行代碼都不同温自,修改代碼的過程變得困難。
- 難以追溯問題代碼的修改人和修改時(shí)間皇钞,如果不寫注釋的話悼泌。
- 代碼管理混亂,項(xiàng)目版本發(fā)布困難夹界。要想開發(fā)一個(gè)產(chǎn)品馆里,如果每個(gè)人手上的代碼都不一樣,那么就需要花費(fèi)時(shí)間來討論一個(gè)問題:到底用誰的代碼去發(fā)布成產(chǎn)品可柿。
2 版本控制工具
目前主要有三種版本控制工具鸠踪,分別是CVS、SVN和Git复斥。因?yàn)镃VS已經(jīng)過時(shí)营密,所以在這里只介紹SVN和Git。
2.1 SVN
SVN(Subversion)是一個(gè)集中式的版本控制工具目锭。
開發(fā)人員使用SVN工作時(shí)的流程圖:
01-SVN工作流程圖.png
SVN的特點(diǎn):使用統(tǒng)一的中央倉庫對文件進(jìn)行集中式的管理评汰。
SVN的優(yōu)點(diǎn):
- 操作簡單,學(xué)習(xí)成本低侣集。
- 能對文件進(jìn)行權(quán)限控制键俱。
SVN的缺點(diǎn):在沒有網(wǎng)絡(luò)的情況下就不能對文件進(jìn)行版本控制操作。
SVN的適用場景:有權(quán)限控制的代碼開發(fā)(即不是每個(gè)人都可以看到項(xiàng)目中的所有代碼)和軟件文檔的管理世分。
2.2 Git
Git是一個(gè)分布式的版本控制工具编振。
開發(fā)人員使用Git工作時(shí)的流程圖:
02-Git工作流程圖.png
Git的特點(diǎn):既能集中式又能分布式地管理文件。Git的集中式管理模式和SVN的一樣臭埋,它的分布式管理模式是每個(gè)開發(fā)人員都要自己維護(hù)一個(gè)與中央倉庫關(guān)聯(lián)的本地倉庫踪央。
Git的優(yōu)點(diǎn):
- 分布式管理,數(shù)據(jù)不易丟失瓢阴。因?yàn)槊總€(gè)客戶端上都持有一個(gè)與中央倉庫一樣的本地倉庫畅蹂,所以當(dāng)中央倉庫的數(shù)據(jù)丟失時(shí),可以從任意一個(gè)客戶端上獲取數(shù)據(jù)進(jìn)行恢復(fù)荣恐。
- 支持離線版本控制液斜。在沒有網(wǎng)絡(luò)的時(shí)候累贤,開發(fā)人員可以使用本地倉庫進(jìn)行版本控制操作,待有網(wǎng)后少漆,再將改變的內(nèi)容推送到中央服務(wù)器臼膏。
- 支持現(xiàn)場版本控制。例如:產(chǎn)品部署在客戶那邊示损,出了Bug渗磅,需要去現(xiàn)場進(jìn)行修復(fù)。如果我們使用的是SVN检访,我們需要將修改完的代碼拷貝回來始鱼,然后復(fù)制粘貼進(jìn)工程,最后再與SVN進(jìn)行同步脆贵。反之医清,如果我們使用的是Git,我們只需要在工程的目錄下初始化Git卖氨,然后修正Bug状勤,最后再打個(gè)補(bǔ)丁把補(bǔ)丁帶回去就行了。
- 服務(wù)器壓力小双泪。因?yàn)槭褂肧VN的開發(fā)人員會(huì)一直連著服務(wù)器進(jìn)行操作持搜,但是使用Git的開發(fā)人員可能是一周甚至一個(gè)月才與服務(wù)器進(jìn)行交互,所以SVN服務(wù)器承受的訪問量與數(shù)據(jù)量要比Git服務(wù)器大很多焙矛。
- 支持補(bǔ)丁技術(shù)葫盼。任意兩個(gè)開發(fā)人員可以通過補(bǔ)丁來整合代碼,整合過程不通過中央服務(wù)器村斟。
- Git的響應(yīng)速度比SVN快贫导。
Git的缺點(diǎn):
- 學(xué)習(xí)成本高。因?yàn)樾枰獙W(xué)習(xí)很多的操作指令蟆盹。
- 不能對文件進(jìn)行權(quán)限控制孩灯。因?yàn)镚it使用分布式管理,所以每個(gè)客戶端就會(huì)持有與中央服務(wù)器一樣的倉庫逾滥,擁有了一樣的倉庫就擁有了中央倉庫上所有的代碼峰档。
Git的適用場景:無權(quán)限控制的代碼開發(fā)。