簡體中文 ▾ 主題 ▾ 最新版本 ▾ gitglossary 上次更新於 2.51.0

名稱

gitglossary - Git 術語表

概要

*

描述

備用物件資料庫

透過 alternates 機制,一個 倉庫 可以從另一個稱為“備用”的物件資料庫繼承部分 物件資料庫

裸倉庫

裸倉庫通常是一個以 .git 字尾命名的適當命名的 目錄,其中沒有本地簽出的任何受版本控制的檔案副本。也就是說,通常存在於隱藏的 .git 子目錄中的所有 Git 管理和控制檔案都直接存在於 repository.git 目錄中,而沒有其他檔案存在和簽出。通常,公共倉庫的釋出者會提供裸倉庫。

blob 物件

無型別 物件,例如檔案的內容。

分支

“分支”是一條開發線。分支上最新的 提交 被稱為該分支的尖端。分支的尖端由一個分支 head 引用,該 head 隨著分支上進行的額外開發而向前移動。單個 Git 倉庫 可以跟蹤任意數量的分支,但您的 工作樹 只與其中一個(“當前”或“已簽出”的分支)相關聯,而 HEAD 指向該分支。

快取

已廢棄:索引

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

更改集

BitKeeper/cvsps 對“提交”的說法。由於 Git 不儲存更改,而是儲存狀態,因此使用“更改集”一詞對 Git 來說確實沒有意義。

簽出

使用 物件資料庫 中的 樹物件blob 更新所有或部分 工作樹 的操作,並在整個工作樹指向新 分支 時更新 索引HEAD

挑選提交

SCM 術語中,“cherry pick”意味著從一系列更改(通常是提交)中選擇一部分更改,並將它們記錄為不同程式碼庫之上的新一系列更改。在 Git 中,這透過“git cherry-pick”命令來完成,以提取現有 提交 引入的更改,並將其記錄在當前 分支 的尖端之上,作為一個新提交。

乾淨

如果 工作樹 與當前 head 引用的 修訂 相對應,則該工作樹是乾淨的。另請參閱“”。

提交

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

作為動詞:透過建立一個代表當前 索引 狀態的新提交併使 HEAD 指向新提交來將專案狀態的新快照儲存在 Git 歷史中的操作。

提交圖概念、表示和用法

物件資料庫中提交形成的 DAG 結構的同義詞,由分支尖端 引用,並使用它們連結提交的 。此結構是確定的提交圖。該圖可以以其他方式表示,例如 “提交圖檔案”

提交圖檔案

“提交圖”(通常用連字元)檔案是 提交圖 的補充表示,用於加速提交圖遍歷。“提交圖”檔案儲存在 .git/objects/info 目錄或備用物件資料庫的 info 目錄中。

提交物件

一個 物件,包含有關特定 修訂 的資訊,例如 父項、提交者、作者、日期以及與儲存的修訂的頂層 目錄 相對應的 樹物件

commit-ish(也叫 committish)

一個 提交物件 或一個可以遞迴 解引用 到提交物件的 物件。以下都是 commit-ish:提交物件、指向提交物件的 標籤物件、指向指向提交物件的標籤物件的標籤物件等。

核心 Git

Git 的基本資料結構和實用程式。只暴露有限的原始碼管理工具。

DAG

有向無環圖。 提交物件 形成一個有向無環圖,因為它們有父項(有向),並且提交物件的圖是無環的(沒有 以相同的 物件 開頭和結尾)。

懸空物件

一個 不可達物件,即使從其他不可達物件也無法 到達;懸空物件沒有來自 倉庫 中任何引用或 物件 的引用。

解引用

指代 符號引用:訪問符號引用所指向的 引用 的操作。遞迴解引用涉及對結果引用重複上述過程,直到找到非符號引用為止。

指代 標籤物件:訪問標籤指向的 物件 的操作。標籤透過對結果物件重複操作來遞迴解引用,直到結果具有指定的 物件型別(如果適用)或任何非“標籤”物件型別。在標籤的上下文中,“遞迴解引用”的同義詞是“剝離”。

指代 提交物件:訪問提交的樹物件的操作。提交不能遞迴解引用。

除非另有說明,否則在 Git 命令或協議的上下文中,“解引用”是隱式遞迴的。

分離 HEAD

