一、簡(jiǎn)史
Git 是因?yàn)長(zhǎng)inux 內(nèi)核開源社區(qū)與分布式版本控制系統(tǒng)的BitKeeper的合作結(jié)束针史,人家不給用了,怎么辦呢碟狞?自己開發(fā)一套唄啄枕,Git就誕生了。
二族沃、基礎(chǔ)
Git與(SVN频祝,CVS, Perforce)有什么區(qū)別?
都是版本控制系統(tǒng),我自己用過SVN和Git脆淹,最大的區(qū)別就是Git可以在家里不用連VPN就能夠提交版本常空。而SVN就必須連網(wǎng)才可以。那么造成這種差異的原因呢盖溺?
因?yàn)閮煞N系統(tǒng)的實(shí)現(xiàn)方式不一樣漓糙。以SVN為例,SVN是記錄每個(gè)文件的哪些內(nèi)容變化烘嘱,進(jìn)行版本控制的昆禽。而Git則是比較整個(gè)文件的變化。這么說有點(diǎn)兒抽象蝇庭,看圖吧醉鳖。
SVN等系統(tǒng)的記錄版本的方式。
每次記錄有哪些文件作了更新哮内,以及都更新了哪些行的什么內(nèi)容盗棵。
Git 并不保存這些前后變化的差異數(shù)據(jù)。實(shí)際上,Git 更像是把變化的文件作快照后漾根,記錄在一個(gè)微型的文件系統(tǒng)中泰涂。每次提交更新時(shí),它會(huì)縱覽一遍所有文件的指紋信息并對(duì)文件作一快照辐怕,然后保存一個(gè)指向這次快照的索引逼蒙。為提高性能,若文件沒有變化寄疏,Git 不會(huì)再次保存是牢,而只對(duì)上次保存的快照作一鏈接。Git 的工作方式就像下圖所示陕截。
Git幾乎所有的操作都可以在本地完成
與svn總是從服務(wù)器更新數(shù)據(jù)相比驳棱,Git可以在本地完成很多的操作。因?yàn)?Git 在本地磁盤上就保存著所有當(dāng)前項(xiàng)目的歷史更新农曲,所以處理起來速度飛快社搅。用 CVCS 的話,沒有網(wǎng)絡(luò)或者斷開 VPN 你就無法做任何事情乳规。但用 Git 的話形葬,就算你在飛機(jī)或者火車上,都可以非常愉快地頻繁提交更新暮的,等到了有網(wǎng)絡(luò)的時(shí)候再上傳到遠(yuǎn)程倉(cāng)庫(kù)笙以。
時(shí)刻保持?jǐn)?shù)據(jù)完整性
Git 使用 SHA-1 算法計(jì)算數(shù)據(jù)的校驗(yàn)和,通過對(duì)文件的內(nèi)容或目錄的結(jié)構(gòu)計(jì)算出一個(gè) SHA-1 哈希值冻辩,作為指紋字符串猖腕。該字串由 40 個(gè)十六進(jìn)制字符(0-9 及 a-f)組成,看起來就像是:
24b9da6552252987aa493b52f8696cd6d3b00373
Git 的工作完全依賴于這類指紋字串恨闪,所以你會(huì)經(jīng)程雀校看到這樣的哈希值。實(shí)際上凛剥,所有保存在 Git 數(shù)據(jù)庫(kù)中的東西都是用此哈希值來作索引的侠仇,而不是靠文件名。
文件的三種狀態(tài)
重點(diǎn)犁珠!重點(diǎn)!重點(diǎn)互亮!
對(duì)于任何一個(gè)文件犁享,在 Git 內(nèi)都只有三種狀態(tài):
已提交(committed),
已修改(modified)
已暫存(staged)豹休。
已提交表示該文件已經(jīng)被安全地保存在本地?cái)?shù)據(jù)庫(kù)中了炊昆;
已修改表示修改了某個(gè)文件,但還沒有提交保存;
已暫存表示把已修改的文件放在下次提交時(shí)要保存的清單中凤巨。
基本的 Git 工作流程如下:
在工作目錄中修改某些文件视乐。
對(duì)修改后的文件進(jìn)行快照,然后保存到暫存區(qū)域敢茁。
提交更新佑淀,將保存在暫存區(qū)域的文件快照永久轉(zhuǎn)儲(chǔ)到 Git 目錄中。