日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

三分鐘上手!一文看懂 Git 的底層工作原理

來源: 責(zé)編: 時(shí)間:2023-08-20 23:17:10 618觀看
導(dǎo)讀這是一篇能讓你迅速了解 Git 工作原理的文章,實(shí)戰(zhàn)案例解析,相信我,3 分鐘,絕對(duì)能夠有收獲!Git 目錄結(jié)構(gòu)Git 的本質(zhì)是一個(gè)文件系統(tǒng)(很重要,記住這句話,理解這句話),工作目錄中的所有文件的歷史版本以及提交記錄(commit)都是以文件

這是一篇能讓你迅速了解 Git 工作原理的文章,實(shí)戰(zhàn)案例解析,相信我,3 分鐘,絕對(duì)能夠有收獲!hfz28資訊網(wǎng)——每日最新資訊28at.com

Git 目錄結(jié)構(gòu)

Git 的本質(zhì)是一個(gè)文件系統(tǒng)(很重要,記住這句話,理解這句話),工作目錄中的所有文件的歷史版本以及提交記錄(commit)都是以文件對(duì)象的方式保存在 .git 目錄中的。hfz28資訊網(wǎng)——每日最新資訊28at.com

我們先來創(chuàng)建一個(gè)名為 git-demo 空目錄,并采用 git init 命令初始化 Git 倉(cāng)庫(kù)。該命令會(huì)在工作目錄下生成一個(gè) .git 目錄,該目錄將用于保存工作區(qū)中所有的文件歷史的歷史版本,commit,branch,tag 等所有信息。hfz28資訊網(wǎng)——每日最新資訊28at.com

$ mkdir git-demo$ cd git-demo$ git init

其目錄結(jié)構(gòu)如下:hfz28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片hfz28資訊網(wǎng)——每日最新資訊28at.com

待會(huì)我們重點(diǎn)關(guān)注下這幾個(gè)目錄:hfz28資訊網(wǎng)——每日最新資訊28at.com

  • HEAD:工作目錄當(dāng)前狀態(tài)對(duì)應(yīng)的 commit,一般來說是當(dāng)前 branch 的 head,HEAD 也可以通過 git checkout 命令被直接設(shè)置到一個(gè)特定的 commit 上,這種情況被稱之為 detached HEAD
  • objects:這里是真正保存 Git 對(duì)象的目錄,包括三類對(duì)象 commit,tree 和 blob(具體這三類對(duì)象是什么,慢慢往下看就知道了)
  • refs:用來保存 branch 和 tag 對(duì)應(yīng)的 commit

Git 三大對(duì)象

目前 Objects 目錄中還沒有任何內(nèi)容,我們創(chuàng)建一個(gè)文件并提交:hfz28資訊網(wǎng)——每日最新資訊28at.com

$ git:(master) echo "my project" > README$ git:(master) mkdir src$ git:(master) echo "hello world" > src/file1.txt

添加并提交:hfz28資訊網(wǎng)——每日最新資訊28at.com

$ git:(master) git add .$ git:(master) git commit -m "init commit"

圖片圖片hfz28資訊網(wǎng)——每日最新資訊28at.com

從打印輸出可以看到,上面的命令創(chuàng)建了一個(gè) commit 對(duì)象,該 commit 包含兩個(gè)文件。查看 .git/objects 目錄,可以看到該目錄下增加了 5 個(gè)子目錄 06,3b, 82, c5, ca,每個(gè)子目錄下有一個(gè)以一長(zhǎng)串字母數(shù)字命令的文件:hfz28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片hfz28資訊網(wǎng)——每日最新資訊28at.com

這一大串是什么?hfz28資訊網(wǎng)——每日最新資訊28at.com

Git Object 目錄中存儲(chǔ)了三種對(duì)象:Commit, Tree 和 Blob,Git 會(huì)為對(duì)象生成一個(gè)文件,并根據(jù)文件信息生成一個(gè) SHA-1 哈希值作為文件內(nèi)容的校驗(yàn)和,創(chuàng)建以該校驗(yàn)和前兩個(gè)字符為名稱的子目錄,并以 (校驗(yàn)和) 剩下 38 個(gè)字符為文件命名 ,將該文件保存至子目錄下。hfz28資訊網(wǎng)——每日最新資訊28at.com

可以通過 git cat-file -t 哈希值 命令查看對(duì)象類型,通過 git cat-file -p 哈希值 命令查看對(duì)象中的內(nèi)容,哈希值就是目錄名+文件名,在沒有歧義的情況下,命令可以不用輸入整個(gè)哈希值,輸入前幾位即可。hfz28資訊網(wǎng)——每日最新資訊28at.com

我們挨個(gè)看下:hfz28資訊網(wǎng)——每日最新資訊28at.com

065bca(blob):hfz28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片hfz28資訊網(wǎng)——每日最新資訊28at.com

3b18e(blob):hfz28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片hfz28資訊網(wǎng)——每日最新資訊28at.com