通常 HEAD 儲存一個 分支 的名稱,而對 HEAD 代表的歷史進行操作的命令則操作指向分支尖端的歷史。但是,Git 也允許您 簽出 一個任意的 提交,該提交不一定是任何特定分支的尖端。處於這種狀態的 HEAD 被稱為“分離”。

請注意,在 HEAD 分離狀態下,對當前分支歷史進行操作的命令(例如,git commit 在其之上構建新歷史)仍然有效。它們會更新 HEAD 以指向更新歷史的尖端,而不會影響任何分支。顯然,更新或查詢有關當前分支的資訊的命令(例如,設定當前分支與哪個遠端跟蹤分支整合(git branch --set-upstream-to))無效,因為在這種狀態下沒有(真正的)當前分支可以查詢。

目錄

使用“ls”命令獲得的列表 :-)

工作樹 包含尚未 提交 到當前 分支 的修改時,該工作樹被稱為“髒”的。

惡意合併

惡意合併是指引入在任何 父項 中都不存在的更改的 合併

快進

快進是一種特殊的 合併 型別,當您有一個 修訂 並且正在“合併”另一個 分支 的更改,而這些更改恰好是您現有分支的後代。在這種情況下,您不會建立一個新的 合併 提交,而是僅將您的分支更新為指向與您正在合併的分支相同的修訂。這在遠端 倉庫遠端跟蹤分支 上會經常發生。

抓取

抓取一個 分支 意味著從遠端 倉庫 獲取該分支的 head ref,找出本地 物件資料庫 中缺少哪些物件,並將它們也獲取過來。另請參閱 git-fetch[1]

檔案系統

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

Git 存檔

(面向存檔人員)倉庫 的同義詞。

gitfile

工作樹根目錄下放置的普通檔案 .git,它指向實際倉庫的目錄。有關正確使用,請參閱 git-worktree[1]git-submodule[1]。有關語法,請參閱 gitrepository-layout[5]

嫁接

嫁接透過記錄提交的虛假祖先資訊,使兩個原本不同的開發線得以連線起來。這樣,您可以讓 Git 假裝一個 提交 所擁有的 父項 列表與建立提交時記錄的列表不同。透過 .git/info/grafts 檔案進行配置。

請注意,嫁接機制已過時,可能導致倉庫間物件傳輸出現問題;請參閱git-replace[1]以獲取更靈活和健壯的實現相同功能的系統。

雜湊

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

head

指向 分支 尖端 提交命名引用。Head 儲存在 $GIT_DIR/refs/heads/ 目錄下的檔案中,除非使用打包引用。 (參見 git-pack-refs[1]。)

HEAD

當前 分支。更詳細地說:您的 工作樹 通常來源於 HEAD 引用的樹的狀態。HEAD 是對您倉庫中某個 head 的引用,除非使用 分離 HEAD,在這種情況下,它直接引用任意提交。

head ref

head 的同義詞。

鉤子

在多個 Git 命令的正常執行過程中,會呼叫可選指令碼,允許開發人員新增功能或檢查。通常,鉤子允許在命令執行前進行驗證並可能中止,並在操作完成後進行事後通知。鉤子指令碼位於 $GIT_DIR/hooks/ 目錄中,透過簡單地刪除檔名中的 .sample 字尾即可啟用。在 Git 的早期版本中,您必須使其可執行。

索引

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

索引項

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

主分支

預設的開發 分支。每當您建立一個 Git 倉庫 時,都會建立一個名為“master”的分支,並使其成為活動分支。在大多數情況下,這包含本地開發,但這純粹是約定俗成,並非強制要求。

合併

作為動詞:將另一個 分支(可能來自外部 倉庫)的內容合併到當前分支。如果合併進來的分支來自不同的倉庫,則首先透過 抓取 遠端分支,然後將結果合併到當前分支。這種抓取和合並操作的組合稱為 拉取。合併透過一個自動過程來識別分支分叉以來所做的更改,然後將所有這些更改一起應用。在更改發生衝突的情況下,可能需要手動干預來完成合並。

作為名詞:除非是 快進,否則成功的合併將建立一個代表合併結果的新 提交,並將其 父項 設定為被合併 分支 的尖端。此提交被稱為“合併提交”,有時也簡稱為“合併”。

物件

Git 中的儲存單元。它由其內容的 SHA-1 唯一標識。因此,物件無法更改。

物件資料庫

儲存一組“物件”,單個 物件 由其 物件名稱 標識。物件通常位於 $GIT_DIR/objects/

物件識別符號 (oid)

