Git由淺入深之基本原理

來源: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)注:極樂科技

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末辙纬,一起剝皮案震驚了整個(gè)濱河市豁遭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贺拣,老刑警劉巖蓖谢,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異纵柿,居然都是意外死亡蜈抓,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門昂儒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沟使,“玉大人,你說我怎么就攤上這事渊跋±拔耍” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵燕少,是天一觀的道長。 經(jīng)常有香客問我蒿囤,道長客们,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任恒傻,我火速辦了婚禮,結(jié)果婚禮上建邓,老公的妹妹穿的比我還像新娘盈厘。我一直安慰自己官边,他們只是感情好沸手,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布注簿。 她就那樣靜靜地躺著,像睡著了一般滩援。 火紅的嫁衣襯著肌膚如雪栅隐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天租悄,我揣著相機(jī)與錄音,去河邊找鬼恩袱。 笑死泣棋,一個(gè)胖子當(dāng)著我的面吹牛畔塔,可吹牛的內(nèi)容都是我干的潭辈。 我是一名探鬼主播澈吨,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼谅辣!你這毒婦竟也來了修赞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤柏副,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蚣录,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體割择,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡萎河,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年蕉饼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片换可。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡椎椰,死狀恐怖厦幅,靈堂內(nèi)的尸體忽然破棺而出沾鳄,到底是詐尸還是另有隱情,我是刑警寧澤确憨,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布译荞,位于F島的核電站,受9級(jí)特大地震影響休弃,放射性物質(zhì)發(fā)生泄漏吞歼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一塔猾、第九天 我趴在偏房一處隱蔽的房頂上張望篙骡。 院中可真熱鬧,春花似錦丈甸、人聲如沸糯俗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽得湘。三九已至,卻和暖如春顿仇,著一層夾襖步出監(jiān)牢的瞬間淘正,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工臼闻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鸿吆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓述呐,卻偏偏與公主長得像惩淳,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子市埋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 歡迎訪問我的博客黎泣,一起交流學(xué)習(xí),共同進(jìn)步缤谎。 萬丈高樓平地起抒倚,萬事只有打好基礎(chǔ),才能有所成就坷澡,學(xué)習(xí)亦是一樣托呕。本篇開始...
    驚鴻三世閱讀 935評(píng)論 0 3
  • 來源:Git由淺入深之操作與指令作者:驚鴻三世(轉(zhuǎn)載已獲得原作者許可,如需轉(zhuǎn)載請(qǐng)與原作者聯(lián)系) 本篇正式開始介紹G...
    極樂君閱讀 1,628評(píng)論 9 67
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)项郊,斷路器馅扣,智...
    卡卡羅2017閱讀 134,629評(píng)論 18 139
  • 寫下這個(gè)題目的時(shí)候差油,我只有四個(gè)字的感覺——大言不慚。在剛剛過去的兩天里任洞,我切切實(shí)實(shí)的睡覺蓄喇、睡覺再睡覺。加上饑不擇食...
    飄雨桐V閱讀 269評(píng)論 1 1
  • 大家都在忙著各自的生活交掏,各有精彩妆偏。 我一個(gè)人孤獨(dú)的佇立著,淋著雨盅弛,冰冷又無助钱骂,沒有人回過頭看看我,沒有人在意挪鹏,甚至...
    曖進(jìn)aini閱讀 237評(píng)論 2 0