亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
四種主要對(duì)像類(lèi)型
參考:分支和標(biāo)籤
內(nèi)容 - 可調(diào)地的存儲(chǔ):所有內(nèi)容均由哈希命名
當(dāng)您提交時(shí)會(huì)發(fā)生什麼?
關(guān)鍵要點(diǎn)
首頁(yè) 開(kāi)發(fā)工具 Git 了解GIT的內(nèi)部數(shù)據(jù)模型

了解GIT的內(nèi)部數(shù)據(jù)模型

Jul 29, 2025 am 12:50 AM

GIT使用具有四種對(duì)像類(lèi)型的內(nèi)容 - blobs存儲(chǔ)不含元數(shù)據(jù)的blobs存儲(chǔ)文件的文件系統(tǒng),而不是更改,而不是更改。 2。樹(shù)代表目錄,包含帶有文件模式和名稱(chēng)的斑點(diǎn)和子樹(shù)的引用; 3。提出指向根樹(shù),並包括作者,時(shí)間戳,消息和父母所做的元數(shù)據(jù),形成歷史鏈; 4。標(biāo)籤被命名,通常是簽名的,通常是對(duì)對(duì)象(通常提交)標(biāo)記版本的引用。分支是可移動(dòng)的指針,以存儲(chǔ)在.git/refs/head//head//heads/中,自動(dòng)在提交上更新,而標(biāo)籤保持固定。每個(gè)對(duì)像都存儲(chǔ)在其sha-1 hash下。在訂立時(shí),索引中的git哈希文件作為斑點(diǎn),構(gòu)建目錄樹(shù),創(chuàng)建指向根樹(shù)和父的提交,並更新分支參考。提交歷史記錄通過(guò)父鏈接形成有向的無(wú)環(huán)圖(DAG)。所有對(duì)像都是不可變的,GIT使用壓縮來(lái)保持高效。理解此模型闡明了Git Rebase,Git Reset和Git Reflog之類(lèi)的命令作為操縱指針或創(chuàng)建新對(duì)象的操作,從而將Git的核心揭示為用於版本化文件的哈希,樹(shù)和鏈條系統(tǒng)。

了解Git \的內(nèi)部數(shù)據(jù)模型

Git的內(nèi)部數(shù)據(jù)模型比大多數(shù)人想像的要簡(jiǎn)單 - 一旦您了解核心思想。核心是GIT是一個(gè)可添加內(nèi)容的文件系統(tǒng),其中具有一些高級(jí)工具來(lái)管理版本的代碼。它不會(huì)像傳統(tǒng)的VCS工具那樣存儲(chǔ)更改;相反,它將整個(gè)項(xiàng)目的快照存儲(chǔ)在不同的時(shí)間點(diǎn)。讓我們分解它的工作原理。


四種主要對(duì)像類(lèi)型

git在內(nèi)部使用四種類(lèi)型的對(duì)象:斑點(diǎn)樹(shù),提交標(biāo)籤。所有這些都存儲(chǔ)在.git/objects/中,並通過(guò)其SHA-1哈希識(shí)別。

1。斑點(diǎn)(二進(jìn)制大對(duì)象)

  • 表示文件的內(nèi)容。
  • 存儲(chǔ)文件名,權(quán)限或元數(shù)據(jù) - 只是原始的文件內(nèi)容。
  • 示例:如果您有一個(gè)文件hello.txt ,上面有內(nèi)容"Hello, world!" ,git為該內(nèi)容創(chuàng)建一個(gè)斑點(diǎn)對(duì)象。
  • 關(guān)鍵是內(nèi)容的sha-1哈希:
    echo -n "Hello, world!" | git hash-object --stdin →給您斑點(diǎn)的ID。

2。樹(shù)

  • 就像目錄一樣 - 它存儲(chǔ)了對(duì)斑點(diǎn)和其他樹(shù)(子目錄)的引用。
  • 包含條目列表:Blob/Tree的文件模式,對(duì)像類(lèi)型,文件名和SHA-1。
  • 樹(shù)在某個(gè)時(shí)間點(diǎn)表示您項(xiàng)目的結(jié)構(gòu)。
  • 您可以將樹(shù)視為目錄的快照。

3。提交

  • 指向一棵樹(shù)(當(dāng)時(shí)項(xiàng)目的根目錄)。
  • 包含元數(shù)據(jù):作者,參數(shù),時(shí)間戳,日誌消息以及至關(guān)重要的 - 零或更多父母提交。
  • 這就是創(chuàng)建歷史鏈的原因。
  • 與一位父母的提交是正常的提交;兩個(gè)父母意味著合併。

4。標(biāo)籤

  • 命名對(duì)另一個(gè)對(duì)象(通常是提交)。
  • 用於標(biāo)記歷史上的特定點(diǎn)(例如, v1.0.0 )。
  • 可以簽署以獲得真實(shí)性。

GIT如何建立歷史:提交鏈