物件名稱 的同義詞。

物件名稱

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

物件型別

識別符號“commit”、“tree”、“tag”或“blob”之一,用於描述 物件 的型別。

章魚合併

合併兩個以上的 分支

孤立

進入一個尚不存在的 分支(即一個 未出生 的分支)的操作。在此操作之後,首次建立的提交將成為一個沒有父項的提交,從而開始一個新的歷史。

origin

預設的上游 倉庫。大多數專案至少有一個它們跟蹤的上游專案。預設情況下,origin 用於此目的。新的上游更新將被抓取到名為 origin/name-of-upstream-branch 的 遠端跟蹤分支 中,您可以使用 git branch -r 檢視它們。

覆蓋

僅更新和新增檔案到工作目錄,但不刪除它們,類似於 cp -R 會更新目標目錄中的內容。這是從 索引tree-ish 簽出檔案時,簽出 中的預設模式。相反,無覆蓋模式也會刪除源中不存在的跟蹤檔案,類似於 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。

以冒號 : 開頭的路徑規範具有特殊含義。在短格式中,開頭的冒號 : 後面跟著零個或多個“魔術簽名”字母(可以選擇以另一個冒號 : 結束),其餘部分是要與路徑匹配的模式。“魔術簽名”由既不是字母數字、萬用字元、正則表示式特殊字元也不是冒號的 ASCII 符號組成。如果模式以不屬於“魔術簽名”符號集且不是冒號的字元開頭,則可以省略終止“魔術簽名”的可選冒號。

在長格式中,開頭的冒號 : 後面跟著一個開括號 (、一個由零個或多個“魔術單詞”組成的逗號分隔列表和一個閉括號 ),其餘部分是要與路徑匹配的模式。

僅包含冒號的路徑規範表示“沒有路徑規範”。此形式不應與其他路徑規範結合使用。

top

魔術單詞 top(魔術簽名:/)使模式從工作樹的根目錄開始匹配,即使您正在從子目錄中執行命令。

literal

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

icase

不區分大小寫的匹配。

glob