824244(tree):hfz28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片hfz28資訊網(wǎng)——每日最新資訊28at.com

c5bc98(commit):hfz28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片hfz28資訊網(wǎng)——每日最新資訊28at.com

ca96(tree):hfz28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片hfz28資訊網(wǎng)——每日最新資訊28at.com

認(rèn)真看圖,大家看完也就差不多清楚了 commit、blob、tree 這幾大對(duì)象是什么東西了hfz28資訊網(wǎng)——每日最新資訊28at.com

從 commit 對(duì)象(c5bc98)入手,commit 對(duì)象中保存了 commit 的作者,commit 的描述信息,簽名信息以及該 commit 中包含哪些 tree 對(duì)象和 blob 對(duì)象。從上圖可知包含了 tree 對(duì)象(ca96)。hfz28資訊網(wǎng)——每日最新資訊28at.com

可以把 tree 對(duì)象看成這次提交相關(guān)的所有文件的根目錄,可以看到 ca96 這個(gè) tree 對(duì)象中包含了一個(gè) blob 對(duì)象(065bca),即 README 文件,以及一個(gè) tree 對(duì)象(824244),即 src 目錄。而 blob 對(duì)象存儲(chǔ)的就是真正的內(nèi)容。hfz28資訊網(wǎng)——每日最新資訊28at.com

這幾個(gè)對(duì)象的對(duì)應(yīng)關(guān)系如下圖所示:hfz28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片hfz28資訊網(wǎng)——每日最新資訊28at.com

Git Brach 和 Tag

現(xiàn)在來看下 HEAD 中的內(nèi)容,前面說過,HEAD 中存儲(chǔ)的是工作目錄當(dāng)前狀態(tài)對(duì)應(yīng)的 commit:hfz28資訊網(wǎng)——每日最新資訊28at.com

$ git:(master) cat .git/HEADref: refs/heads/master
$ git:(master) cat .git/refs/heads/masterc5bc98b8990bedd7444da537320559e601eba87b

c5bc98 正是我們最近的這次 commit!hfz28資訊網(wǎng)——每日最新資訊28at.com

master 是一個(gè)分支名,所以分支(branch)的本質(zhì)是一個(gè)指向 commit 的指針hfz28資訊網(wǎng)——每日最新資訊28at.com

我們切一個(gè)新分支 feat/work:hfz28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片hfz28資訊網(wǎng)——每日最新資訊28at.com

查看下 refs/heads/master 和 refs/heads/feat/work 中的 commit 值:hfz28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片hfz28資訊網(wǎng)——每日最新資訊28at.com

從其內(nèi)容可以看到,feat/work 這個(gè) branch 并沒有創(chuàng)建任何新的版本文件,和 master 一樣指向了 c5bc98 這個(gè) commit。hfz28資訊網(wǎng)——每日最新資訊28at.com

從上面的實(shí)驗(yàn)可以看出,一個(gè) branch 其實(shí)只是一個(gè) commit 對(duì)象的應(yīng)用,Git 并不會(huì)為每個(gè) branch 存儲(chǔ)一份拷貝,因此在 git 中創(chuàng)建 branch 幾乎沒有任何代價(jià)。hfz28資訊網(wǎng)——每日最新資訊28at.com

接下來我們?cè)?feat/work 這個(gè) branch上進(jìn)行一些修改,然后提交:hfz28資訊網(wǎng)——每日最新資訊28at.com

$ git:(feat/work) echo "new line" >> src/file1.txt$ git:(feat/work) echo "do nothing" >> License$ git:(feat/work) git add .$ git:(feat/work) git commit -m "some change"

圖片圖片hfz28資訊網(wǎng)——每日最新資訊28at.com

查看當(dāng)前的 HEAD:hfz28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片hfz28資訊網(wǎng)——每日最新資訊28at.com

可以看到 HEAD 指向了 feat/work 這個(gè) branch,而 feat/work branch則指向了 8a442 這個(gè)commit,master branch 指向的 commit 未變化,仍然是 c5bc98。hfz28資訊網(wǎng)——每日最新資訊28at.com

查看 8a442 這個(gè)commit對(duì)象的內(nèi)容:hfz28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片hfz28資訊網(wǎng)——每日最新資訊28at.com

可以看到 commit 有一個(gè) parent 字段,指向了前一個(gè) commit c5bc98。還包含了一個(gè) tree 對(duì)象(2a9dd):hfz28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片hfz28資訊網(wǎng)——每日最新資訊28at.com

可以觀察到,由于 README 沒有變化,還是指向的 065bca 這個(gè)blob對(duì)象。License 是一個(gè)新建的 blob 對(duì)象,src 和 file1.txt 則指向了新版本的對(duì)象。hfz28資訊網(wǎng)——每日最新資訊28at.com

增加了這次 commit 后,Git 中各個(gè)對(duì)象的關(guān)系如下圖所示:hfz28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片hfz28資訊網(wǎng)——每日最新資訊28at.com