當(dāng)您提交合併時(shí):

  1. GIT採(cǎi)用您分期區(qū)域(索引)的當(dāng)前狀態(tài)。
  2. 為每個(gè)文件創(chuàng)建斑點(diǎn)。
  3. 建造代表目錄結(jié)構(gòu)的樹(shù)(或嵌套的樹(shù))。
  4. 創(chuàng)建一個(gè)指向該根樹(shù)的提交對(duì)象。
  5. 該提交還引用其父母 - 先前的提交。

因?yàn)槊總€(gè)提交都指向其父,所以GIT形成了歷史記錄的有向無(wú)環(huán)圖(DAG) 。

例子:

 A←B←C←D

每個(gè)字母都是一個(gè)提交。 D指向C,C到B,依此類(lèi)推。該鍊是通過(guò)提交對(duì)像中的父字段構(gòu)建的。


參考:分支和標(biāo)籤

GIT使用參考(REFS),以使參考提交更容易。

  • 分支只是指數(shù)的指針。
    git branch feature創(chuàng)建一個(gè)文件.git/refs/heads/feature其中包含提交哈希。
  • 提交時(shí),分支參考會(huì)自動(dòng)向前移動(dòng)。
  • Head是一個(gè)特殊的指針,說(shuō)您在哪個(gè)分支(或提交)。

標(biāo)籤也是REFS,但通常不會(huì)移動(dòng) - 它們是固定標(biāo)籤。


內(nèi)容 - 可調(diào)地的存儲(chǔ):所有內(nèi)容均由哈希命名

每個(gè)對(duì)像都存儲(chǔ)在文件中的文件名下,這是其內(nèi)容的sha-1哈希:

 .git/objects/de/adbabe12 ...→一個(gè)斑點(diǎn),樹(shù)或提交

這意味著:

  • 相同的內(nèi)容→相同的哈?!鷥H存儲(chǔ)一次(重複數(shù)據(jù)刪除)。
  • 內(nèi)容的任何變化→完全不同的哈希。
  • 篡改是可以檢測(cè)到的 - 哈希將改變。

您可以使用以下方式檢查對(duì)象:

 git cat -file -p <哈希>

當(dāng)您提交時(shí)會(huì)發(fā)生什麼?

這是一個(gè)簡(jiǎn)化的視圖:

  1. 索引中的文件被哈希並存儲(chǔ)為斑點(diǎn)。
  2. git為每個(gè)目錄建造一棵樹(shù),引用斑點(diǎn)和子樹(shù)。
  3. 指向root樹(shù)和父犯罪的提交對(duì)像是創(chuàng)建的。
  4. 當(dāng)前的分支參考已更新以指向此新提交。

沒(méi)有三角洲 - 只是快照。即使聽(tīng)起來(lái)效率低下,GIT也使用壓縮和包裝(通過(guò)git gc )保持苗條。


關(guān)鍵要點(diǎn)

  • GIT存儲(chǔ)快照,而不是差異。
  • 一切都是不可變的- 一旦創(chuàng)建,對(duì)象就永遠(yuǎn)不會(huì)改變。
  • SHA-1哈希充當(dāng)獨(dú)特的ID和完整性檢查。
  • 分支只是可移動(dòng)的指針
  • 歷史記錄是由提交父鏈接構(gòu)建的。

了解此模型有助於揭開(kāi)諸如git rebasegit resetgit reflog之類(lèi)的命令,因?yàn)槟庾R(shí)到他們只是在移動(dòng)指針或創(chuàng)建新對(duì)象。

基本上,Git是使用哈希,樹(shù)和鏈版本文件的明智方法。一旦看到它,它就會(huì)單擊。

以上是了解GIT的內(nèi)部數(shù)據(jù)模型的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線(xiàn)上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門(mén)話(huà)題

什麼是git中的包裝文件? 什麼是git中的包裝文件? Jul 08, 2025 am 12:14 AM

Packfile是Git用來(lái)打包、壓縮和傳輸版本庫(kù)對(duì)象的高效機(jī)制。當(dāng)你執(zhí)行g(shù)itpush、gitfetch或gitclone時(shí),Git實(shí)際傳輸?shù)木褪莗ackfile;1.它最初由鬆散對(duì)象通過(guò)gitgc或gitrepack命令生成,存於.git/objects/pack/目錄;2.Packfile不僅包含對(duì)像數(shù)據(jù),還記錄對(duì)象間的差異(delta)關(guān)係,並配合索引文件(.idx)實(shí)現(xiàn)快速查找;3.這種設(shè)計(jì)減少了傳輸體積,提高了同步效率;4.大量小packfile可能影響性能,可通過(guò)gitgc或git

我如何查看我的git存儲(chǔ)庫(kù)的提交歷史? 我如何查看我的git存儲(chǔ)庫(kù)的提交歷史? Jul 13, 2025 am 12:07 AM

