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

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

每天都提交代碼,那你知道.git目錄內(nèi)部的秘密嗎?

來源: 責(zé)編: 時(shí)間:2024-04-08 08:59:22 191觀看
導(dǎo)讀在每一個(gè) git 倉(cāng)庫(kù)中都有一個(gè)隱藏的.git目錄,git 的很多秘密都藏著這里面,包括分支、提交記錄、配置、日志等等。作為一個(gè)有實(shí)力有低調(diào)的開發(fā)者來說,你了解其中每個(gè)目錄、每個(gè)文件都代表著什么嗎?它們的作用又是什么呢?圖

在每一個(gè) git 倉(cāng)庫(kù)中都有一個(gè)隱藏的.git目錄,git 的很多秘密都藏著這里面,包括分支、提交記錄、配置、日志等等。9KE28資訊網(wǎng)——每日最新資訊28at.com

作為一個(gè)有實(shí)力有低調(diào)的開發(fā)者來說,你了解其中每個(gè)目錄、每個(gè)文件都代表著什么嗎?它們的作用又是什么呢?9KE28資訊網(wǎng)——每日最新資訊28at.com

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

以下是 .git目錄的完整結(jié)構(gòu),看上去也是比較簡(jiǎn)單的,git 就是用這個(gè)結(jié)構(gòu)管理這復(fù)雜的版本關(guān)系。9KE28資訊網(wǎng)——每日最新資訊28at.com

.git |----config |----objects | |----0d | | |----1d218acc58d857329cde3778d7429037079627 | | |----60436b1116e54b3ed9a4b9fec1f2f9916a73ca | |----59 | | |----a10af7aa35f521b9a41569785d4481850192e3 | |----92 | | |----5f4810ed4da9873771f14f2ca1ab97db81283a | | |----6c85f1ad90849159b2c616a9744ba62abe8f6a | | |----c359f0b8d09e2fc137c865043d4f6951989cdd |----HEAD |----info | |----exclude |----logs | |----HEAD | |----refs | | |----heads | | | |----main | | |----remotes | | | |----origin | | | | |----main |----description |----hooks | |----commit-msg.sample | |----pre-rebase.sample | |----pre-commit.sample | |----applypatch-msg.sample | |----fsmonitor-watchman.sample | |----pre-receive.sample | |----prepare-commit-msg.sample | |----post-update.sample | |----pre-merge-commit.sample | |----pre-applypatch.sample | |----pre-push.sample | |----update.sample | |----push-to-checkout.sample |----refs | |----heads | | |----main | |----tags | |----remotes | | |----origin | | | |----main |----index |----COMMIT_EDITMSG

HEAD(當(dāng)前分支)

有一個(gè)叫做 HEAD文件,這個(gè)文件一聽名字就比較重要,它的作用就是存儲(chǔ)當(dāng)前倉(cāng)庫(kù)正在使用的分支名稱。9KE28資訊網(wǎng)——每日最新資訊28at.com

查看其內(nèi)容,如下面這樣,表示當(dāng)前正在使用 main 分支。9KE28資訊網(wǎng)——每日最新資訊28at.com

ref: refs/heads/main

或者下面這樣,表示正在使用 dev 分支。9KE28資訊網(wǎng)——每日最新資訊28at.com

ref: refs/heads/dev

refs

在 .git/refs 目錄下有 heads、tags、remotes三個(gè)子目錄,用來存儲(chǔ)最新的提交記錄引用的。9KE28資訊網(wǎng)——每日最新資訊28at.com

|----refs| |----heads| | |----main| |----tags| |----remotes| | |----origin| | | |----main

這三個(gè)目錄的作用都是用來標(biāo)示最新一次的提交記錄的。9KE28資訊網(wǎng)——每日最新資訊28at.com

.git/refs/heads

例如我本地只有 main分支,那就會(huì)在這里存在一份.git/refs/heads/mian的文件,文件內(nèi)容如下:9KE28資訊網(wǎng)——每日最新資訊28at.com

