Git
English ▾ 主題 ▾ 最新版本 ▾ gitglossary 上次更新於 2.46.0

名稱

gitglossary - Git 術語表

概要

*

描述

替代物件資料庫

透過 alternates 機制,儲存庫可以從另一個稱為「替代」的物件資料庫繼承部分 物件資料庫

裸儲存庫

裸儲存庫通常是一個適當命名的 目錄,帶有 .git 後綴,其中不包含任何受版本控制之檔案的本地檢出副本。也就是說,通常存在於隱藏的 .git 子目錄中的所有 Git 管理和控制檔案都直接存在於 repository.git 目錄中,而沒有其他檔案存在並被檢出。通常,公共儲存庫的發布者會提供裸儲存庫。

blob 物件

未分類型的 物件,例如檔案的內容。

分支

「分支」是一條開發線。分支上最近的 提交稱為該分支的尖端。分支的尖端由分支 頭部參考,當在分支上進行其他開發時,頭部會向前移動。單個 Git 儲存庫可以追蹤任意數量的分支,但您的 工作目錄僅與其中一個分支(「當前」或「已檢出」分支)相關聯,並且 HEAD 指向該分支。

快取

已過時,請改用:索引

物件列表,其中列表中的每個 物件都包含對其後繼者的參考(例如,提交的後繼者可能是其父節點之一)。

變更集

BitKeeper/cvsps 對「提交」的說法。由於 Git 不儲存變更,而是儲存狀態,因此在 Git 中使用「變更集」一詞實際上沒有意義。

檢出

使用 樹狀物件或來自 物件資料庫blob 更新全部或部分 工作目錄,並在整個工作目錄已指向新的 分支時,更新 索引HEAD 的動作。

挑選提交

SCM 行話中,「挑選提交」是指從一系列變更(通常是提交)中選擇一個變更子集,並將其記錄為基於不同程式碼庫的一系列新變更。在 Git 中,這是透過 "git cherry-pick" 命令來執行,以提取現有 提交所引入的變更,並根據目前 分支的尖端將其記錄為新的提交。

乾淨

如果 工作目錄與目前 頭部所參考的 修訂版本對應,則工作目錄是乾淨的。另請參閱「髒的」。

提交

作為名詞:Git 歷史中的單一點;專案的整個歷史記錄以一組相互關聯的提交表示。「提交」一詞在 Git 中通常用於其他版本控制系統使用「修訂版本」或「版本」的地方。也用作 提交物件的簡稱。

作為動詞:透過建立代表 索引目前狀態的新提交,並將 HEAD 前移以指向新提交,將專案狀態的新快照儲存在 Git 歷史中的動作。

提交圖概念、表示和用法

由物件資料庫中提交所形成的 DAG 結構的同義詞,由分支尖端使用其連結提交的 進行參考。此結構是權威的提交圖。該圖可以用其他方式表示,例如 「提交圖」檔案

提交圖檔案

「提交圖」(通常用連字號分隔) 檔案是 提交圖的補充表示,它可以加速提交圖的遍歷。「提交圖」檔案儲存在 .git/objects/info 目錄或替代物件資料庫的 info 目錄中。

提交物件

包含特定 修訂版本資訊的 物件,例如 父節點、提交者、作者、日期以及對應於儲存修訂版本之頂層 目錄樹狀物件

類提交(也稱為 committish)

可以遞迴 取消參考至提交物件的 提交物件物件。以下都是類提交:提交物件、指向提交物件的 標籤物件、指向指向提交物件之標籤物件的標籤物件,依此類推。

核心 Git

Git 的基本資料結構和公用程式。僅公開有限的原始碼管理工具。

DAG

有向無環圖。提交物件形成有向無環圖,因為它們有父節點(有向),並且提交物件圖是無環的(沒有以相同 物件開始和結束的 )。

懸掛物件

即使從其他無法訪問的物件也無法 訪問無法訪問的物件;懸掛物件沒有任何來自 儲存庫中任何參考或 物件的參考指向它。

取消參考

參考 符號參考:存取符號參考所指向的 參考的動作。遞迴取消參考涉及對產生的參考重複上述過程,直到找到非符號參考。