Git 將模式視為 shell glob,適合使用 FNM_PATHNAME 標誌傳遞給 fnmatch(3):模式中的萬用字元將不會匹配路徑名中的 /。例如,“Documentation/*.html”匹配“Documentation/git.html”,但不匹配“Documentation/ppc/ppc.html”或“tools/perf/Documentation/perf.html”。

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

  • 開頭的“**”後面跟著一個斜槓表示在所有目錄中匹配。例如,“**/foo”在任何地方匹配檔案或目錄“foo”。“**/foo/bar”匹配目錄“foo”下任何位置的檔案或目錄“bar”。

  • 末尾的“/**”匹配其中的所有內容。例如,“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 未指定。

    請注意,在匹配樹物件時,屬性仍然從工作樹獲取,而不是從給定的樹物件獲取。

exclude

在路徑匹配任何非排除路徑規範後,它將透過所有排除路徑規範(魔術簽名:! 或其同義詞 ^)進行處理。如果匹配,則忽略該路徑。當沒有非排除路徑規範時,將按呼叫時未指定任何路徑規範的方式將排除應用於結果集。

父項

一個 提交物件 包含一個(可能為空的)開發線中的邏輯前驅列表,即其父項。

剝離

遞迴 解引用 標籤物件 的操作。

拾取器

術語 拾取器 指的是 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 ref,檢查它是否是本地 head ref 的祖先,如果是,則將所有 可達 自本地 head ref 的物件,且這些物件在遠端倉庫中缺失,放入遠端 物件資料庫,並更新遠端 head ref。如果遠端 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/層次結構用於表示本地標籤。

reflog

reflog顯示引用的本地“歷史”。換句話說,它可以告訴您倉庫中倒數第三個修訂版是什麼,以及倉庫昨天下午9:14的當前狀態是什麼。有關詳細資訊,請參閱git-reflog[1]

refspec

“refspec”由fetchpush用於描述遠端引用和本地引用之間的對映。有關詳細資訊,請參閱git-fetch[1]git-push[1]

遠端倉庫

用於跟蹤同一專案但位於其他地方的倉庫。要與遠端倉庫通訊,請參閱fetchpush

遠端跟蹤分支

用於跟蹤另一個倉庫的更改的引用。它通常看起來像refs/remotes/foo/bar(表示它跟蹤遠端foo中的一個名為bar的分支),並且匹配已配置的fetch refspec的右側。遠端跟蹤分支不應包含直接修改或對其進行本地提交。

倉庫

一組引用以及一個物件資料庫,其中包含從引用可達的所有物件,可能還附帶一個或多個porcelains的元資料。倉庫可以透過alternates機制與其他倉庫共享物件資料庫。

解決

手動修復失敗的自動合併遺留問題。

修訂

(名詞)提交的同義詞。

回退

丟棄一部分開發工作,即head指向更早的修訂

SCM

原始碼管理(工具)。

SHA-1

“安全雜湊演算法1”(Secure Hash Algorithm 1);一種加密雜湊函式。在Git的上下文中用作物件名的同義詞。

淺層克隆

很大程度上是淺層倉庫的同義詞,但該短語更明確地表示它是透過執行git clone --depth=...命令建立的。

淺層倉庫

淺層倉庫具有不完整的歷史,其中一些提交父提交已被“燒蝕”(換句話說,Git被告知假裝這些提交沒有父提交,即使它們已記錄在提交物件中)。這有時在您只對專案的近期歷史感興趣但上游記錄的實際歷史要大得多時很有用。透過給git-clone[1]提供--depth選項來建立淺層倉庫,並且其歷史以後可以用git-fetch[1]加深。

stash條目

一個物件,用於臨時儲存工作目錄和索引的內容,以便將來重用。

子模組

一個倉庫,它在另一個倉庫(後者稱為超專案)內部儲存單獨專案的歷史。

超專案

一個倉庫,它在其工作樹中將其他專案的倉庫引用為子模組。超專案知道(但並不擁有)所包含子模組的提交物件的名稱。

符號引用

符號引用:它不包含SHA-1 ID本身,而是採用ref: refs/some/thing的格式,當被引用時,它會遞迴地解引用到該引用。HEAD是符號引用的主要示例。可以使用git-symbolic-ref[1]命令來運算子號引用。

標籤

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

標籤物件

一個物件,包含一個指向另一個物件的引用,該物件可以像提交物件一樣包含訊息。它還可以包含(PGP)簽名,在這種情況下稱為“簽名標籤物件”。

主題分支

一個常規的Git分支,開發人員用它來識別概念性的開發線。由於分支非常容易建立且成本低廉,因此通常希望有幾個小的分支,每個分支都包含非常明確的概念或小的增量但相關的更改。

尾註

鍵值元資料。尾註有時會出現在提交訊息的末尾。在其他社群中可能稱為“頁尾”或“標籤”。請參閱git-interpret-trailers[1]

可以是工作樹,也可以是樹物件以及相關的blob和樹物件(即工作樹的儲存表示)。

樹物件

一個物件,包含一個檔名稱和模式列表,以及指向相關blob和/或樹物件的引用。等同於目錄

tree-ish(也稱為treeish)

一個樹物件或一個可以遞迴解引用為樹物件的物件。解引用提交物件會產生與修訂的頂級目錄對應的樹物件。以下都是tree-ishes:一個commit-ish,一個樹物件,一個指向樹物件的標籤物件,一個指向指向樹物件的標籤物件的標籤物件,依此類推。

未出生

HEAD可以指向一個尚不存在且尚未包含任何提交的分支,這樣的分支稱為未出生分支。使用者最常遇到未出生分支的情況是建立一個新倉庫而未從別處克隆。HEAD將指向尚未“誕生”的main(或master,取決於您的配置)分支。某些操作還可能使用其孤立選項將您帶到未出生分支。

未合併索引

包含未合併索引條目索引

不可達物件

一個物件,它不能從分支標籤或任何其他引用可達

上游分支

合併到給定分支的預設分支(或者給定分支是基於它rebase的)。它透過branch..remote和branch..merge進行配置。如果A的上游分支是origin/B,有時我們會說“A正在跟蹤origin/B”。

工作樹

實際檢出的檔案樹。工作樹通常包含HEAD提交的樹的內容,加上您已做的但尚未提交的任何本地更改。

工作樹

一個倉庫可以有零個(即裸倉庫)或一個或多個附加的工作樹。一個“工作樹”由一個“工作目錄”和倉庫元資料組成,其中大部分由單個倉庫的其他工作樹共享,而有些則按工作樹單獨維護(例如,索引、HEAD和偽引用如MERGE_HEAD,每個工作樹的引用和每個工作樹的配置檔案)。

GIT

Git[1] 套件的一部分