Git在項(xiàng)目協(xié)作開(kāi)發(fā)中所解決問(wèn)題
1、Git的歷史
Git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng),開(kāi)源、免費(fèi)。
Git 是 Linus (林納斯)為了幫助管理 Linux 內(nèi)核開(kāi)發(fā)而開(kāi)發(fā)的一個(gè)開(kāi)放源碼的版本控制軟件。
Tips:
Linus在1991年創(chuàng)建Linux,現(xiàn)在已經(jīng)成為最大的服務(wù)器系統(tǒng)軟件了。
Linux的壯大是靠全世界熱心的志愿者:
在2002年以前,世界各地的志愿者把源代碼文件發(fā)給Linus,然后由Linus本人通過(guò)手工方式合并代碼!
為什么Linus不把Linux代碼放到版本控制系統(tǒng)里呢?
不是有CVS、SVN這些免費(fèi)的版本控制系統(tǒng)嗎?
因?yàn)長(zhǎng)inus堅(jiān)定地反對(duì)CVS和SVN,這些集中式的版本控制系統(tǒng)不但速度慢,而且必須聯(lián)網(wǎng)才能使用。
有一些商用的版本控制系統(tǒng),雖然比CVS、SVN好用,但那是付費(fèi)的,和Linux的開(kāi)源精神不符。
不過(guò),到了2002年,Linux系統(tǒng)已經(jīng)發(fā)展了十年了,代碼庫(kù)之大讓Linus很難繼續(xù)通過(guò)手工方式管理了,社區(qū)的里也對(duì)這種方式表達(dá)了強(qiáng)烈不滿(mǎn),于是Linus選擇了一個(gè)商業(yè)的版本控制系統(tǒng)BitKeeper,BitKeeper的東家BitMover公司出于人道主義精神,授權(quán)Linux社區(qū)免費(fèi)使用這個(gè)版本控制系統(tǒng)。
安定團(tuán)結(jié)的大好局面在2005年就被打破了,原因是Linux社區(qū)牛人聚集,開(kāi)發(fā)Samba的這個(gè)人Andrew,試圖破解BitKeeper的協(xié)議(這么干的其實(shí)也不只他一個(gè)),被BitMover公司發(fā)現(xiàn)了,于是BitMover公司怒了,要收回Linux社區(qū)的免費(fèi)使用權(quán)。
Linus花了兩周時(shí)間自己用C寫(xiě)了一個(gè)分布式版本控制系統(tǒng),這就是Git!一個(gè)月之內(nèi),Linux系統(tǒng)的源碼已經(jīng)由Git管理了!
Linus 對(duì)新的版本控制系統(tǒng)制訂了若干目標(biāo),如下圖所示:

Git迅速成為最流行的分布式版本控制系統(tǒng),尤其是2008年,GitHub網(wǎng)站上線(xiàn)了,它為開(kāi)源項(xiàng)目免費(fèi)提供Git存儲(chǔ),無(wú)數(shù)開(kāi)源項(xiàng)目開(kāi)始遷移至GitHub,包括jQuery,PHP,Ruby等等。
歷史就是這么偶然,如果不是當(dāng)年BitMover公司威脅Linux社區(qū),可能現(xiàn)在我們就沒(méi)有免費(fèi)而超級(jí)好用的Git了。
Git的發(fā)展歷史圖:

2、Git的特點(diǎn)
當(dāng)Git剛剛推出的時(shí)候很多人還對(duì)他發(fā)生質(zhì)疑,但是不久之后因?yàn)镚it具備非常好的特點(diǎn),導(dǎo)致了開(kāi)源社區(qū)很多項(xiàng)目沒(méi)過(guò)多久,就陸陸續(xù)續(xù)的從SVN上轉(zhuǎn)移到Git上來(lái)進(jìn)行版本控制。
(1)Git的特點(diǎn)如下:
- Git中每個(gè)克隆(clone)的版本庫(kù)都是平等的。你可以從任何一個(gè)版本庫(kù)的克隆來(lái)創(chuàng)建屬于你自己的版本庫(kù),同時(shí)你的版本庫(kù)也可以作為源提供給他人,只要你愿意。
- Git的每一次拉取操作,實(shí)際上都是一次對(duì)代碼倉(cāng)庫(kù)的完整備份。
- 提交完全在本地完成,無(wú)須別人給你授權(quán),你的版本庫(kù)你作主,并且提交總是會(huì)成功。
- 甚至基于舊版本的改動(dòng)也可以成功提交,提交會(huì)基于舊的版本創(chuàng)建一個(gè)新的分支。
- Git的提交不會(huì)被打斷,直到你的工作完全滿(mǎn)意了,PUSH給他人或者他人PULL你的版本庫(kù),合并會(huì)發(fā)生在PULL和PUSH過(guò)程中,不能自動(dòng)解決的沖突會(huì)提示您手工完成。
- 沖突解決不再像是SVN一樣的提交競(jìng)賽,而是在需要的時(shí)候才進(jìn)行合并和沖突解決。
- Git版本庫(kù)統(tǒng)一放在服務(wù)器中。Git 也可以模擬集中式的工作模式,同時(shí)Git 的集中式工作模式非常靈活,
- 團(tuán)隊(duì)的成員先將服務(wù)器的版本庫(kù)克隆到本地;并經(jīng)常的從服務(wù)器的版本庫(kù)拉(PULL)最新的更新。
- 團(tuán)隊(duì)的成員將自己的改動(dòng)推(PUSH)到服務(wù)器的版本庫(kù)中,當(dāng)其他人和版本庫(kù)同步(PULL)時(shí),會(huì)自動(dòng)獲取改變。
- 你完全可以在脫離Git服務(wù)器所在網(wǎng)絡(luò)的情況下,如移動(dòng)辦公/出差時(shí),照常使用代碼庫(kù)。
- 你只需要在能夠接入Git服務(wù)器所在網(wǎng)絡(luò)時(shí),PULL和PUSH即可完成和服務(wù)器同步以及提交。
- Git提供
rebase命令,可以讓你的改動(dòng)看起來(lái)是基于最新的代碼實(shí)現(xiàn)的改動(dòng)。 - Git 有更多的工作模式可以選擇,遠(yuǎn)非
Subversion可比。 - 協(xié)同修改,多人可并行修改服務(wù)器端的同一個(gè)文件。
- 數(shù)據(jù)備份,不僅保存目錄和文件的當(dāng)前狀態(tài),還能夠保存每一個(gè)提交過(guò)的歷史狀態(tài)。
- 版本管理,在保存每一個(gè)版本的文件信息的時(shí)候要做到不保存重復(fù)數(shù)據(jù),以節(jié)約存儲(chǔ)空間,提高運(yùn)行效率。這方面SVN采用的是增量式管理的方式,而Git采取了文件系統(tǒng)快照的方式(對(duì)比Hash值)。
- 權(quán)限控制,對(duì)團(tuán)隊(duì)中參與開(kāi)發(fā)的人員進(jìn)行權(quán)限控制。誰(shuí)能創(chuàng)建版本庫(kù),誰(shuí)能向版本庫(kù)PUSH,誰(shuí)能夠讀取(克?。┌姹編?kù)。對(duì)團(tuán)隊(duì)外開(kāi)發(fā)者貢獻(xiàn)的代碼進(jìn)行審核,通過(guò)fork。(Git獨(dú)有)。
- 歷史記錄,查看修改人、修改時(shí)間、修改內(nèi)容、日志信息。將本地文件恢復(fù)到某一個(gè)歷史狀態(tài)。
- 分支管理,允許開(kāi)發(fā)團(tuán)隊(duì)在工作過(guò)程中多條生產(chǎn)線(xiàn)同時(shí)推進(jìn)任務(wù),進(jìn)一步提高效率。
(2)簡(jiǎn)單說(shuō)明:
Git有最優(yōu)的存儲(chǔ)能力以及非凡的性能,得益于林納斯(Linus Torvalds:林納斯·本納第克特·托瓦茲,Linux內(nèi)核的發(fā)明人)本身的這個(gè)技能,他是Linux內(nèi)核專(zhuān)家,也是文件系統(tǒng)的管理專(zhuān)家。所以他開(kāi)發(fā)出來(lái)的Git具備了最優(yōu)的存儲(chǔ)能力以及非凡的性能。林納斯它本身就是崇尚開(kāi)源的,所以他開(kāi)發(fā)的Git也是開(kāi)源的。
Git還很容易做備份,還支持離線(xiàn)的操作?;贕it的分支管理的成本是非常低的,而且也非常容易定制工作流程。
在實(shí)際使用分布式版本控制系統(tǒng)的時(shí)候,其實(shí)很少在兩人之間的電腦上推送版本庫(kù)的修改,因?yàn)榭赡苣銈儌z不在一個(gè)局域網(wǎng)內(nèi),兩臺(tái)電腦互相訪(fǎng)問(wèn)不了,也可能今天你的同事病了,他的電腦壓根沒(méi)有開(kāi)機(jī)。因此分布式版本控制系統(tǒng)通常也有一臺(tái)充當(dāng)”中央服務(wù)器”的電腦,但這個(gè)服務(wù)器的作用僅僅是用來(lái)方便“交換”大家的修改,沒(méi)有它大家也一樣干活,只是交換修改不方便而已。
3、Git在項(xiàng)目協(xié)作開(kāi)發(fā)中所解決的問(wèn)題
- 多人協(xié)作,出現(xiàn)代碼沖突 (版本控制工具)
- 多人協(xié)作,在代碼整合期間引發(fā)BUG(回滾)
- 多人協(xié)作,領(lǐng)導(dǎo)要看項(xiàng)目 (版本歷史)
- 多人協(xié)作,用戶(hù)身份的控制(權(quán)限管理)
- 項(xiàng)目版本的發(fā)布問(wèn)題 (標(biāo)志&里程碑管理)
參考: http://www.dhdzp.com/article/245619.htm
以上就是Git在項(xiàng)目協(xié)作開(kāi)發(fā)中所解決問(wèn)題的詳細(xì)內(nèi)容,更多關(guān)于Git項(xiàng)目協(xié)作開(kāi)發(fā)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Hadoop環(huán)境搭建過(guò)程中遇到的問(wèn)題及解決方法
這篇文章主要介紹了Hadoop環(huán)境搭建過(guò)程中遇到的問(wèn)題及解決方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2019-08-08
有意思的數(shù)據(jù)結(jié)構(gòu)默克樹(shù) Merkle tree應(yīng)用介紹
這篇文章主要為大家介紹了有意思的數(shù)據(jù)結(jié)構(gòu)默克樹(shù) Merkle tree應(yīng)用介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
ol7.7安裝部署4節(jié)點(diǎn)hadoop 3.2.1分布式集群學(xué)習(xí)環(huán)境的詳細(xì)教程
這篇文章主要介紹了ol7.7安裝部署4節(jié)點(diǎn)hadoop 3.2.1分布式集群學(xué)習(xí)環(huán)境,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
gliffy-confluence-plugin-9.1.2插件教程詳解
這篇文章主要介紹了gliffy-confluence-plugin-9.1.2破解教程詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02
MATLAB教程數(shù)據(jù)運(yùn)算變量操作及矩陣表示詳解
這篇文章主要介紹了MATLAB關(guān)于數(shù)據(jù)運(yùn)算變量操作及矩陣表示的內(nèi)容詳解,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家多多進(jìn)步2021-09-09
Vscode中l(wèi)aunch.json與tasks.json文件的詳細(xì)介紹
在VSCode中,launch.json和tasks.json作為兩個(gè)重要的配置文件,能夠幫助開(kāi)發(fā)者實(shí)現(xiàn)調(diào)試和任務(wù)運(yùn)行的自動(dòng)化配置,下面這篇文章主要給大家介紹了關(guān)于Vscode中l(wèi)aunch.json與tasks.json文件的相關(guān)資料,需要的朋友可以參考下2024-07-07

