來源:Git由淺入深之基本原理
作者:驚鴻三世
萬丈高樓平地起编丘,萬事只有打好基礎(chǔ)摆舟,才能有所成就,學(xué)習(xí)亦是一樣雾家。本篇開始介紹Git基礎(chǔ)工作理論铃彰,學(xué)完本篇,我們應(yīng)該知道什么是Git芯咧,Git是如何工作的,以及Git與SVN等分布式版本控制系統(tǒng)的主要區(qū)別竹揍。
什么是Git
一言以蔽之敬飒,Git是一個(gè)分布式版本控制系統(tǒng)(DVCS),大家都知道,那它與其他的集中式版本控制系統(tǒng)芬位,如SVN等有什么差別呢无拗?這就要從Git的特性開始介紹,介紹完昧碉,就清楚了Git是怎么工作的英染,及他與SVN等的差別揽惹。
快照(Snapshots)與記錄變更(Differences)
Git與SVN最大的差別在于它們?nèi)绾翁幚頂?shù)據(jù):
- SVN等大多數(shù)版本控制系統(tǒng)存儲(chǔ)的數(shù)據(jù)是一系列記錄項(xiàng)目文件變更的文件。
- Git存儲(chǔ)的數(shù)據(jù)則更像是一個(gè)微型文件系統(tǒng)的一系列快照四康,即快照流搪搏。
每次提交或保存當(dāng)前項(xiàng)目狀態(tài),Git都會(huì)生成一個(gè)當(dāng)前所有文件狀態(tài)的快照闪金,并存儲(chǔ)一個(gè)對(duì)該快照的引用疯溺;而且文件沒有發(fā)生變化時(shí),Git不會(huì)重復(fù)保存快照哎垦,而只是鏈接到之前的標(biāo)識(shí)文件囱嫩。
也許,你可以把Git想象成一個(gè)小型文件系統(tǒng)漏设,而不僅僅是一個(gè)版本控制系統(tǒng)墨闲,這有助于你比較Git與其他版本控制系統(tǒng)。
操作本地化
在傳統(tǒng)的VCS中郑口,大多數(shù)操作都依賴于網(wǎng)絡(luò)损俭,特別在網(wǎng)絡(luò)延遲高時(shí),那種痛苦感潘酗,相信你是不想有第二次體驗(yàn)的杆兵;而Git的大部分操作都是基于本地文件和資源的,而不需要通過網(wǎng)絡(luò)從其他計(jì)算機(jī)獲取信息仔夺,Git將整個(gè)項(xiàng)目歷史保存在本地磁盤琐脏,使得大多數(shù)操作似乎沒有延遲感。
比如缸兔,需要查看項(xiàng)目歷史記錄時(shí)日裙,Git不再需要從服務(wù)器獲取,可以直接從本地磁盤讀取惰蜜,操作很快昂拂;又或者我們需要查看某一文件在兩個(gè)不同時(shí)間點(diǎn)的區(qū)別,Git可以查詢?cè)撐募煌瑫r(shí)間點(diǎn)的狀態(tài)抛猖,并計(jì)算出變更格侯,而不需要從服務(wù)器獲取不同版本文件或者請(qǐng)求服務(wù)器計(jì)算它們點(diǎn)變更。即使與服務(wù)器的連接斷開甚至網(wǎng)絡(luò)斷線财著,也不會(huì)受太大限制联四,我們可以在本地對(duì)文件進(jìn)行編輯,保存撑教,然后等連接正常時(shí)再上傳朝墩,而在其他的版本控制系統(tǒng),這些幾乎不可能伟姐。
健全性
Git在存儲(chǔ)任何數(shù)據(jù)前都會(huì)先計(jì)算并存儲(chǔ)其校驗(yàn)和收苏,隨后通過該校驗(yàn)和亿卤,而不是文件名訪問存儲(chǔ)數(shù)據(jù),這意味著Git可以探測(cè)到任何文件或目錄的變更鹿霸,即使數(shù)據(jù)發(fā)生丟失排吴,Git也能知道。
Git生成校驗(yàn)和的機(jī)制叫做SHA-1哈希杜跷,為什么通過該校驗(yàn)和可以訪問到存儲(chǔ)數(shù)據(jù)呢傍念?因?yàn)樗腔谖募?nèi)容或目錄結(jié)構(gòu)計(jì)算得出一個(gè)由40個(gè)十六進(jìn)制字符組成的字符串,比如:24b9da6552252987aa493b52f8696cd6d3b00373葛闷。
操作數(shù)據(jù)
對(duì)數(shù)據(jù)進(jìn)行版本管理憋槐,無非就是對(duì)數(shù)據(jù)進(jìn)行增刪改并記錄,在傳統(tǒng)的VCS中淑趾,我們沒有提交至服務(wù)器的任何新增文件或變更阳仔,都很容易就可以被錯(cuò)誤刪除或再次修改,這時(shí)我們是無法找回之前需要提交的內(nèi)容的扣泊;然而在Git中近范,只要我們?cè)诒镜靥峤涣隧?xiàng)目當(dāng)前的快照,幾乎不會(huì)出現(xiàn)數(shù)據(jù)丟失的情況延蟹,而且無論是否提交數(shù)據(jù)到服務(wù)器我們都可以隨時(shí)找回之前保存過的內(nèi)容或變更评矩,即使在中途某次操作誤刪除或誤修改,因?yàn)镚it中的幾乎所有操作阱飘,都是在向Git數(shù)據(jù)庫添加數(shù)據(jù)或變更記錄斥杜。
三種狀態(tài)
介紹到現(xiàn)在,終于進(jìn)入本篇最重點(diǎn)的內(nèi)容:Git的三種狀態(tài)
在Git沥匈,文件可能有三種狀態(tài):已提交(committed)蔗喂,已修改(modified),暫存(staged)
- 已提交(commited)高帖,說明數(shù)據(jù)已經(jīng)存儲(chǔ)在本地?cái)?shù)據(jù)庫缰儿;
- 已修改(modified),說明數(shù)據(jù)被修改散址,但是尚未存儲(chǔ)到本地?cái)?shù)據(jù)庫乖阵;
- 暫存(staged),說明已標(biāo)記將一個(gè)被修改的文件(當(dāng)前版本)添加到待提交的快照中爪飘。
這三種狀態(tài)分別對(duì)應(yīng)Git項(xiàng)目的三大區(qū)塊:Git目錄义起,工作目錄,暫存區(qū)
- Git 目錄(repository)师崎,即Git存儲(chǔ)項(xiàng)目元數(shù)據(jù)和對(duì)象數(shù)據(jù)庫的地方,也就是我們克乱喂住(clone)某項(xiàng)目倉庫時(shí)拷貝下的內(nèi)容所在地犁罩;
- 工作目錄(working directory)齐蔽,即從項(xiàng)目某版本中檢出的當(dāng)前所處分支,也就是從Git目錄數(shù)據(jù)庫中拉取的文件在本地磁盤保存所在地床估;
- 暫存區(qū)(staging area)含滴,即一個(gè)文件,通常包含在Git目錄中丐巫,存儲(chǔ)下一次需提交的內(nèi)容谈况,有時(shí),它指向我們所說的“index”索引递胧。
基本工作流程
我們使用Git時(shí)的一次基本工作流程如下:
- 從Git目錄碑韵,檢出分支到工作目錄
- 在工作目錄修改文件
- 暫存文件,將其添加到待提交快照
- 提交缎脾,將快照持久化提交到Git目錄
學(xué)完本篇祝闻,我們需要懂得什么是Git,Git與傳統(tǒng)集中式版本控制系統(tǒng)的主要區(qū)別遗菠,及Git的基本工作流程联喘,下一篇將詳細(xì)介紹Git的使用與指令。
往期回顧
更多干貨內(nèi)容請(qǐng)關(guān)注:極樂科技