Tag 和 branch 類似,也是指向某個(gè) commit 的指針。不同的是 tag 創(chuàng)建后其指向的 commit 不能變化,而 branch 創(chuàng)建后,其指針會(huì)在提交新的 commit 后向前移動(dòng)。hfz28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-6179-0.html三分鐘上手!一文看懂 Git 的底層工作原理

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 最新技術(shù)趨勢(shì):RabbitMQ在云原生應(yīng)用中的應(yīng)用

下一篇: GitHub和碼云上,七個(gè)H5頁面制作工具推薦

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 直屏旗艦來了 iQOO 12和K70 Pro同臺(tái)競(jìng)技

    旗艦機(jī)基本上使用的都是雙曲面屏幕,這就讓很多喜歡直屏的愛好者在苦等一款直屏旗艦,這次,你們等到了。據(jù)博主數(shù)碼閑聊站帶來的最新爆料稱,Redmi下代旗艦K70 Pro和iQOO 12兩款手
  • 6月iOS設(shè)備性能榜:M2穩(wěn)居榜首 A系列只能等一手3nm來救

    沒有新品發(fā)布,自然iOS設(shè)備性能榜的上榜設(shè)備就沒有什么更替,僅僅只有跑分變化而產(chǎn)生的排名變動(dòng),畢竟蘋果新品的發(fā)布節(jié)奏就是這樣的,一年下來也就幾個(gè)移動(dòng)端新品,不會(huì)像安卓廠商,一
  • 28個(gè)SpringBoot項(xiàng)目中常用注解,日常開發(fā)、求職面試不再懵圈

    前言在使用SpringBoot開發(fā)中或者在求職面試中都會(huì)使用到很多注解或者問到注解相關(guān)的知識(shí)。本文主要對(duì)一些常用的注解進(jìn)行了總結(jié),同時(shí)也會(huì)舉出具體例子,供大家學(xué)習(xí)和參考。注解
  • 線程通訊的三種方法!通俗易懂

    線程通信是指多個(gè)線程之間通過某種機(jī)制進(jìn)行協(xié)調(diào)和交互,例如,線程等待和通知機(jī)制就是線程通訊的主要手段之一。 在 Java 中,線程等待和通知的實(shí)現(xiàn)手段有以下幾種方式:Object 類下
  • 十個(gè)簡(jiǎn)單但很有用的Python裝飾器

    裝飾器(Decorators)是Python中一種強(qiáng)大而靈活的功能,用于修改或增強(qiáng)函數(shù)或類的行為。裝飾器本質(zhì)上是一個(gè)函數(shù),它接受另一個(gè)函數(shù)或類作為參數(shù),并返回一個(gè)新的函數(shù)或類。它們通常用
  • 多線程開發(fā)帶來的問題與解決方法

    使用多線程主要會(huì)帶來以下幾個(gè)問題:(一)線程安全問題  線程安全問題指的是在某一線程從開始訪問到結(jié)束訪問某一數(shù)據(jù)期間,該數(shù)據(jù)被其他的線程所修改,那么對(duì)于當(dāng)前線程而言,該線程
  • 最薄的14英寸游戲筆記本電腦 Alienware X14已可以購(gòu)買

    2022年1月份在國(guó)際消費(fèi)電子展(CES2022)上首次亮相的Alienware新品——Alienware X14現(xiàn)在已經(jīng)可以購(gòu)買了,這款筆記本電腦被譽(yù)為世界上最薄的 14 英寸游戲筆
  • 世界人工智能大會(huì)國(guó)際日開幕式活動(dòng)在世博展覽館開啟

    30日上午,世界人工智能大會(huì)國(guó)際日開幕式活動(dòng)在世博展覽館開啟,聚集國(guó)際城市代表、重量級(jí)院士專家、國(guó)際創(chuàng)新企業(yè)代表,共同打造人工智能交流平臺(tái)。上海市副市
  • 親歷馬斯克血洗Twitter,硅谷的苦日子在后頭

    文/劉哲銘  編輯/李薇  馬斯克再次揮下裁員大刀。  美國(guó)時(shí)間11月14日,Twitter約4400名外包員工遭解雇,此次被解雇的員工的主要工作為內(nèi)容審核等。此前,T
Top 主站蜘蛛池模板: 松江区| 三穗县| 喀什市| 夏津县| 遂昌县| 新安县| 沛县| 铜川市| 伊宁市| 张家川| 托克托县| 盐池县| 沛县| 宁德市| 株洲县| 府谷县| 东乡| 岑巩县| 余庆县| 县级市| 桦南县| 河曲县| 寿阳县| 定西市| 杨浦区| 洪洞县| 阿拉善左旗| 平武县| 万年县| 安义县| 无极县| 策勒县| 淄博市| 徐汇区| 辉县市| 葫芦岛市| 卢氏县| 安宁市| 山西省| 邵阳县| 安塞县|