- 官網(wǎng)地址: https://www.git-scm.com/
- 官方文檔: https://www.git-scm.com/docs
- 官方電子書(shū): https://git-scm.com/book/zh/v2
- GitHub: https://github.com/git/git
一、初始化新倉(cāng)庫(kù)
命令:git init
解析: 如果需要對(duì)現(xiàn)有的某個(gè)項(xiàng)目使用 Git 管理,只需要到項(xiàng)目所在目錄,執(zhí)行該命令即可。
作用: 初始化后,在當(dāng)前目錄下會(huì)出現(xiàn)一個(gè)名為 .git
的目錄,所有 Git 需要的數(shù)據(jù)和資源都存放在這個(gè)目錄中。不過(guò),目前僅僅是按照既有的結(jié)構(gòu)框架初始化好了所有的文件和目錄,還沒(méi)有開(kāi)始跟蹤管理項(xiàng)目中的文件。
下面展示一下 .git 目錄中比較全的內(nèi)容,單單只執(zhí)行 git init
命令的話不會(huì)一次創(chuàng)建所有文件的,部分文件在使用到某些特殊的場(chǎng)景時(shí)才會(huì)創(chuàng)建。
二、.git 目錄
2.1 hooks 文件夾
在 hooks
目錄中,存儲(chǔ)了 Git 鉤子腳本的模板文件。
Git 鉤子是一些可執(zhí)行的腳本,它們?cè)谔囟ǖ?Git 操作(如提交、合并、推送等)前后運(yùn)行,可以用于自定義和控制 Git 操作的行為。
常見(jiàn)的 Git 鉤子腳本:
-
pre-commit
:在執(zhí)行提交操作前運(yùn)行,可以用于代碼檢查、格式化等操作,以確保提交的代碼符合規(guī)范。 -
pre-receive
:在執(zhí)行推送操作前執(zhí)行,可以用于進(jìn)行服務(wù)端校驗(yàn)、權(quán)限驗(yàn)證等操作,以控制推送到遠(yuǎn)程倉(cāng)庫(kù)的內(nèi)容。 -
post-commit
:在執(zhí)行提交操作后運(yùn)行,可以用于發(fā)送通知、執(zhí)行后續(xù)操作等。 -
post-receive
:在執(zhí)行推送操作后運(yùn)行,可以用于執(zhí)行服務(wù)器端處理、觸發(fā)自動(dòng)部署等操作。
注意: Git 鉤子腳本在 .git 文件夾中存儲(chǔ)的是模板文件,需要將其重命名為去掉 .sample 后綴,并賦予可執(zhí)行權(quán)限,才能生效。每個(gè) Git 倉(cāng)庫(kù)的鉤子腳本都是獨(dú)立的,不會(huì)被版本控制。
2.2 info 文件夾
在 info
目錄中,存儲(chǔ)了一些額外的 Git 配置文件。
-
exclude
:全局性排除文件。
2.3 logs 文件夾
logs
目錄用于存儲(chǔ) Git 倉(cāng)庫(kù)的引用日志信息。
-
refs
文件夾:存儲(chǔ)各個(gè)引用(如分支、標(biāo)簽)的引用日志信息。每個(gè)應(yīng)用都對(duì)應(yīng)的一個(gè)子目錄,如:refs/heads
用于存儲(chǔ)分支的引用日志,refs/tags
用于存儲(chǔ)標(biāo)簽的引用日志。 -
HEAD
:存儲(chǔ) HEAD 引用的變動(dòng)記錄。每次 HEAD 引用變動(dòng)時(shí),都會(huì)在該文件中記錄變動(dòng)的信息。
這些日志文件記錄了引用的變動(dòng)歷史,包括引用的新增、刪除、移動(dòng)等操作。它們可以用于查看倉(cāng)庫(kù)中引用的修改歷史,以及恢復(fù)到之前的引用狀態(tài)。
注意: logs 目錄中的日志文件是 Git 維護(hù)的,不應(yīng)手動(dòng)修改或刪除這些文件,以免導(dǎo)致倉(cāng)庫(kù)狀態(tài)不一致。
2.4 objects 文件夾【重要】
objects
目錄是 Git 版本控制系統(tǒng)中一個(gè)非常重要的目錄,用于存儲(chǔ) Git 倉(cāng)庫(kù)中的所有對(duì)象(objects)。
在 objects 目錄下,有以下幾個(gè)子目錄:
-
info
目錄:存儲(chǔ)一些輔助信息和索引文件,用于加快對(duì)象訪問(wèn)速度。 -
pack
目錄:存儲(chǔ)了使用 Git 的打包機(jī)制(packing)壓縮的對(duì)象文件。Git 會(huì)定期將一些對(duì)象打成一個(gè)單獨(dú)的文件,并使用壓縮算法來(lái)減小存儲(chǔ)空間和提高性能。 -
哈希
目錄:除了上述兩個(gè)子目錄外,objects 目錄下還包含一系列以兩個(gè)字符為前綴的子目錄,用于存儲(chǔ)具體的對(duì)象文件。Git 使用 SHA-1 哈希算法對(duì)每個(gè)對(duì)象 進(jìn)行唯一標(biāo)識(shí),每個(gè)對(duì)象的文件名是由哈希值組成的。
在這些哈希目錄中,存儲(chǔ)了 Git 倉(cāng)庫(kù)中的所有對(duì)象,包括提交對(duì)象、樹(shù)對(duì)象、文件對(duì)象等。每個(gè)對(duì)象都已二進(jìn)制 格式存儲(chǔ)在對(duì)應(yīng)的哈希姆目錄中,文件內(nèi)容經(jīng)過(guò)壓縮和哈希計(jì)算。
通過(guò)這種方式,Git 可以高效地存儲(chǔ)和管理大量的對(duì)象,使得版本控制和跟蹤文件的變化變得高效和可靠。
注意: objects 目錄中的內(nèi)容是 Git 的內(nèi)部結(jié)構(gòu),通常不需要直接操作這些文件。
2.5 refs 文件夾【重要】
refs
目錄用于存儲(chǔ)指向提交對(duì)象的引用(reference),如:分支引用(branch references)和標(biāo)簽引用(tag references)等。
在 refs 目錄下,有以下幾個(gè)子目錄:
-
heads
:存儲(chǔ)分支引用,每個(gè)分支都對(duì)應(yīng)一個(gè)文件,文件名與分支名稱(chēng)相同。這些文件中的內(nèi)容是指向分支最新提交的指針。 -
tags
:存儲(chǔ)標(biāo)簽引用,每個(gè)標(biāo)簽都對(duì)應(yīng)一個(gè)文件,文件名與標(biāo)簽名稱(chēng)相同。這些文件中的內(nèi)容是指向標(biāo)簽的對(duì)象的指針。 -
remotes
:存儲(chǔ)遠(yuǎn)程引用,每個(gè)遠(yuǎn)程倉(cāng)庫(kù)都對(duì)應(yīng)一個(gè)子目錄,目錄名與遠(yuǎn)程倉(cāng)庫(kù)名稱(chēng)相同。在每個(gè)遠(yuǎn)程倉(cāng)庫(kù)目錄下,可以存儲(chǔ)與該遠(yuǎn)程倉(cāng)庫(kù)相關(guān)的引用,如遠(yuǎn)程分支引用。
這些引用文件(通常是文本文件)記錄了指向特定提交對(duì)象的指針。通過(guò)這些引用,Git 可以跟蹤和管理分支、標(biāo)簽以及與遠(yuǎn)程倉(cāng)庫(kù)的交互。
注意: refs 目錄中的引用文件是 Git 維護(hù)的,不應(yīng)手動(dòng)修改或刪除這些文件,以免導(dǎo)致倉(cāng)庫(kù)狀態(tài)不一致。
2.6 COMMIT_EDITMSG
COMMIT_EDITMSG
是一個(gè)文本文件,用于存儲(chǔ)最近一次 Git 提交時(shí)的提交消息。
當(dāng)你使用 git commit
命令提交代碼時(shí),Git 會(huì)打開(kāi)一個(gè)文本編輯器,讓你輸入提交消息。輸入的消息會(huì)保存在 COMMIT_EDITMSG 文件中。這個(gè)文件包含了你最近一次提交的提交消息內(nèi)容。
通過(guò)編輯 COMMIT_EDITMSG 文件,你可以查看、修改或刪除之前的提交消息。這對(duì)于需要進(jìn)行提交消息的審查或修改非常有用。
注意: COMMIT_EDITMSG 文件只記錄最近一次提交的提交消息。每次提交后,文件內(nèi)容會(huì)被更新為新的提交消息。舊的提交消息不會(huì)保留。
2.7 config
config
文件是 Git 倉(cāng)庫(kù)的配置文件,用于存儲(chǔ)倉(cāng)庫(kù)級(jí)別的配置選項(xiàng)。
config 文件是一個(gè)文本文件,使用 INI
格式(鍵值對(duì))來(lái)組織配置信息。它包含了一系列配置項(xiàng),用于定義 Git 倉(cāng)庫(kù)的行為和屬性。
在 config 文件中,可以找到以下常見(jiàn)的配置項(xiàng):
-
[core]
:包含與 Git 核心功能相關(guān)的配置選項(xiàng),如倉(cāng)庫(kù)路徑、忽略文件權(quán)限等。 -
[remote "<remote-name>"]
:用于定義與遠(yuǎn)程倉(cāng)庫(kù)的連接和交互的配置選項(xiàng),可以指定遠(yuǎn)程倉(cāng)庫(kù)的 URL、分支跟蹤等。 -
[branch "<branch-name>"]
:用于定義分支相關(guān)的配置選項(xiàng),如分支的追蹤關(guān)系、合并策略等。 -
[user]
:用于設(shè)置 Git 用戶的姓名和郵箱地址,這些信息會(huì)出現(xiàn)在提交記錄中。 -
[alias]
:用于定義 Git 命令的別名,可以簡(jiǎn)化常用命令的輸入。
除了上述常見(jiàn)的配置項(xiàng),config 文件還可以包含其他自定義的配置項(xiàng),用于滿足特定的需求和工作流程。
注意: config 文件夾是每個(gè) Git 倉(cāng)庫(kù)獨(dú)立的,不會(huì)被版本控制。如果要對(duì)全局的 Git 配置進(jìn)行更改,可以使用
git config --global
命令來(lái)修改全局配置文件。
2.8 description
description
是一個(gè)純文本文件,用于提供關(guān)于 Git 倉(cāng)庫(kù)的簡(jiǎn)要描述信息。
description 文件通常包含一行文本,用于描述倉(cāng)庫(kù)的目的、用途或其他相關(guān)信息。這個(gè)描述可以是任意的自由文本,沒(méi)有特定的格式要求。
在一些 Git 服務(wù)提供商(如 GitHub、GitLab 等)中,description 文件的內(nèi)容可能會(huì)顯示在倉(cāng)庫(kù)的概述頁(yè)面或其他相關(guān)位置,以幫助用戶了解倉(cāng)庫(kù)的用途和特點(diǎn)。
注意: description 文件是可選的,如果你的倉(cāng)庫(kù)中沒(méi)有,也不會(huì)影響 Git 的正常運(yùn)行和版本控制功能。
2.9 FETCH_HEAD
FETCH_HEAD
是一個(gè)特殊的引用文件,用于存儲(chǔ)最近一次從遠(yuǎn)程倉(cāng)庫(kù)中獲?。?code>fetch)的提交記錄。
git pull --help
說(shuō):在默認(rèn)模式下,git pull
是 git fetch
的縮寫(xiě),其后是 git merge FETCH_HEAD
。
git pull 首先調(diào)用 git fetch,通常情況下是從遠(yuǎn)程獲取分支;FETCH_HEAD 指向此分支的尖端(就像分支一樣,它存儲(chǔ)提交的 SHA-1)。git pull 然后調(diào)用 git merge,合并 FETCH_HEAD 到當(dāng)前分支中。
注意: FETCH_HEAD 文件是 Git 維護(hù)的,不應(yīng)手動(dòng)修改或刪除這個(gè)文件,以免導(dǎo)致倉(cāng)庫(kù)狀態(tài)不一致。
2.10 HEAD【重要】
HEAD
是一個(gè)特殊的引用文件,用于指示當(dāng)前所在分支或提交。
HEAD 文件包含一個(gè)引用,可以是以下兩種形式之一:
- 直接指向某個(gè)提交的哈希值,表示當(dāng)前處于分離頭指針(detached HEAD)狀態(tài),即不再任何分支上工作。
- 以 ref: refs/heads/<branch-name> 的形式,表示當(dāng)前所在的分支。
通過(guò)查看 HEAD 文件的內(nèi)容,可以確定當(dāng)前所在的分支或直接指向的提交。這對(duì)于了解當(dāng)前工作狀態(tài)、進(jìn)行分支操作和切換等非常有用。
注意: 不應(yīng)手動(dòng)修改或刪除 HEAD 文件,以免導(dǎo)致倉(cāng)庫(kù)狀態(tài)不一致。Git 會(huì)自動(dòng)更新 HEAD 文件,以反映當(dāng)前所在的分支或提交。
2.11 index【重要】
index
是一個(gè)二進(jìn)制文件,也成為暫存區(qū)(staging area)或者索引(index)。
index 文件記錄了當(dāng)前工作目錄中被修改的文件的快照信息。當(dāng)你使用 git add
命令將文件添加到暫存區(qū)時(shí),Git 會(huì)將這些文件的快照信息保存在 index 文件中。
index 文件的內(nèi)容包括文件名、文件的元數(shù)據(jù)(如權(quán)限和時(shí)間戳)以及文件內(nèi)容的哈希值。它充當(dāng)了工作目錄和下一次提交之間的橋梁。
通過(guò)使用 git status
命令,你可以查看 index 文件的狀態(tài),了解哪些文件已經(jīng)被添加到暫存區(qū),哪些文件被修改但尚未添加。
注意: index 文件是 Git 維護(hù)的,不應(yīng)手動(dòng)修改或刪除這個(gè)文件,以免導(dǎo)致倉(cāng)庫(kù)狀態(tài)不一致。Git 會(huì)自動(dòng)更新 index 文件,以反應(yīng)當(dāng)前暫存區(qū)的狀態(tài)。
2.12 ORIG_HEAD
ORIG_HEAD
是一個(gè)特殊的引用,用于記錄最近一次 HEAD
引用的值。
在 Git 進(jìn)行一些危險(xiǎn)的操作(如 reset、merge 或者 rebase)之前,Git 會(huì)將 HEAD 原來(lái)所指向的 commit 對(duì)象的 SHA-1 值存放于 ORIG_HEAD 文件中。這樣做是為了提供一種回退的機(jī)制,以防以外操作導(dǎo)致數(shù)據(jù)丟失或不可逆轉(zhuǎn)的更改。
通過(guò)使用 git reset、git merge、git rebase 等命令進(jìn)行操作后,可以使用 git reset ORIG_HEAD
命令將 HEAD 引用恢復(fù)到之前的狀態(tài)。
2.13 packed-refs
packed-refs
是一個(gè)存儲(chǔ)遠(yuǎn)程引用的文件。
packed-refs 包含了遠(yuǎn)程分支和標(biāo)簽的引用信息,這些引用指向遠(yuǎn)程倉(cāng)庫(kù)中的特定提交。
packed-refs 文件的目的是提高性能,當(dāng)引用過(guò)多時(shí),會(huì)將其中一些引用以壓縮形式存儲(chǔ)在該文件中,以減少 .git 文件夾的大小和讀取時(shí)間。在該文件中,每個(gè)引用包含一個(gè) SHA-1 值,該值指向特定的提交。這樣,在使用 Git 命令時(shí),Git 可以更快速地訪問(wèn)和檢索這些引用。
整理完畢,完結(jié)撒花~ ??
參考地址:
1.Git中的FETCH_HEAD是什么意思?https://www.imooc.com/wenda/detail/592209文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-763566.html
2.Git 倉(cāng)庫(kù)目錄 .git 詳解,https://blog.csdn.net/nyist_zxp/article/details/109406589文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-763566.html
到了這里,關(guān)于Git(三).git 文件夾詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!