參考 標籤物件:存取標籤指向的 物件的動作。標籤透過對結果物件重複操作來遞迴取消參考,直到結果具有指定的 物件類型(如適用)或任何非「標籤」物件類型。在標籤的上下文中,「遞迴取消參考」的同義詞是「剝離」。

參考 提交物件:存取提交的樹狀物件的動作。提交無法遞迴取消參考。

除非另有說明,否則在 Git 命令或協定的上下文中使用的「取消參考」是隱式遞迴的。

分離的 HEAD

通常,HEAD 儲存 分支的名稱,並且對歷史記錄 HEAD 執行的命令會對導致 HEAD 指向的分支尖端的歷史記錄進行操作。但是,Git 也允許您 檢出任意 提交,該提交不一定是任何特定分支的尖端。處於這種狀態的 HEAD 稱為「分離」。

請注意,即使 HEAD 處於分離狀態,操作目前分支歷史記錄的命令(例如:git commit 在其之上建立新的歷史記錄)仍然有效。它們會更新 HEAD 以指向更新後歷史記錄的頂端,而不會影響任何分支。而更新或查詢關於目前分支資訊的命令(例如:git branch --set-upstream-to 設定目前分支整合的遠端追蹤分支),顯然無法運作,因為在這種狀態下,沒有(真正的)目前分支可供查詢。

目錄

您使用 "ls" 得到的列表 :-)

髒的

如果 工作樹 包含尚未 提交 到目前 分支 的修改,則稱其為「髒的」。

邪惡合併

邪惡合併是指引入的變更並未出現在任何 父節點 中的 合併

快速轉送

快速轉送是一種特殊的 合併 類型,當您擁有一個 修訂版本,並且「合併」另一個 分支 的變更時,該變更恰好是您擁有的修訂版本的後代。在這種情況下,您不會建立新的 合併 提交,而是直接更新您的分支以指向與您要合併的分支相同的修訂版本。這種情況經常會發生在遠端 儲存庫遠端追蹤分支 上。

抓取

抓取 分支 表示從遠端 儲存庫 取得分支的 頭部參考,找出本地 物件資料庫 中遺失的物件,並取得它們。另請參閱 git-fetch[1]

檔案系統

Linus Torvalds 最初將 Git 設計為使用者空間檔案系統,即用於保存檔案和目錄的基礎架構。這確保了 Git 的效率和速度。

Git 封存

對於 Arch 的使用者來說,是 儲存庫 的同義詞。

gitfile

工作樹根目錄下的普通檔案 .git,指向真正儲存庫的目錄。如需正確使用,請參閱 git-worktree[1]git-submodule[1]。如需語法,請參閱 gitrepository-layout[5]

嫁接

嫁接允許透過記錄提交的虛假祖先資訊,將兩個原本不同的開發線連接在一起。這樣,您可以讓 Git 假裝 提交 所擁有的 父節點 集合與建立提交時記錄的不同。透過 .git/info/grafts 檔案設定。

請注意,嫁接機制已過時,可能會導致儲存庫之間傳輸物件時出現問題;如需更靈活、更穩健的系統來執行相同操作,請參閱 git-replace[1]

雜湊

在 Git 的上下文中,是 物件名稱 的同義詞。

頭部

指向 分支 頂端 提交具名參考。頭部儲存在 $GIT_DIR/refs/heads/ 目錄中的檔案中,使用壓縮參考時除外。(請參閱 git-pack-refs[1]。)

HEAD

目前的 分支。更詳細地說:您的 工作樹 通常是從 HEAD 所參考的樹狀結構狀態衍生而來。HEAD 是指您儲存庫中的其中一個 頭部 的參考,但使用 分離的 HEAD 時除外,在這種情況下,它會直接參考任意提交。

頭部參考

頭部 的同義詞。

掛勾

在執行數個 Git 命令的過程中,會呼叫選擇性指令碼,讓開發人員新增功能或檢查。通常,掛勾允許預先驗證命令並可能中止命令,並允許在操作完成後發送後續通知。掛勾指令碼位於 $GIT_DIR/hooks/ 目錄中,只需移除檔案名稱中的 .sample 後綴即可啟用。在較早版本的 Git 中,您必須使其可執行。

索引

