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