要查看Git提交歷史,使用gitlog命令。 1.基本用法為gitlog,可顯示提交哈希、作者、日期和提交信息;2.使用gitlog--oneline獲取簡(jiǎn)潔視圖;3.通過(guò)--author和--grep按作者或提交信息過(guò)濾;4.添加-p查看代碼變更,--stat查看變更統(tǒng)計(jì);5.使用--graph和--all查看分支歷史,或借助GitKraken、VSCode等可視化工具。

如何刪除git分支? 如何刪除git分支? Jul 13, 2025 am 12:02 AM

要?jiǎng)h除Git分支,首先確保已合併或無(wú)需保留,使用gitbranch-d刪除本地已合併分支,若需強(qiáng)制刪除未合併分支則用-D參數(shù)。遠(yuǎn)程分支刪除使用gitpushorigin--deletebranch-name命令,並可通過(guò)gitfetch--prune同步他人本地倉(cāng)庫(kù)。 1.刪除本地分支需確認(rèn)是否已合併;2.遠(yuǎn)程分支刪除需使用--delete參數(shù);3.刪除後應(yīng)驗(yàn)證分支是否成功移除;4.與團(tuán)隊(duì)溝通避免誤刪共享分支;5.定期清理無(wú)用分支以保持倉(cāng)庫(kù)整潔。

如何在git分支之間切換? 如何在git分支之間切換? Jul 07, 2025 am 12:03 AM

Toswitchgitbranches,F(xiàn)irstupDateTheLocalRepowithGitfetch,CheckexistingBranchingBrancheswithGitBranchCommands,當(dāng)時(shí)的useusegitcheckeckOutorGitsWitchToChangeGranches,HandlingUncomtenCommittedChangesByCommitting,stashing,OrdiscardiscardingThem.WhenSwithEnswitchingGitbranchess,並確保gitbranchess

如何丟棄工作目錄中的更改(恢復(fù)為最後一個(gè)提交)? 如何丟棄工作目錄中的更改(恢復(fù)為最後一個(gè)提交)? Jul 08, 2025 am 12:38 AM

要丟棄Git工作目錄中的修改並回到最近一次提交的狀態(tài),1.對(duì)於已跟蹤文件的修改,使用gitcheckout--或gitcheckout--.丟棄所有修改;2.對(duì)於未跟蹤的新建文件,使用gitclean-f刪除文件,若包含目錄則用gitclean-fd,執(zhí)行前可用gitclean-fdn預(yù)覽刪除內(nèi)容;3.若需一次性重置所有更改(包括暫存區(qū)和工作目錄),使用gitreset--hard,此命令會(huì)重置工作目錄和暫存區(qū),務(wù)必謹(jǐn)慎操作。這些方法可單獨(dú)或組合使用,以達(dá)到清理工作目錄的目的。

如何創(chuàng)建自定義git鉤? 如何創(chuàng)建自定義git鉤? Jul 06, 2025 am 12:35 AM

Git鉤子用於在提交、推送等操作前後自動(dòng)運(yùn)行腳本以執(zhí)行任務(wù)。具體用途包括:1.提交前運(yùn)行代碼檢查或測(cè)試;2.強(qiáng)制提交信息格式;3.推送後發(fā)送通知。它們有助於統(tǒng)一團(tuán)隊(duì)規(guī)範(fàn)並減少手動(dòng)步驟,例如阻止測(cè)試失敗時(shí)的提交。 Git鉤子位於倉(cāng)庫(kù)中的.git/hooks/目錄下,默認(rèn)不共享,需手動(dòng)複製或使用工具如Husky進(jìn)行團(tuán)隊(duì)協(xié)作。編寫(xiě)基本鉤子需創(chuàng)建可執(zhí)行文件並命名對(duì)應(yīng)事件,例如pre-commit,並在其中寫(xiě)入邏輯判斷以阻止或允許操作。

如何將子樹(shù)添加到我的git存儲(chǔ)庫(kù)中? 如何將子樹(shù)添加到我的git存儲(chǔ)庫(kù)中? Jul 16, 2025 am 01:48 AM

要將子樹(shù)添加到Git倉(cāng)庫(kù),首先添加遠(yuǎn)程倉(cāng)庫(kù)並獲取其歷史記錄,接著使用gitmerge和gitread-tree命令將其合併為子目錄。步驟如下:1.使用gitremoteadd-f命令添加遠(yuǎn)程倉(cāng)庫(kù);2.運(yùn)行g(shù)itmerge--srecursive--no-commit獲取分支內(nèi)容;3.使用gitread-tree--prefix=指定目錄將項(xiàng)目作為子樹(shù)合併;4.提交更改以完成添加;5.更新時(shí)先gitfetch再重複合併步驟提交更新。此方法保持外部項(xiàng)目歷史完整且便於維護(hù)。

如何從GIT登臺(tái)區(qū)域中刪除文件? 如何從GIT登臺(tái)區(qū)域中刪除文件? Jul 12, 2025 am 01:27 AM

soundstagafafileiititWittingChatcase,usegitizeadtordoremevome fromarningareAlact.toundact rungit reset。

See all articles