2ddc65b74a186f4332d7b218be0f18dd404c82ef

這個(gè)值就是 main 分支最新一次提交記錄的引用,引用指向 .git/objects這個(gè)目錄,這里面記錄了每一次提交的詳情信息。9KE28資訊網(wǎng)——每日最新資訊28at.com

.git/refs/remotes

.git/refs/heads存的是本地分支提交記錄的引用,而  .git/refs/remotes存的是遠(yuǎn)程分支的提交記錄引用,這樣一來,git就能夠在本地跟蹤遠(yuǎn)程倉(cāng)庫(kù)的分支變化。9KE28資訊網(wǎng)——每日最新資訊28at.com

.git/refs/tags

我們?cè)诠芾泶a的時(shí)候,可能在某些時(shí)候?qū)Ξ?dāng)前版本打一個(gè)標(biāo)簽,標(biāo)記某些重要的版本,這樣就會(huì)在 .git/refs/tags目錄下形成記錄,標(biāo)示某個(gè)tag的最新一次提交記錄引用。9KE28資訊網(wǎng)——每日最新資訊28at.com

.git/refs/stash

除了這三個(gè)目錄外,還有可能包含 stash這個(gè)目錄,如果你用過「本地暫存」這個(gè)功能的話。9KE28資訊網(wǎng)——每日最新資訊28at.com

什么情況下會(huì)用這個(gè)功能呢?9KE28資訊網(wǎng)——每日最新資訊28at.com

  1. 臨時(shí)切換到其他分支,當(dāng)你正在當(dāng)前分支上進(jìn)行工作,但需要暫時(shí)切換到其他分支,而又不想提交當(dāng)前工作目錄的改動(dòng)時(shí),可以使用git stash將改動(dòng)保存起來,切換分支后再用git stash pop或git stash apply恢復(fù)。
  2. 臨時(shí)保存,假設(shè)你兩天前拉取了某個(gè)文件,改了一部分,但是一直沒完成。在這期間呢,你的同事也把這個(gè)文件改了,那你提交的時(shí)候就會(huì)有沖突。這種情況下,你可以先把你本地的暫存起來,然后再拉取最新代碼,之后再把暫存的改動(dòng)恢復(fù)過來。

提交記錄 (.git/objects)

前面介紹 refs時(shí)說的最新一次的提交記錄引用,其引用的目標(biāo)就是.git/objects這個(gè)目錄。拿前面那個(gè) main分支的最后一次提交引用來講。9KE28資訊網(wǎng)——每日最新資訊28at.com

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

上面這一串16進(jìn)制字符串,可以分為兩個(gè)部分,前兩位是一個(gè)部分,后兩位是一個(gè)部分,前兩位作為目錄,后面的是文件名稱。9KE28資訊網(wǎng)——每日最新資訊28at.com

所以在 .git/objects中存在 .git/objects/2d/dc65b74a186f4332d7b218be0f18dd404c82ef這樣一個(gè)文件,里面存的就是某次提交的詳細(xì)信息,直接查看的話,只能看到亂碼,要用 git 自己的命令才行。9KE28資訊網(wǎng)——每日最新資訊28at.com

git cat-file -p 2ddc65b74a186f4332d7b218be0f18dd404c82ef

查看到的提交詳情,主要是提交樹、作者、提交者以及提交message9KE28資訊網(wǎng)——每日最新資訊28at.com

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

通過 tree的記錄值,可以查看本次提交所涉及的所有文件樹。依然是 通過下面的命令查看,后面的一串hash值,就是上圖的 tree 的值。9KE28資訊網(wǎng)——每日最新資訊28at.com

git cat-file -p f8803d7d049edbbc981da732b855419d039f79ff

得到的結(jié)果如下:9KE28資訊網(wǎng)——每日最新資訊28at.com

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

再用 git cat-file -p 命令可以查看上圖類型為 blob的文件的內(nèi)容。9KE28資訊網(wǎng)——每日最新資訊28at.com

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