包含狀態資訊的檔案集合,其內容以物件的形式儲存。索引是您 工作樹 的儲存版本。事實上,它還可以包含工作樹的第二個,甚至第三個版本,它們在 合併 時使用。

索引項目

儲存在 索引 中關於特定檔案的資訊。如果 合併 已開始但尚未完成(即,如果索引包含該檔案的多個版本),則索引項目可能未合併。

master

預設的開發 分支。無論何時建立 Git 儲存庫,都會建立一個名為「master」的分支,並成為作用中的分支。在大多數情況下,這包含本地開發,儘管這純粹是約定俗成的,並非強制要求。

合併

作為動詞:將另一個 分支(可能來自外部 儲存庫)的內容帶入目前分支。當合併的分支來自不同的儲存庫時,會先 抓取 遠端分支,然後將結果合併到目前分支中。這種抓取和合併操作的組合稱為 提取。合併由自動流程執行,該流程會識別分支分歧以來所做的變更,然後將所有這些變更一起套用。在變更衝突的情況下,可能需要手動介入才能完成合併。

作為名詞:除非是 快速轉送,否則成功的合併會建立新的 提交,代表合併的結果,並以合併的 分支 的頂端作為 父節點。此提交稱為「合併提交」,或有時簡稱為「合併」。

物件

Git 中的儲存單位。它以其內容的 SHA-1 唯一識別。因此,物件無法變更。

物件資料庫

儲存一組「物件」,而個別 物件 則以其 物件名稱 識別。物件通常存在於 $GIT_DIR/objects/ 中。

物件識別碼 (oid)

物件名稱 的同義詞。

物件名稱

物件 的唯一識別碼。物件名稱通常以 40 個字元的十六進位字串表示。也俗稱為 SHA-1

物件類型

描述 物件 類型其中一個識別碼「提交」、「樹狀結構」、「標籤」或「blob」。

章魚式合併

合併 兩個以上的 分支

孤立

進入尚未存在的分支(即 未誕生的 分支)的動作。在此類操作之後,第一次建立的提交將成為沒有父節點的提交,開始新的歷史記錄。

origin

預設的上游 儲存庫。大多數專案至少有一個他們追蹤的上游專案。預設情況下,origin 用於該目的。新的上游更新將會抓取到名為 origin/上游分支名稱的 遠端追蹤分支 中,您可以使用 git branch -r 查看這些分支。

覆蓋

僅更新檔案並將檔案新增至工作目錄,但不刪除它們,類似於 cp -R 更新目的地目錄中的內容的方式。這是從 索引樹狀結構式 中檢出檔案時,檢出 的預設模式。相反地,非覆蓋模式也會刪除來源中不存在的追蹤檔案,類似於 rsync --delete

壓縮包

已壓縮成一個檔案的物件集合(為了節省空間或有效率地傳輸它們)。

壓縮包索引

壓縮包中物件的識別碼和其他資訊的列表,以協助有效率地存取壓縮包的內容。

路徑規範

用於限制 Git 命令中路徑的模式。

路徑規範用於「git ls-files」、「git ls-tree」、「git add」、「git grep」、「git diff」、「git checkout」和許多其他命令的命令列上,以將操作範圍限制為樹狀結構或工作樹的某些子集。請參閱每個命令的文件,以了解路徑是相對於目前目錄還是最上層目錄。路徑規範語法如下:

  • 任何路徑都與其自身匹配

  • 直到最後一個斜線的路徑規範代表目錄前綴。該路徑規範的範圍限制於該子樹。

  • 路徑規範的其餘部分是路徑名稱其餘部分的模式。相對於目錄前綴的路徑將使用 fnmatch(3) 與該模式進行比對;特別是,*? 可以 比對目錄分隔符號。

