其他技能 | Git原理

這篇文章主要是對Git的基礎(chǔ)概念及原理進行整理。最初只知道Git是用來備份和協(xié)助多人開發(fā),同類的工具還有SVN,他們都叫做“版本控制”工具。所以關(guān)于Git的一切還要“版本控制”說起。

版本控制

什么是“版本控制”,為什么要使用它?先來一個官方定義,版本控制是一種記錄一個或若干個文件內(nèi)容變化,以便將來查閱特定版本修訂情況的系統(tǒng)。去掉定語從句,版本控制是一個系統(tǒng)。這個系統(tǒng)是用來做什么的呢?一是記錄文件內(nèi)容變化(暫且理解為備份),二是查閱特定版本修訂情況。

現(xiàn)在請跟著我想象一個場景,你是一個玄幻小說家,最近寫一本書叫《Git修仙之旅》,你的日常工作就是在電腦上寫小說。某天終于寫完了精彩的一章保存在桌面上,然后去洗澡了。這時你的強迫癥女朋友回來把桌面清理了一遍,你的作品就到了廢紙簍里。女朋友為了證明自己是一個合格的強迫癥,隨即清空了廢紙簍。半個鐘頭后你裹著浴袍出來了,女朋友自豪地對你說:老公看這下你的桌面清爽多了吧,還不親親人家。此時一萬匹草泥馬狂奔而過,你哭了。為什么當初沒有留個備份呢?不要怪她,你需要的是版本控制,不僅可以滿足你備份小說的需求,還可以幫你記錄每次增改的內(nèi)容,方便查閱。

是的,不僅僅是程序員,作家、設(shè)計師都可以使用版本控制。

本地版本控制

為了安全起見,你知道了要經(jīng)常在本地備份文稿。像下面這樣:


local.png

集中化的版本控制系統(tǒng)

接下來,老板提出一個要求,要求兩個人同時來完成這部作品。既要滿足自己的備份和記錄需求,還要到達合作目的。也就是兩臺計算機的合作模式,這得配一個服務(wù)器啊。像這樣:


centralized.png

可能你也發(fā)現(xiàn)服務(wù)器的重要性了,如果停電斷網(wǎng)你們就沒有辦法繼續(xù)合作了。

分布式版本控制系統(tǒng)

于是分布式版本控制系統(tǒng)(Distributed Version Control System,簡稱 DVCS)出現(xiàn)了。也就是本地不僅保留當前的作品,同事還保留每次修改的記錄。像這樣:


distributed.png

從此你可以放心的在電腦上完成作品了。而Git就是這分布式版本控制系統(tǒng)。

Git工作原理

首先來看一下SVN的工作原理:
SVN的保存信息記錄的是隨著時間變化,存儲每個文件與初始版本的差異,如圖:


deltas.png

而Git更像是把數(shù)據(jù)看作是對小型文件系統(tǒng)的一組快照。 每次你提交更新,或在 Git 中保存項目狀態(tài)時,它主要對當時的全部文件制作一個快照并保存這個快照的索引。 為了高效,如果文件沒有修改,Git 不再重新存儲該文件,而是只保留一個鏈接指向之前存儲的文件。 Git 對待數(shù)據(jù)更像是一個快照流。

簡言之,就是直接記錄快照,而非差異比較。

snapshots.png

Git 不需外連到服務(wù)器去獲取歷史,然后再顯示出來——它只需直接從本地數(shù)據(jù)庫中讀取。 你能立即看到項目歷史。 如果你想查看當前版本與一個月前的版本之間引入的修改,Git 會查找到一個月前的文件做一次本地的差異計算,而不是由遠程服務(wù)器處理或從遠程服務(wù)器拉回舊版本文件再來本地處理。由于Git不僅在本地保存了你正在操作的文件,還保留了所有快照。所以你在使用Git時,近乎所有操作都是本地執(zhí)行,且速度快近乎瞬間完成轉(zhuǎn)換。這意味著,沒有網(wǎng)絡(luò)時也可以使用Git工作。

3種狀態(tài)

Git中涉及的文件有三種狀態(tài),你的文件可能處于其中之一:已提交(committed)、已修改(modified)和已暫存(staged)。 已提交表示數(shù)據(jù)已經(jīng)安全的保存在本地數(shù)據(jù)庫中。 已修改表示修改了文件,但還沒保存到數(shù)據(jù)庫中。 已暫存表示對一個已修改文件的當前版本做了標記,使之包含在下次提交的快照中。

由此引入 Git 項目的三個工作區(qū)域的概念:Git 倉庫、工作目錄以及暫存區(qū)域。

areas-2.png

Git 倉庫目錄是 Git 用來保存項目的元數(shù)據(jù)和對象數(shù)據(jù)庫的地方。 這是 Git 中最重要的部分,從其它計算機克隆倉庫時,拷貝的就是這里的數(shù)據(jù)。

工作目錄是對項目的某個版本獨立提取出來的內(nèi)容。 這些從 Git 倉庫的壓縮數(shù)據(jù)庫中提取出來的文件,放在磁盤上供你使用或修改。

暫存區(qū)域是一個文件,保存了下次將提交的文件列表信息,一般在 Git 倉庫目錄中。 有時候也被稱作`‘索引’',不過一般說法還是叫暫存區(qū)域。

基本的 Git 工作流程如下:
1.在工作目錄中修改文件。
2.暫存文件,將文件的快照放入暫存區(qū)域。
3.提交更新,找到暫存區(qū)域的文件,將快照永久性存儲到 Git 倉庫目錄。

如果 Git 目錄中保存著的特定版本文件,就屬于已提交狀態(tài)。 如果作了修改并已放入暫存區(qū)域,就屬于已暫存狀態(tài)。 如果自上次取出后,作了修改但還沒有放到暫存區(qū)域,就是已修改狀態(tài)。

以上就是Git的工作原理。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 在本章中,我們將介紹一個分布式版本控制系統(tǒng)的設(shè)計思路,以及它與集中式版本控制系統(tǒng)的不同之處。除此之外,我們還...
    香沙小熊閱讀 939評論 0 9
  • git /g?t/ 是一個開源的分布式版本控制系統(tǒng) 最初是 Linus Torvalds 為了幫助管理 Linux...
    TurboSnail閱讀 1,418評論 0 0
  • Git的學(xué)習(xí) Git簡介Git由Linux操作系統(tǒng)內(nèi)核的創(chuàng)造者Linus Torvalds在2005年創(chuàng)造,是目前...
    DeepChafferer閱讀 496評論 0 1
  • 一 Git配置和倉庫初始化 下面會介紹Git的使用,每個小節(jié)里會講解各個功能在命令行中的實現(xiàn)方式,并在每小節(jié)的最后...
    Happioo閱讀 3,626評論 0 5
  • 今天快要放學(xué)的時候,我們上了餐飲課。家長們馬上發(fā)手套給我們班,手套戴完了之后,所有家長都在制作牛扎糖。我看見了之后...
    小狐貍的麻麻閱讀 212評論 0 0

友情鏈接更多精彩內(nèi)容