?
This document uses PHP Chinese website manual Release
gitrepository-layout - Git Repository Layout
$GIT_DIR/*
一個(gè) Git 倉(cāng)庫(kù)有兩種不同的風(fēng)格:
一個(gè).git
目錄在工作樹(shù)的根;
一個(gè)<project>.git
是bare
存儲(chǔ)庫(kù)的目錄(即沒(méi)有自己的工作樹(shù)),通常用于與其他人交換歷史記錄,方法是將其推入并從中取回。
注意:您也可以在工作樹(shù)的根目錄中有一個(gè)純文本文件.git
,其中包含gitdir: <path>
指向具有存儲(chǔ)庫(kù)的實(shí)際目錄。此機(jī)制通常用于子模塊簽出的工作樹(shù),以允許您在包含超級(jí)項(xiàng)目的情況下訪問(wèn)git checkout
沒(méi)有子模塊的分支。將checkout
有權(quán)刪除整個(gè)子模塊工作樹(shù),又不失子模塊庫(kù)。
這些東西可能存在于 Git 倉(cāng)庫(kù)中。
objects
與此存儲(chǔ)庫(kù)關(guān)聯(lián)的對(duì)象存儲(chǔ)。通常一個(gè)對(duì)象存儲(chǔ)是自給自足的(即,在其中找到的對(duì)象所引用的所有對(duì)象也可以在其中找到),但有幾種方法可以違反它。
1. 通過(guò)創(chuàng)建淺度克隆,您可以擁有一個(gè)不完整但本地可用的存儲(chǔ)庫(kù)。參見(jiàn) git-clone [1] 。
2. 您可以使用objects/info/alternates
或$GIT_ALTERNATE_OBJECT_DIRECTORIES
機(jī)制來(lái)borrow
從其他對(duì)象存儲(chǔ)的對(duì)象。具有這種不完整對(duì)象存儲(chǔ)庫(kù)的存儲(chǔ)庫(kù)不適合被發(fā)布以用于啞輸送,但是只要objects/info/alternates
對(duì)象所存儲(chǔ)的點(diǎn)存儲(chǔ)于其中,則其他就可以。
如果設(shè)置了 $ GIT_COMMON_DIR 并且將使用 “$ GIT_COMMON_DIR / objects” ,則該目錄將被忽略。
objects/0-9a-f
新創(chuàng)建的對(duì)象存儲(chǔ)在其自己的文件中。這些對(duì)象使用 sha1 對(duì)象名稱的前兩個(gè)字符顯示在256個(gè)子目錄中,以將目錄條目objects
本身的數(shù)量保持為可管理的數(shù)量。在這里找到的對(duì)象通常被稱為unpacked
(或loose
)對(duì)象。
objects/pack
打包(在壓縮格式中存儲(chǔ)多個(gè)對(duì)象的文件以及允許它們隨機(jī)訪問(wèn)的索引文件)可在此目錄中找到。
objects/info
有關(guān)對(duì)象存儲(chǔ)的其他信息記錄在此目錄中。
objects/info/packs
這個(gè)文件是為了幫助笨拙的傳輸發(fā)現(xiàn)在這個(gè)對(duì)象存儲(chǔ)中可用的包。無(wú)論何時(shí)添加或刪除包,git update-server-info
都應(yīng)該運(yùn)行以保持該文件最新,如果存儲(chǔ)庫(kù)針對(duì)啞傳輸發(fā)布的話。git repack
這是默認(rèn)情況下。
objects/info/alternates
此文件記錄此對(duì)象存儲(chǔ)借用對(duì)象的備用對(duì)象存儲(chǔ)的路徑,每行一個(gè)路徑名。請(qǐng)注意,不僅本地 Git 工具在本地使用它,而且 HTTP fetcher 也會(huì)嘗試遠(yuǎn)程使用它; 如果在替代文件中有相對(duì)路徑(相對(duì)于對(duì)象數(shù)據(jù)庫(kù),而不是存儲(chǔ)庫(kù)?。?,這通常會(huì)起作用,但如果使用絕對(duì)路徑,它將不起作用,除非文件系統(tǒng)和 Web URL 中的絕對(duì)路徑相同。另見(jiàn)objects/info/http-alternates
。
objects/info/http-alternates
該文件將 URL 記錄到此對(duì)象存儲(chǔ)借用對(duì)象的備用對(duì)象存儲(chǔ)中,以便在通過(guò) HTTP 獲取存儲(chǔ)庫(kù)時(shí)使用。
refs
引用存儲(chǔ)在此目錄的子目錄中。該git prune
命令知道保留可從此目錄及其子目錄中找到的引用可訪問(wèn)的對(duì)象。如果設(shè)置了 $ GIT_COMMON_DIR 并且將使用 “$ GIT_COMMON_DIR / refs” ,則該目錄將被忽略。
refs/heads/name
記錄樹(shù)枝的樹(shù)枝提交對(duì)象 name
refs/tags/name
記錄任何對(duì)象名稱(不一定是提交對(duì)象,或指向提交對(duì)象的標(biāo)記對(duì)象)。
refs/remotes/name
記錄從遠(yuǎn)程存儲(chǔ)庫(kù)復(fù)制的分支的樹(shù)形提交對(duì)象。
refs/replace/<obj-sha1>
記錄替換對(duì)象的 SHA-1 <obj-sha1>
。這與 info / grafts 類似,并且由 git-replace [1] 在內(nèi)部使用和維護(hù)。這些參考文獻(xiàn)可以在庫(kù)之間進(jìn)行交換,而移植不是。
packed-refs
記錄與 refs / heads /,refs / tags / 相同的信息,并以更高效的方式記錄朋友。參見(jiàn) git-pack-refs [1] 。如果設(shè)置了 $ GIT_COMMON_DIR 并且將使用 “$ GIT_COMMON_DIR / packed-refs” ,那么該文件將被忽略。
HEAD
refs/heads/
描述當(dāng)前活動(dòng)分支的命名空間的 symref(參見(jiàn)詞匯表)。如果存儲(chǔ)庫(kù)不與任何工作樹(shù)(即bare
存儲(chǔ)庫(kù))相關(guān)聯(lián),這并沒(méi)有多大意義,但有效的 Git 存儲(chǔ)庫(kù)必須具有 HEAD 文件; 一些瓷器可能會(huì)用它來(lái)猜測(cè)儲(chǔ)存庫(kù)的指定“默認(rèn)”分支(通常master
)。如果指定的分支name
尚未(尚未)存在,則是合法的。在一些傳統(tǒng)設(shè)置中,它是一個(gè)符號(hào)鏈接,而不是指向當(dāng)前分支的 symref 。
HEAD 還可以直接記錄特定的提交,而不是作為 symref 指向當(dāng)前分支。detached HEAD.
有關(guān)詳細(xì)信息,此類狀態(tài)通常稱為參閱 git-checkout [1] 。
config
存儲(chǔ)庫(kù)特定的配置文件。如果設(shè)置了 $ GIT_COMMON_DIR 并且將使用 “$ GIT_COMMON_DIR / config” ,則忽略此文件。
branches
存儲(chǔ)用于指定 URL 的簡(jiǎn)寫(xiě)方式git fetch
,git pull
以及git push
。一個(gè)文件可以存儲(chǔ)為branches/<name>
,然后name
可以給這些命令代替repository
參數(shù)。有關(guān)詳細(xì)信息,請(qǐng)參閱 git-fetch [1] 中的 REMOTES 部分。這種機(jī)制是傳統(tǒng)的,不太可能在現(xiàn)代倉(cāng)庫(kù)中找到。如果設(shè)置了 $ GIT_COMMON_DIR 并且將使用 “$ GIT_COMMON_DIR / branches” ,則該目錄將被忽略。
hooks
鉤子是各種 Git 命令使用的定制腳本。git init
運(yùn)行時(shí)會(huì)安裝一些示例掛鉤,但默認(rèn)情況下它們都被禁用。要啟用,.sample
后綴必須通過(guò)重命名從文件名中刪除。閱讀 githooks [5] 了解每個(gè)鉤子的更多細(xì)節(jié)。如果設(shè)置了 $ GIT_COMMON_DIR 并且將使用 “$ GIT_COMMON_DIR / hooks” ,則該目錄將被忽略。
index
存儲(chǔ)庫(kù)的當(dāng)前索引文件。它通常在空倉(cāng)庫(kù)中找不到。
sharedindex.<SHA-1>
共享索引部分,由 $ GIT_DIR / index 和其他臨時(shí)索引文件引用。僅在分割索引模式下有效。
info
有關(guān)存儲(chǔ)庫(kù)的其他信息記錄在此目錄中。如果設(shè)置了 $ GIT_COMMON_DIR 并且將使用 “$ GIT_COMMON_DIR / info” ,則該目錄將被忽略。
info/refs
這個(gè)文件有助于常用的傳輸發(fā)現(xiàn)這個(gè)倉(cāng)庫(kù)中可用的參考文獻(xiàn)。如果存儲(chǔ)庫(kù)針對(duì)啞傳輸發(fā)布,則git update-server-info
每次創(chuàng)建或修改標(biāo)簽或分支時(shí)都應(yīng)該重新生成該文件。這通常是從hooks/update
掛鉤中完成的,掛鉤git-receive-pack
在您git push
進(jìn)入存儲(chǔ)庫(kù)時(shí)由命令運(yùn)行。
info/grafts
這個(gè)文件記錄假提交上代信息,假裝一個(gè)提交具有不同于提交實(shí)際創(chuàng)建的父集。每行一條記錄通過(guò)列出由空格分隔并以換行符結(jié)尾的40字節(jié)十六進(jìn)制對(duì)象名稱來(lái)描述提交及其假父代。
請(qǐng)注意,移植機(jī)制已過(guò)時(shí),并可能導(dǎo)致在庫(kù)之間傳輸對(duì)象時(shí)出現(xiàn)問(wèn)題; 請(qǐng)參閱 git-replace [1] 以獲得更靈活和更強(qiáng)大的系統(tǒng)來(lái)完成同樣的任務(wù)。
info/exclude
該文件按照 Porcelains 中的慣例存儲(chǔ)排除模式列表。.gitignore
是每個(gè)目錄的忽略文件。git status
,git add
,git rm
并且git clean
看著它,但核心的 Git 命令不看它。另見(jiàn):gitignore [5]。
info/sparse-checkout
該文件存儲(chǔ)稀疏切換分支模式。另請(qǐng)參閱:git-read-tree [1]。
remotes
商店簡(jiǎn)寫(xiě)為使用通過(guò)遠(yuǎn)程倉(cāng)庫(kù)進(jìn)行交互時(shí),URL 和默認(rèn) refnames git fetch
,git pull
和git push
命令。有關(guān)詳細(xì)信息,請(qǐng)參閱 git-fetch [1] 中的 REMOTES 部分。這種機(jī)制是傳統(tǒng)的,不太可能在現(xiàn)代倉(cāng)庫(kù)中找到。如果設(shè)置了 $ GIT_COMMON_DIR 并且將使用 “$ GIT_COMMON_DIR / remotes” ,則該目錄將被忽略。
logs
對(duì) ref 進(jìn)行的更改記錄存儲(chǔ)在此目錄中。有關(guān)更多信息,請(qǐng)參閱 git-update-ref [1] 。如果設(shè)置了 $ GIT_COMMON_DIR 并且將使用 “$ GIT_COMMON_DIR / logs” ,則該目錄將被忽略。
logs/refs/heads/name
記錄對(duì)分支提示進(jìn)行的所有更改name
。
logs/refs/tags/name
記錄對(duì)名為name
的標(biāo)簽所做的所有更改。
shallow
這與info/grafts
淺層克隆機(jī)制類似,但在內(nèi)部使用和維護(hù)。請(qǐng)參閱--depth
git-clone [1] 和 git-fetch [1] 的選項(xiàng)。如果設(shè)置了 $ GIT_COMMON_DIR 并且將使用 “$ GIT_COMMON_DIR / shallow” ,則該文件將被忽略。
commondir
如果此文件存在,$ GIT_COMMON_DIR(請(qǐng)參閱 git [1] )將被設(shè)置為此文件中指定的路徑(如果未明確設(shè)置)。如果指定的路徑是相對(duì)的,則相對(duì)于 $ GIT_DIR 。如果沒(méi)有 “commondir” 指向的存儲(chǔ)庫(kù),commondir 存儲(chǔ)庫(kù)是不完整的。
modules
包含子模塊的 git-repository 。
worktrees
包含鏈接工作樹(shù)的管理數(shù)據(jù)。每個(gè)子目錄都包含鏈接工作樹(shù)的工作樹(shù)相關(guān)部分。如果設(shè)置了 $ GIT_COMMON_DIR ,則該目錄將被忽略,在這種情況下,將使用 “$ GIT_COMMON_DIR / worktrees” 。
worktrees/<id>/gitdir
包含指向此處的 .git 文件的絕對(duì)路徑的文本文件。這用于檢查鏈接的存儲(chǔ)庫(kù)是否已被手動(dòng)刪除,并且不需要保留該目錄。每次訪問(wèn)鏈接存儲(chǔ)庫(kù)時(shí)都應(yīng)更新此文件的 mtime 。
worktrees/<id>/locked
如果此文件存在,則鏈接的工作樹(shù)可能位于便攜式設(shè)備上并且不可用。這個(gè)文件的存在防止worktrees/<id>
被自動(dòng)或手動(dòng)修剪git worktree prune
。該文件可能包含一個(gè)字符串,解釋存儲(chǔ)庫(kù)被鎖定的原因。
worktrees/<id>/link
如果此文件存在,則它是到鏈接的 .git 文件的硬鏈接。它用于檢測(cè)是否手動(dòng)刪除鏈接的存儲(chǔ)庫(kù)。