例如,Documentation/*.jpg 會比對 Documentation 子樹中的所有 .jpg 檔案,包括 Documentation/chapter_1/figure_1.jpg。

以冒號 : 開頭的路徑規格 (pathspec) 具有特殊含義。在簡短形式中,前導冒號 : 後面接著零個或多個「魔術簽名」字母(可選擇以另一個冒號 : 終止),而其餘部分則是與路徑匹配的模式。「魔術簽名」由非字母數字、glob、正規表達式特殊字元或冒號的 ASCII 符號組成。如果模式以不屬於「魔術簽名」符號集且不是冒號的字元開頭,則可以省略終止「魔術簽名」的可選冒號。

在長形式中,前導冒號 : 後面接著一個左括號 (、一個以逗號分隔的零個或多個「魔術字」列表和一個右括號 ),而其餘部分則是與路徑匹配的模式。

僅包含冒號的路徑規格表示「沒有路徑規格」。此形式不應與其他路徑規格組合使用。

頂部

魔術字 top (魔術簽名:/) 使模式從工作樹的根目錄開始匹配,即使您是從子目錄內執行命令也是如此。

字面

模式中的萬用字元 (例如 *?) 會被視為字面字元。

icase

大小寫不敏感匹配。

glob

Git 將模式視為適合 fnmatch(3) 取用的 shell glob,並帶有 FNM_PATHNAME 旗標:模式中的萬用字元不會匹配路徑名稱中的 /。例如,"Documentation/*.html" 會匹配 "Documentation/git.html",但不會匹配 "Documentation/ppc/ppc.html" 或 "tools/perf/Documentation/perf.html"。

在針對完整路徑名稱匹配的模式中,兩個連續的星號 ("**") 可能具有特殊含義

  • 開頭的 "**" 後面跟著一個斜線表示在所有目錄中匹配。例如,"**/foo" 會匹配任何位置的檔案或目錄 "foo",與模式 "foo" 相同。"**/foo/bar" 會匹配任何位置的檔案或目錄 "bar",該檔案或目錄直接位於目錄 "foo" 下。

  • 結尾的 "/**" 會匹配內部的所有內容。例如,"abc/**" 會匹配目錄 "abc" 內的所有檔案,相對於 .gitignore 檔案的位置,具有無限深度。

  • 一個斜線後面跟著兩個連續的星號,然後是一個斜線,會匹配零個或多個目錄。例如,"a/**/b" 會匹配 "a/b"、"a/x/b"、"a/x/y/b" 等等。

  • 其他連續的星號被視為無效。

    Glob 魔術與字面魔術不相容。

attr

attr: 之後,會出現一個以空格分隔的「屬性要求」列表,所有這些要求都必須符合,路徑才被視為匹配;這是除了通常的非魔術路徑規格模式匹配之外的要求。請參閱 gitattributes[5]

路徑的每個屬性要求都採用以下形式之一

  • "ATTR" 要求設定屬性 ATTR

  • "-ATTR" 要求取消設定屬性 ATTR

  • "ATTR=VALUE" 要求將屬性 ATTR 設定為字串 VALUE

  • "!ATTR" 要求未指定屬性 ATTR

    請注意,當針對樹狀物件進行匹配時,屬性仍然從工作樹中取得,而不是從給定的樹狀物件中取得。

排除

在路徑匹配任何非排除路徑規格之後,它將透過所有排除路徑規格 (魔術簽名:! 或其同義詞 ^) 執行。如果匹配,則會忽略路徑。當沒有非排除路徑規格時,排除會套用於結果集,如同在沒有任何路徑規格的情況下調用一樣。

提交物件包含開發線上邏輯前身(即其父項)的(可能為空的)列表。

剝離

遞迴 取消引用 標籤物件 的動作。

術語 是指 diffcore 常式的一個選項,該選項可協助選取新增或刪除給定文字字串的變更。使用 --pickaxe-all 選項,可用於檢視引入或移除特定文字行的完整 變更集。請參閱 git-diff[1]

水管

核心 Git 的可愛名稱。

瓷器

依賴 核心 Git 的程式和程式套件的可愛名稱,提供對核心 Git 的高階存取權。瓷器呈現比 水管 更多的 SCM 介面。

每個工作樹的參考

每個 工作樹 而非全域的參考。目前只有 HEAD 和任何以 refs/bisect/ 開頭的參考,但稍後可能會包含其他不尋常的參考。

虛擬參考

語義與一般參考不同的參考。這些參考可以透過一般的 Git 命令讀取,但無法透過 git-update-ref[1] 之類的命令寫入。