日志 (.git/logs)

這里記錄的每一次的提交日志,包括當(dāng)前使用的分支、本地分支、遠(yuǎn)程分支。9KE28資訊網(wǎng)——每日最新資訊28at.com

|----logs| |----HEAD| |----refs| | |----heads| | | |----main| | |----remotes| | | |----origin| | | | |----main

以行為單位,每一行都存儲(chǔ)了一次提交的具體信息。9KE28資訊網(wǎng)——每日最新資訊28at.com

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

從左到右分別表示提交之前的hash、提交之后的hash、提交用戶、時(shí)間戳、提交的message。9KE28資訊網(wǎng)——每日最新資訊28at.com

config (配置)

.git/config 是當(dāng)前倉(cāng)庫(kù)的配置文件,這個(gè)文件,大多數(shù)開發(fā)同學(xué)應(yīng)該還是比較熟悉的。這個(gè)配置只對(duì)當(dāng)前倉(cāng)庫(kù)有效。9KE28資訊網(wǎng)——每日最新資訊28at.com

了解了前面的內(nèi)容后,再看一下這個(gè)配置文件,應(yīng)該就很好理解了。9KE28資訊網(wǎng)——每日最新資訊28at.com

[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true ignorecase = true precomposeunicode = true[remote "origin"] url = https://github.com/xxxx/xxxx-blog.git fetch = +refs/heads/*:refs/remotes/origin/*[branch "main"] remote = origin merge = refs/heads/main

index (暫存區(qū))

.git/index 文件是 暫存區(qū)。它保存了當(dāng)前倉(cāng)庫(kù)中所有被 git 跟蹤的文件的狀態(tài)信息,包括文件名、文件的權(quán)限和位置等。當(dāng)執(zhí)行g(shù)it add命令時(shí),git 將要提交的文件的快照信息暫存到這個(gè)索引文件中,而不是直接提交到倉(cāng)庫(kù)。9KE28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)執(zhí)行g(shù)it commit命令時(shí),git 會(huì)將索引文件中的內(nèi)容提交到版本庫(kù)中,從而創(chuàng)建一個(gè)新的提交記錄。9KE28資訊網(wǎng)——每日最新資訊28at.com

hooks (鉤子)

hook 對(duì)于程序員來講肯定不陌生,可以看做是一個(gè)生命周期的事件處理,例如提交代碼后,觸發(fā)某個(gè)動(dòng)作,「提交代碼后」這個(gè)節(jié)點(diǎn)就是個(gè) Hook,在這個(gè)Hook里我們可以加入一些自定義的處理邏輯來達(dá)到某些目的。9KE28資訊網(wǎng)——每日最新資訊28at.com

例如 pre-commit(在執(zhí)行提交前運(yùn)行)、post-commit(在提交后運(yùn)行)、pre-push(在執(zhí)行推送前運(yùn)行)等。9KE28資訊網(wǎng)——每日最新資訊28at.com

怎么樣, 學(xué)廢了嗎?9KE28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-81869-0.html每天都提交代碼,那你知道.git目錄內(nèi)部的秘密嗎?

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

上一篇: 如果你還不理解 RBAC,看看 Jenkins 如何做到的

下一篇: 父組件使用v-model,子組件竟然不用定義props和emit拋出事件

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 主站蜘蛛池模板: 依兰县| 安丘市| 阿勒泰市| 鄂托克旗| 岳阳县| 大石桥市| 左贡县| 临泽县| 昌都县| 颍上县| 海晏县| 廉江市| 乌兰浩特市| 富锦市| 巴塘县| 盐池县| 顺平县| 瓮安县| 阿克苏市| 长春市| 新蔡县| 临桂县| 尼玛县| 咸宁市| 老河口市| 平原县| 舒城县| 中西区| 拉萨市| 昌邑市| 获嘉县| 南康市| 封开县| 社旗县| 分宜县| 南涧| 柳林县| 阳东县| 永胜县| 福鼎市| 仁寿县|