Git 已知下列虛擬參考

  • FETCH_HEADgit-fetch[1]git-pull[1] 寫入。它可能會參考多個物件 ID。每個物件 ID 都會使用中繼資料進行註解,以指示其擷取來源及其擷取狀態。

  • MERGE_HEADgit-merge[1] 在解決合併衝突時寫入。它包含所有正在合併的提交 ID。

拉取

拉取 分支 表示 擷取 它並 合併 它。另請參閱 git-pull[1]

推送

推送 分支 表示從遠端 儲存庫 取得分支的 head 參考,找出它是否是分支的本機 head 參考的祖先,如果是,則將所有可從本機 head 參考 到達 且遠端儲存庫中缺少的所有物件,放入遠端 物件資料庫,並更新遠端 head 參考。如果遠端 head 不是本機 head 的祖先,則推送會失敗。

可到達

據說給定 提交 的所有祖先都可從該提交「到達」。更廣泛地說,如果我們可以在一個 中從另一個到達一個 物件,該鏈會追蹤 標籤 到它們所標記的任何內容、提交 到其父項或樹狀結構,以及 樹狀結構 到它們包含的樹狀結構或 blob,則一個物件可以從另一個物件到達。

可到達性點陣圖

可到達性點陣圖會儲存封裝檔案或多封裝索引 (MIDX) 中選定的一組提交的可 到達性 的相關資訊,以加快物件搜尋速度。這些點陣圖會儲存在 ".bitmap" 檔案中。儲存庫最多只能使用一個點陣圖檔案。點陣圖檔案可能屬於一個封裝或儲存庫的多封裝索引(如果存在)。

變基

分支 中的一系列變更重新應用到不同的基準,並將該分支的 head 重設為結果。

參考

一個指向 物件名稱 或另一個參考的名稱(後者稱為 符號參考)。為了方便起見,當參考用作 Git 命令的引數時,有時可以縮寫;有關詳細資訊,請參閱 gitrevisions[7]。參考儲存在 儲存庫 中。

參考命名空間是階層式的。參考名稱必須以 refs/ 開頭,或是位於階層的根目錄中。對於後者,它們的名稱必須遵循以下規則

  • 該名稱僅包含大寫字元或底線。

  • 該名稱以 "_HEAD" 結尾,或等於 "HEAD"。

    在階層的根目錄中,有一些不符合這些規則的不規則參考。以下清單是詳盡的,未來不應擴充

  • AUTO_MERGE

  • BISECT_EXPECTED_REV

  • NOTES_MERGE_PARTIAL

  • NOTES_MERGE_REF

  • MERGE_AUTOSTASH

    不同的子階層用於不同的目的。例如,refs/heads/ 階層用於表示本機分支,而 refs/tags/ 階層用於表示本機標籤。

參考日誌

參考日誌顯示參考的本機「歷程記錄」。換句話說,它可以告訴您 儲存庫中的倒數第三個修訂版本是什麼,以及昨天晚上 9:14 儲存庫中的目前狀態是什麼。有關詳細資訊,請參閱 git-reflog[1]

參考規格

「參考規格」由 擷取推送 用來描述遠端 參考 與本機參考之間的對應。有關詳細資訊,請參閱 git-fetch[1]git-push[1]

遠端儲存庫

用於追蹤相同專案但位於其他位置的 儲存庫。若要與遠端進行通訊,請參閱 擷取推送

遠端追蹤分支

用於追蹤來自另一個 儲存庫 的變更的 參考。它通常看起來像 refs/remotes/foo/bar(表示它追蹤遠端中名為 foo 的分支 bar),並且符合已設定的擷取 參考規格 的右側。遠端追蹤分支不應包含直接修改或對其進行的本機提交。

儲存庫

參考 的集合,以及包含所有可從參考 到達 的物件的 物件資料庫,可能還附帶來自一個或多個 瓷器 的中繼資料。儲存庫可以透過 替代機制 與其他儲存庫共用物件資料庫。

解決

手動修復失敗的自動 合併 所遺留的內容的動作。

修訂版本

提交(名詞)的同義詞。

回溯

拋棄部分開發進度,也就是將head 指派到較早的版本

SCM

原始碼管理(工具)。

SHA-1

「安全雜湊演算法 1」;一種加密雜湊函數。在 Git 的上下文中,作為物件名稱的同義詞使用。

淺層複製 (shallow clone)

基本上是淺層儲存庫的同義詞,但該詞組更明確地指出它是透過執行 git clone --depth=... 命令所建立的。

淺層儲存庫 (shallow repository)

淺層儲存庫具有不完整的歷史記錄,其中某些提交父提交已被截斷(換句話說,Git 被告知要假裝這些提交沒有父提交,即使它們已記錄在提交物件中)。當您只對專案的近期歷史記錄感興趣時,即使上游記錄的實際歷史記錄更大,這有時也很有用。淺層儲存庫是透過將 --depth 選項提供給git-clone[1] 來建立的,其歷史記錄稍後可以使用git-fetch[1] 來加深。

暫存條目 (stash entry)

用於臨時儲存髒的工作目錄和索引內容以供未來重複使用之物件

子模組 (submodule)

在另一個儲存庫(後者稱為超專案)內保存單獨專案歷史記錄的儲存庫

超專案 (superproject)

在其工作樹中將其他專案的儲存庫作為子模組參照的儲存庫。超專案知道所包含子模組的提交物件的名稱(但不持有其複本)。

符號參照 (symref)

符號參照:它不是包含 SHA-1 ID 本身,而是採用 ref: refs/some/thing 的格式,當被參照時,它會遞迴地解參照到此參照。HEAD 是符號參照的主要範例。符號參照使用 git-symbolic-ref[1] 命令來操作。

標籤 (tag)

refs/tags/ 命名空間下的參照,指向任意類型的物件(通常標籤指向標籤提交物件)。與head 相反,標籤不會被 commit 命令更新。Git 標籤與 Lisp 標籤(在 Git 的上下文中稱為物件類型)無關。標籤最常用於標記提交祖先中的特定點。

標籤物件 (tag object)

包含指向另一個物件之參照物件,它可以包含訊息,就像提交物件一樣。它還可以包含(PGP)簽名,在這種情況下,它被稱為「簽署標籤物件」。

主題分支 (topic branch)

開發人員用來識別概念開發線的一般 Git 分支。由於分支非常容易且成本不高,因此通常希望有多個小分支,每個分支都包含定義明確的概念或小的增量但相關的變更。

樹 (tree)

要么是工作樹,要么是樹物件以及相關的blob 和樹物件(即工作樹的已儲存表示形式)。

樹物件 (tree object)

包含檔案名稱和模式列表以及與關聯的 blob 和/或樹物件之參照的物件等同於目錄

樹狀 (tree-ish)(也稱為 treeish)

樹物件或可以遞迴地解參照到樹物件的物件。解參照提交物件會產生與版本最上層目錄相對應的樹物件。以下都是樹狀:提交狀、樹物件、指向樹物件的標籤物件、指向指向樹物件的標籤物件的標籤物件等等。

未出生 (unborn)

HEAD 可以指向一個尚未存在且尚未有任何提交的分支,而這樣的分支稱為未出生的分支。使用者遇到未出生分支最典型的方式是全新建立一個儲存庫,而不是從其他地方複製。HEAD 將指向尚未出生的 main(或 master,取決於您的配置)分支。此外,某些操作可以使用 孤兒 選項讓您進入未出生的分支。

未合併索引 (unmerged index)

包含未合併索引條目索引

不可達物件 (unreachable object)

無法從分支標籤或任何其他參照存取物件

上游分支 (upstream branch)

合併到相關分支(或將相關分支重新變基到其上)的預設分支。它是透過 branch.<name>.remote 和 branch.<name>.merge 配置的。如果 A 的上游分支是 origin/B,有時我們會說「A 正在追蹤 origin/B」。

工作樹 (working tree)

實際已簽出檔案的樹狀結構。工作樹通常包含 HEAD 提交樹的內容,以及您所做但尚未提交的任何本機變更。

工作區 (worktree)

儲存庫可以附加零個(即裸儲存庫)或一個或多個工作區。一個「工作區」由一個「工作樹」和儲存庫元數據組成,其中大多數在單個儲存庫的其他工作區之間共享,其中一些是每個工作區單獨維護的(例如,索引、HEAD 和 MERGE_HEAD 等虛擬參照、每個工作區的參照和每個工作區的設定檔)。

GIT

git[1] 套件的一部分

scroll-to-top