English ▾ 主題 ▾ 最新版本 ▾ git 最後更新於 2.55.0

名稱

git - 不笨的內容追蹤器

概要

git [-v | --version] [-h | --help] [-C <path>] [-c <name>=<value>]
    [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
    [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--no-lazy-fetch]
    [--no-optional-locks] [--no-advice] [--bare] [--git-dir=<path>]
    [--work-tree=<path>] [--namespace=<name>] [--config-env=<name>=<envvar>]
    <command> [<args>]

描述

Git 是一個快速、可擴充的的分散式版本控制系統,具有異常豐富的指令集,提供高階操作以及對內部機制的完整存取權限。

請參閱 gittutorial[7] 以開始使用,接著參閱 giteveryday[7] 了解實用的指令最小集。《Git 使用者手冊》有更深入的介紹。

在掌握基本概念後,您可以回到此頁面學習 Git 提供了哪些指令。您可以透過 "git help <指令>" 進一步了解個別 Git 指令。gitcli[7] 手冊頁面提供了指令列語法的總覽。

最新版 Git 文件的格式化與超連結版本,可於 https://git.github.io/htmldocs/git.htmlhttps://git-scm.tw/docs 檢視。

選項

-v
--version

列印 git 程式所屬的 Git 套件版本。

此選項在內部會轉換為 git version ...,並接受與 git-version[1] 指令相同的選項。如果同時給定 --help,則優先於 --version

-h
--help

列印概要說明及常用指令列表。如果給定了 --all-a 選項,則會列印所有可用指令。如果指定了特定的 Git 指令,此選項將會開啟該指令的手冊頁面。

亦有其他選項可控制手冊頁面的顯示方式。更多資訊請參閱 git-help[1],因為 git --help ... 在內部會轉換為 git help ...

-C <路徑>

<路徑> 作為起始目錄執行 git,而非當前工作目錄。當指定多個 -C 選項時,每個後續的非絕對路徑 -C <路徑> 皆相對於前一個 -C <路徑> 解讀。若 <路徑> 存在但為空(例如 -C ""),則不變更當前工作目錄。

此選項會影響預期路徑名稱的選項(如 --git-dir--work-tree),它們的路徑解讀將相對於由 -C 選項所決定的工作目錄。例如,以下呼叫是等價的:

git --git-dir=a.git --work-tree=b -C c status
git --git-dir=c/a.git --work-tree=c/b status
-c <名稱>=<值>

向指令傳遞設定參數。給定的值將覆蓋設定檔中的數值。<名稱> 的格式應與 git config 所列出的格式相同(子鍵以點號分隔)。

請注意,在 git -c foo.bar ... 中省略 = 是允許的,這會將 foo.bar 設為布林值 true(就像在設定檔中使用 [foo]bar 一樣)。包含等號但值為空(如 git -c foo.bar= ...)則將 foo.bar 設為空字串,git config --type=bool 會將其轉換為 false

--config-env=<名稱>=<環境變數>

如同 -c <名稱>=<值>,為設定變數 <名稱> 設定數值,其中 <環境變數> 是用來擷取該值的環境變數名稱。與 -c 不同,沒有直接將值設為空字串的捷徑,必須將環境變數本身設為空字串。若 <環境變數> 在環境中不存在,則視為錯誤。<環境變數> 不得包含等號,以避免與可能包含等號的 <名稱> 產生歧義。

這對於您想要傳遞臨時設定選項給 git,但身處在其他程序可能讀取您的指令列(例如 /proc/self/cmdline)而非環境變數(例如 /proc/self/environ)的作業系統時很有用。在 Linux 上這是預設行為,但在您的系統上可能並非如此。

請注意,這可能會增加敏感資訊(如 http.extraHeader,敏感資訊為值的一部分)的安全性,但對於 url.<base>.insteadOf 這類敏感資訊作為鍵一部分的情況則無效。

--exec-path[=<路徑>]

Git 核心程式的安裝路徑。此項亦可透過設定 GIT_EXEC_PATH 環境變數來控制。若未提供路徑,git 將列印當前設定後結束。

--html-path

列印 Git HTML 文件的安裝路徑(末尾無斜線)並結束。

--man-path

列印此版本 Git 的 man 手冊路徑(請參閱 man(1))並結束。

--info-path

列印此版本 Git Info 檔案的安裝路徑並結束。

-p
--paginate

若標準輸出為終端機,將所有輸出管線輸送至 less(若已設定,則使用 $PAGER)。這會覆蓋 pager.<cmd> 設定選項(請參閱下方的「設定機制」章節)。

-P
--no-pager

不將 Git 輸出輸送至分頁程式。

--git-dir=<路徑>

設定儲存庫的路徑(".git" 目錄)。此項亦可透過設定 GIT_DIR 環境變數來控制。它可以是絕對路徑或相對當前工作目錄的路徑。

使用此選項(或 GIT_DIR 環境變數)指定 ".git" 目錄位置會關閉儲存庫自動尋找功能(該功能會嘗試尋找包含 ".git" 子目錄的目錄,這是 Git 發現儲存庫與工作樹根目錄的方式),並告知 Git 您正位於工作樹的頂層。如果您不在工作樹的頂層目錄,則應使用 --work-tree=<路徑> 選項(或 GIT_WORK_TREE 環境變數)告知 Git 工作樹的頂層位置。

若您只想以在 <路徑> 中啟動的方式執行 git,請使用 git -C <路徑>

--work-tree=<路徑>

設定工作樹的路徑。它可以是絕對路徑,或是相對當前工作目錄的路徑。此項亦可透過設定 GIT_WORK_TREE 環境變數及 core.worktree 設定變數來控制(詳情請參閱 git-config[1] 中的 core.worktree)。

--namespace=<路徑>

設定 Git 命名空間。詳情請參閱 gitnamespaces[7]。等同於設定 GIT_NAMESPACE 環境變數。

--bare

將儲存庫視為裸儲存庫(bare repository)。若未設定 GIT_DIR 環境變數,則將其設為當前工作目錄。

--no-replace-objects

不使用取代引用(replacement refs)來取代 Git 物件。等同於將 GIT_NO_REPLACE_OBJECTS 環境變數設為任何值。詳情請參閱 git-replace[1]

--no-lazy-fetch

不按需從承諾遠端(promisor remote)提取缺失的物件。適合與 git cat-file -e <物件> 搭配使用,以檢查該物件是否在本地可用。等同於將 GIT_NO_LAZY_FETCH 環境變數設為 1

--no-optional-locks

不執行需要鎖定的非必要操作。等同於將 GIT_OPTIONAL_LOCKS 設為 0

--no-advice

停用所有建議提示的顯示。

--literal-pathspecs

將路徑規格視為字面意義(即無萬用字元擴充、無路徑規格魔術)。等同於將 GIT_LITERAL_PATHSPECS 環境變數設為 1

--glob-pathspecs

為所有路徑規格增加 "glob" 魔術。等同於將 GIT_GLOB_PATHSPECS 環境變數設為 1。可使用路徑規格魔術 ":(literal)" 對個別路徑規格停用 globbing。

--noglob-pathspecs

為所有路徑規格增加 "literal" 魔術。等同於將 GIT_NOGLOB_PATHSPECS 環境變數設為 1。可使用路徑規格魔術 ":(glob)" 對個別路徑規格啟用 globbing。

--icase-pathspecs

為所有路徑規格增加 "icase" 魔術。等同於將 GIT_ICASE_PATHSPECS 環境變數設為 1

--list-cmds=<群組>[,<群組>…​]

依群組列出指令。此為內部/實驗性選項,未來可能會變更或移除。支援的群組為:builtins, parseopt(使用 parse-options 的內建指令), deprecated(已棄用的內建指令), main(libexec 目錄中的所有指令), others($PATH 中所有以 git- 為前綴的指令), list-<分類>(請見 command-list.txt 中的分類), nohelpers(排除輔助指令), alias 與 config(從設定變數 completion.commands 擷取指令列表)。

--attr-source=<樹狀物件>

<樹狀物件> 而非工作樹讀取 gitattributes。詳情請參閱 gitattributes[5]。等同於設定 GIT_ATTR_SOURCE 環境變數。

GIT 指令

我們將 Git 指令分為高階("porcelain")與低階("plumbing")指令。定義指令別名請參閱 git-config[1] 並尋找 alias.* 的描述。若要安裝自訂的 "git" 子指令,請參閱本手冊中關於 PATH 環境變數的描述。

高階指令 (porcelain)

我們將 porcelain 指令分為主要指令與一些輔助使用者工具。

主要 porcelain 指令

git-add[1]

將檔案內容加入索引

git-am[1]

套用來自郵件信箱的一系列修補檔

git-archive[1]

從指定樹狀物件建立檔案封存

git-backfill[1]

在部分複製中下載缺失的物件

git-bisect[1]

使用二分搜尋找出引入錯誤的提交

git-branch[1]

列出、建立或刪除分支

git-bundle[1]

透過封存移動物件與引用

git-checkout[1]

切換分支或還原工作樹檔案

git-cherry-pick[1]

套用由現有提交所引入的變更

git-citool[1]

git-commit 的圖形化替代方案

git-clean[1]

從工作樹移除未追蹤的檔案

git-clone[1]

複製儲存庫至新目錄

git-commit[1]

記錄對儲存庫的變更

git-describe[1]

根據可用引用給予物件人類可讀名稱

git-diff[1]

顯示提交之間、提交與工作樹之間的差異等

git-fetch[1]

從其他儲存庫下載物件與引用

git-format-patch[1]

準備用於電子郵件提交的修補檔

git-gc[1]

清理不必要的檔案並最佳化本地儲存庫

git-grep[1]

列印符合模式的行

git-gui[1]

Git 的可攜式圖形介面

git-history[1]

實驗性:重寫歷史

git-init[1]

建立空的 Git 儲存庫或重新初始化現有儲存庫

git-log[1]

顯示提交紀錄

git-maintenance[1]

執行最佳化 Git 儲存庫資料的任務

git-merge[1]

合併兩個或多個開發歷史

git-mv[1]

移動或重新命名檔案、目錄或符號連結

git-notes[1]

新增或檢查物件註釋

git-pull[1]

從另一個儲存庫或本地分支提取並整合

git-push[1]

更新遠端引用及相關物件

git-range-diff[1]

比較兩個提交範圍(例如分支的兩個版本)

git-rebase[1]

在另一個基礎點上重新套用提交

git-reset[1]

HEAD 或索引設為已知狀態

git-restore[1]

還原工作樹檔案

git-revert[1]

還原現有的提交

git-rm[1]

從工作樹與索引中移除檔案

git-shortlog[1]

摘要 git log 輸出

git-show[1]

顯示各種類型的物件

git-sparse-checkout[1]

將您的工作樹減少為追蹤檔案的子集

git-stash[1]

將髒工作目錄中的變更存入 stash

git-status[1]

顯示工作樹狀態

git-submodule[1]

初始化、更新或檢查子模組

git-switch[1]

切換分支

git-tag[1]

建立、列出、刪除或驗證標籤

git-worktree[1]

管理多個工作樹

gitk[1]

Git 儲存庫瀏覽器

scalar[1]

管理大型 Git 儲存庫的工具

輔助指令

操作器

git-config[1]

取得並設定儲存庫或全域選項

git-fast-export[1]

Git 資料匯出器

git-fast-import[1]

快速 Git 資料匯入器的後端

git-filter-branch[1]

重寫分支

git-mergetool[1]

執行合併衝突解決工具以處理合併衝突

git-pack-refs[1]

打包分支頭與標籤以提升儲存庫存取效率

git-prune[1]

從物件資料庫修剪所有無法存取的物件

git-reflog[1]

管理 reflog 資訊

git-refs[1]

對引用的低階存取

git-remote[1]

管理追蹤儲存庫集合

git-repack[1]

打包儲存庫中未打包的物件

git-replace[1]

建立、列出、刪除取代物件的引用

詢問器

git-annotate[1]

以提交資訊註釋檔案行

git-blame[1]

顯示檔案中每一行是由哪個修訂版本與作者最後修改

git-bugreport[1]

收集資訊供使用者提交錯誤報告

git-count-objects[1]

計算未打包物件的數量及其磁碟佔用量

git-diagnose[1]

產生包含診斷資訊的 zip 封存檔

git-difftool[1]

使用常見的差異工具顯示變更

git-fsck[1]

驗證資料庫中物件的連通性與有效性

git-help[1]

顯示關於 Git 的說明資訊

git-instaweb[1]

在 gitweb 中立即瀏覽您的工作儲存庫

git-merge-tree[1]

在不觸動索引或工作樹的情況下執行合併

git-rerere[1]

重複使用已記錄的合併衝突解決方案

git-show-branch[1]

顯示分支及其提交

git-verify-commit[1]

檢查提交的 GPG 簽章

git-verify-tag[1]

檢查標籤的 GPG 簽章

git-version[1]

顯示關於 Git 的版本資訊

git-whatchanged[1]

顯示包含各個提交引入差異的紀錄

gitweb[1]

Git 網頁介面(Git 儲存庫的網頁前端)

與他人互動

這些指令用於與外部 SCM 及他人透過電子郵件修補檔進行互動。

git-archimport[1]

將 GNU Arch 儲存庫匯入 Git

git-cvsexportcommit[1]

將單一提交匯出至 CVS 工作副本

git-cvsimport[1]

從人們喜愛討厭的另一個 SCM 中搶救您的資料

git-cvsserver[1]

用於 Git 的 CVS 伺服器模擬器

git-imap-send[1]

將一組修補檔從標準輸入傳送至 IMAP 資料夾

git-p4[1]

從 Perforce 儲存庫匯入並提交至其

git-quiltimport[1]

將 quilt 修補檔集合套用至當前分支

git-request-pull[1]

產生待處理變更的摘要

git-send-email[1]

將一組修補檔以電子郵件寄出

git-svn[1]

Subversion 儲存庫與 Git 之間的雙向操作

重置 (reset)、還原 (restore) 與回退 (revert)

有三個名稱相似的指令:git resetgit restoregit revert

  • git-revert[1] 是建立一個新的提交,來反轉其他提交所做的變更。

  • git-restore[1] 是從索引或另一個提交還原工作樹中的檔案。此指令不會更新您的分支。此指令亦可用於從另一個提交還原索引中的檔案。

  • git-reset[1] 是更新您的分支,移動分支頂端以新增或移除提交。此操作會變更提交歷史。

    git reset 亦可用於還原索引,這與 git restore 有功能上的重疊。

低階指令 (plumbing)

雖然 Git 內建了 porcelain 層,但其低階指令足以支援開發替代的 porcelain。這類 porcelain 的開發者可能從閱讀 git-update-index[1]git-read-tree[1] 開始。

這些低階指令的介面(輸入、輸出、選項集合與語義)被設計為比 Porcelain 層指令更穩定,因為這些指令主要是為腳本使用而設計的。另一方面,Porcelain 指令的介面為了改善終端使用者體驗,隨時可能會有所變更。

以下描述將低階指令分為:操作物件(在儲存庫、索引與工作樹中)的指令、詢問與比較物件的指令,以及在儲存庫之間移動物件與引用的指令。

操作指令

git-apply[1]

將修補檔套用至檔案和/或索引

git-checkout-index[1]

從索引複製檔案至工作樹

git-commit-graph[1]

寫入並驗證 Git 提交圖檔案

git-commit-tree[1]

建立一個新的提交物件

git-hash-object[1]

計算物件 ID 並可選地從檔案建立物件

git-index-pack[1]

為現有的打包封存檔建立打包索引檔案

git-merge-file[1]

執行三向檔案合併

git-merge-index[1]

為需要合併的檔案執行合併

git-mktag[1]

建立一個具有額外驗證的標籤物件

git-mktree[1]

從 ls-tree 格式的文字建構樹狀物件

git-multi-pack-index[1]

寫入並驗證多包索引 (multi-pack-indexes)

git-pack-objects[1]

建立物件的打包封存檔

git-prune-packed[1]

移除已存在於包檔案中的多餘物件

git-read-tree[1]

讀取樹狀資訊至索引

git-replay[1]

實驗性:在新基礎上重播提交,亦適用於裸儲存庫

git-symbolic-ref[1]

讀取、修改與刪除符號引用

git-unpack-objects[1]

從打包封存檔中解包物件

git-update-index[1]

將工作樹中的檔案內容註冊至索引

git-update-ref[1]

安全地更新儲存在引用中的物件名稱

git-write-tree[1]

從當前索引建立樹狀物件

詢問指令

git-cat-file[1]

提供儲存庫物件的內容或詳細資訊

git-cherry[1]

找出尚未套用至上游的提交

git-diff-files[1]

比較工作樹與索引中的檔案

git-diff-index[1]

比較樹狀物件與工作樹或索引

git-diff-pairs[1]

比較所提供二進位資料組的內容與模式

git-diff-tree[1]

比較透過兩個樹狀物件找到的二進位資料的內容與模式

git-for-each-ref[1]

輸出每個引用的資訊

git-for-each-repo[1]

在一系列儲存庫上執行 Git 指令

git-format-rev[1]

實驗性:按需美化修訂版本格式

git-get-tar-commit-id[1]

從使用 git-archive 建立的封存檔中提取提交 ID

git-last-modified[1]

實驗性:顯示檔案最後修改時間

git-ls-files[1]

顯示索引與工作樹中檔案的資訊

git-ls-remote[1]

列出遠端儲存庫中的引用

git-ls-tree[1]

列出樹狀物件的內容

git-merge-base[1]

為合併找出儘可能好的共同祖先

git-name-rev[1]

為給定的修訂版本找出符號名稱

git-pack-redundant[1]

找出多餘的打包檔案

git-repo[1]

擷取關於儲存庫的資訊

git-rev-list[1]

以反向時間順序列出提交物件

git-rev-parse[1]

挑選並處理參數

git-show-index[1]

顯示打包封存檔索引

git-show-ref[1]

列出本地儲存庫中的引用

git-unpack-file[1]

使用二進位內容建立暫存檔

git-var[1]

顯示 Git 邏輯變數

git-verify-pack[1]

驗證打包的 Git 封存檔

通常,詢問指令不會觸動工作樹中的檔案。

同步儲存庫

git-daemon[1]

一個非常簡單的 Git 儲存庫伺服器

git-fetch-pack[1]

從另一個儲存庫接收缺失的物件

git-http-backend[1]

Git over HTTP 的伺服器端實作

git-send-pack[1]

透過 Git 協定將物件推送至另一個儲存庫

git-update-server-info[1]

更新輔助資訊檔案以協助啞巴伺服器 (dumb servers)

以下是上述指令使用的輔助指令;終端使用者通常不會直接使用它們。

git-http-fetch[1]

透過 HTTP 從遠端 Git 儲存庫下載

git-http-push[1]

透過 HTTP/DAV 將物件推送至另一個儲存庫

git-receive-pack[1]

接收推送到儲存庫的內容

git-shell[1]

僅供 Git SSH 存取的受限登入 Shell

git-upload-archive[1]

將封存檔傳送回 git-archive

git-upload-pack[1]

將打包物件傳送回 git-fetch-pack

內部輔助指令

這些是由其他指令使用的內部輔助指令;終端使用者通常不會直接使用它們。

git-check-attr[1]

顯示 gitattributes 資訊

git-check-ignore[1]

除錯 gitignore / 排除檔案

git-check-mailmap[1]

顯示聯絡人的標準名稱與電子郵件位址

git-check-ref-format[1]

確保引用名稱格式正確

git-column[1]

以欄位顯示資料

git-credential[1]

擷取並儲存使用者憑證

git-credential-cache[1]

暫時將密碼儲存在記憶體中的輔助程式

git-credential-store[1]

將憑證儲存在磁碟上的輔助程式

git-fmt-merge-msg[1]

產生合併提交訊息

git-hook[1]

執行 Git Hook

git-interpret-trailers[1]

新增或解析提交訊息中的結構化資訊

git-mailinfo[1]

從單一電子郵件中提取修補檔與作者資訊

git-mailsplit[1]

簡單的 UNIX mbox 分割程式

git-merge-one-file[1]

與 git-merge-index 搭配使用的標準輔助程式

git-patch-id[1]

計算修補檔的唯一 ID

git-sh-i18n[1]

Shell 腳本的 Git i18n 設定程式碼

git-sh-setup[1]

通用 Git Shell 腳本設定程式碼

git-stripspace[1]

移除不必要的空格

git-url-parse[1]

解析並提取 Git URL 組件

指南

以下說明文件頁面是關於 Git 概念的指南。

gitcore-tutorial[7]

開發者 Git 核心教學

gitcredentials[7]

提供 Git 使用者名稱與密碼

gitcvs-migration[7]

給 CVS 使用者的 Git 指南

gitdiffcore[7]

調整差異輸出

giteveryday[7]

日常 Git 使用的實用指令最小集

gitfaq[7]

關於使用 Git 的常見問題解答

gitglossary[7]

Git 術語表

gitnamespaces[7]

Git 命名空間

gitremote-helpers[7]

與遠端儲存庫互動的輔助程式

gitsubmodules[7]

在一個儲存庫內掛載另一個儲存庫

gittutorial[7]

Git 教學介紹

gittutorial-2[7]

Git 教學介紹:第二部分

gitworkflows[7]

Git 建議工作流程總覽

儲存庫、指令與檔案介面

此說明文件討論使用者預期直接互動的儲存庫與指令介面。關於標準的詳細資訊,請參閱 git-help[1] 中的 --user-formats

gitattributes[5]

定義每個路徑的屬性

gitcli[7]

Git 指令列介面與規範

githooks[5]

Git 使用的 Hook

gitignore[5]

指定刻意忽略的未追蹤檔案

gitmailmap[5]

映射作者/提交者名稱與/或電子郵件位址

gitmodules[5]

定義子模組屬性

gitrepository-layout[5]

Git 儲存庫佈局

gitrevisions[7]

為 Git 指定修訂版本與範圍

檔案格式、協定與其他開發者介面

此說明文件討論檔案格式、傳輸協定與其他 Git 開發者介面。參閱 git-help[1] 中的 --developer-interfaces

gitformat-bundle[5]

Bundle 檔案格式

gitformat-chunk[5]

基於區塊 (Chunk-based) 的檔案格式

gitformat-commit-graph[5]

Git 提交圖格式

gitformat-index[5]

Git 索引格式

gitformat-pack[5]

Git 打包格式

gitformat-signature[5]

Git 加密簽章格式

gitprotocol-capabilities[5]

協定 v0 與 v1 功能

gitprotocol-common[5]

各類協定的通用事項

gitprotocol-http[5]

基於 Git HTTP 的協定

gitprotocol-pack[5]

封裝檔如何進行傳輸

gitprotocol-v2[5]

Git 傳輸協定,版本 2

設定機制

Git 使用簡單的文字格式來儲存儲存庫級別與使用者級別的自訂設定。此類設定檔格式如下:

#
# A '#' or ';' character indicates a comment.
#

; core variables
[core]
	; Don't trust file modes
	filemode = false

; user identity
[user]
	name = "Junio C Hamano"
	email = "gitster@pobox.com"

各種指令會從設定檔中讀取並據此調整其運作。關於設定機制的列表與詳細資訊,請參閱 git-config[1]

識別碼術語

<物件>

表示任何類型的物件名稱。

<二進位資料>

表示二進位物件名稱。

<樹狀物件>

表示樹狀物件名稱。

<提交>

表示提交物件名稱。

<類樹狀物件>

表示樹狀、提交或標籤物件名稱。接受 <類樹狀物件> 參數的指令,最終目標是操作 <樹狀物件>,但會自動解引用指向 <樹狀物件><提交><標籤> 物件。

<類提交物件>

表示提交或標籤物件名稱。接受 <類提交物件> 參數的指令,最終目標是操作 <提交> 物件,但會自動解引用指向 <提交><標籤> 物件。

<類型>

表示需要物件類型。目前為下列之一:blobtreecommittag

<檔案>

表示檔案名稱 - 幾乎總是相對於 GIT_INDEX_FILE 所描述的樹狀結構根目錄。

符號識別碼

任何接受 <物件> 的 Git 指令亦可使用以下符號表示法:

HEAD

表示當前分支的分支頭。

<標籤>

有效的標籤 名稱(即 refs/tags/<標籤> 引用)。

<分支頭>

有效的分支頭 名稱(即 refs/heads/<分支頭> 引用)。

如需更完整的物件名稱表示方式列表,請參閱 gitrevisions[7] 中的「指定修訂版本」章節。

檔案/目錄結構

請參閱 gitrepository-layout[5] 文件。

閱讀 githooks[5] 以了解每個 Hook 的更多詳細資訊。

高階 SCM 可能會在 $GIT_DIR 中提供並管理額外資訊。

術語

請參閱 gitglossary[7]

環境變數

各種 Git 指令會注意環境變數並變更其行為。標記為「布林值」的環境變數其數值解讀方式與布林值設定變數相同,即 "true", "yes", "on" 與正數被視為 "yes",而 "false", "no", "off" 與 "0" 被視為 "no"。

以下是這些變數:

系統

HOME

指定使用者主目錄的路徑。在 Windows 上,若未設定,Git 將設定一個程序環境變數等於:若 $HOMEDRIVE$HOMEPATH 皆存在,則為 $HOMEDRIVE$HOMEPATH;否則若 $USERPROFILE 存在,則為 $USERPROFILE

PATH

當使用者執行非 Git 核心程式(安裝在 GIT_EXEC_PATH 中)的 git <指令> 時,將會呼叫使用者可在 $PATH 目錄中執行的 git-<指令>。指令名稱後的參數會原封不動地傳遞給該程式。為了執行 git <某指令>git 會在嘗試將 <某指令> 作為別名之前,先尋找該指令(可能是 GIT_EXEC_PATH 中的核心 Git 程式,或 PATH 目錄中的自訂程式)。

Git 儲存庫

這些環境變數適用於 所有 核心 Git 指令。注意:值得注意的是,它們可能會被位於 Git 之上的 SCM 使用或覆蓋,因此若使用外部前端請務必小心。

GIT_INDEX_FILE

此環境變數指定替代索引檔案。若未指定,則使用預設值 $GIT_DIR/index

GIT_INDEX_VERSION

此環境變數指定寫入索引檔案時所使用的索引版本。它不會影響現有的索引檔案。預設使用版本 2 或 3。詳情請參閱 git-update-index[1]

GIT_OBJECT_DIRECTORY

若透過此環境變數指定物件儲存目錄,則 sha1 目錄將建立於其下,否則使用預設的 $GIT_DIR/objects 目錄。

GIT_ALTERNATE_OBJECT_DIRECTORIES

由於 Git 物件的不變性,舊物件可以封存至共用的唯讀目錄中。此變數指定一個以 ":" 分隔(在 Windows 上為 ";")的 Git 物件目錄列表,可用於搜尋 Git 物件。新物件不會寫入這些目錄中。

"(雙引號)開頭的項目將被解讀為 C 風格引用的路徑,移除前後的雙引號並遵守反斜線跳脫字元。例如,值 "path-with-\"-and-:-in-it":vanilla-path 包含兩個路徑:path-with-"-and-:-in-itvanilla-path

GIT_DIR

若設定了 GIT_DIR 環境變數,則指定一個路徑以取代預設的 .git 作為儲存庫基底。--git-dir 指令列選項亦會設定此值。

GIT_WORK_TREE

設定工作樹的根目錄路徑。此項亦可透過 --work-tree 指令列選項與 core.worktree 設定變數來控制。

GIT_NAMESPACE

設定 Git 命名空間;詳情請參閱 gitnamespaces[7]--namespace 指令列選項亦會設定此值。

GIT_CEILING_DIRECTORIES

此應為以冒號分隔的絕對路徑列表。若已設定,此列表包含 Git 在尋找儲存庫目錄時不應向上變更目錄 (chdir) 的目錄(適用於排除速度緩慢的網路目錄)。它不會排除當前工作目錄或指令列/環境中設定的 GIT_DIR。通常,Git 必須讀取此列表中的項目並解析可能存在的任何符號連結,以便將它們與當前目錄進行比較。然而,若此存取速度依然緩慢,您可以在列表中加入一個空項目,告知 Git 後續項目並非符號連結,無需解析;例如 GIT_CEILING_DIRECTORIES=/maybe/symlink::/very/slow/non/symlink

GIT_DISCOVERY_ACROSS_FILESYSTEM

當在沒有 ".git" 儲存庫目錄的目錄中執行時,Git 會嘗試在父目錄中尋找該目錄以定位工作樹的頂層,但預設不會跨越檔案系統邊界。此布林環境變數可設為 true,以告知 Git 不要停止於檔案系統邊界。如同 GIT_CEILING_DIRECTORIES,這不會影響透過 GIT_DIR 或指令列所設定的明確儲存庫目錄。

GIT_COMMON_DIR

若此變數設為某個路徑,通常位於 $GIT_DIR 中的非工作樹檔案將改為從此路徑取得。工作樹特定的檔案(如 HEAD 或索引)則取自 $GIT_DIR。詳情請參閱 gitrepository-layout[5]git-worktree[1]。此變數的優先順序低於其他路徑變數,如 GIT_INDEX_FILE, GIT_OBJECT_DIRECTORY 等。

GIT_DEFAULT_HASH

若設定此變數,新儲存庫的預設雜湊演算法將會設為此值。此值在複製(clone)時會被忽略,且永遠會使用遠端儲存庫的設定。預設值為 "sha1"。參見 git-init[1] 中的 --object-format

GIT_DEFAULT_REF_FORMAT

若設定此變數,新儲存庫的預設參照(reference)後端格式將會設為此值。預設值為 "files"。參見 git-init[1] 中的 --ref-format

GIT_REFERENCE_BACKEND

指定要使用的參照後端及其 URI。更多詳細資訊請參見 git-config[1] 中的 extensions.refStorage 選項。使用時會覆寫組態變數。

Git 提交(Commits)

GIT_AUTHOR_NAME

建立提交或標籤物件,或是寫入參照記錄(reflog)時,作者身分所使用的人類可讀名稱。會覆寫 user.nameauthor.name 組態設定。

GIT_AUTHOR_EMAIL

建立提交或標籤物件,或是寫入參照記錄時,作者身分所使用的電子郵件地址。會覆寫 user.emailauthor.email 組態設定。

GIT_AUTHOR_DATE

建立提交或標籤物件,或是寫入參照記錄時,作者身分所使用的日期。有效格式請參見 git-commit[1]

GIT_COMMITTER_NAME

建立提交或標籤物件,或是寫入參照記錄時,提交者身分所使用的人類可讀名稱。會覆寫 user.namecommitter.name 組態設定。

GIT_COMMITTER_EMAIL

建立提交或標籤物件,或是寫入參照記錄時,作者身分所使用的電子郵件地址。會覆寫 user.emailcommitter.email 組態設定。

GIT_COMMITTER_DATE

建立提交或標籤物件,或是寫入參照記錄時,提交者身分所使用的日期。有效格式請參見 git-commit[1]

EMAIL

若沒有設定其他相關環境變數或組態設定時,用於作者和提交者身分的電子郵件地址。

Git 差異(Diffs)

GIT_DIFF_OPTS

唯一有效的設定是 "--unified=??" 或 "-u??",用以設定建立統一格式差異(unified diff)時顯示的上下文行數。此設定優先於在 Git diff 命令列中傳入的 "-U" 或 "--unified" 選項值。

GIT_EXTERNAL_DIFF

當設定了環境變數 GIT_EXTERNAL_DIFF 時,Git 將呼叫該變數指定的程式來產生差異,而不使用內建的差異機制。對於新增、移除或修改的路徑,GIT_EXTERNAL_DIFF 會被呼叫並帶有 7 個參數

path old-file old-hex old-mode new-file new-hex new-mode

其中

<old|new>-file

是 GIT_EXTERNAL_DIFF 可用於讀取 <old|new> 內容的檔案,

<old|new>-hex

是 40 個十六進位數位的 SHA-1 雜湊值,

<old|new>-mode

是檔案模式的八進位表示法。

檔案參數可以指向使用者的工作檔案(例如 "git-diff-files" 中的 new-file)、/dev/null(例如新增檔案時的 old-file),或是暫存檔(例如索引中的 old-file)。GIT_EXTERNAL_DIFF 不需要擔心取消連結(unlink)暫存檔——它們會在 GIT_EXTERNAL_DIFF 結束時被移除。

對於未合併的路徑,GIT_EXTERNAL_DIFF 會被呼叫並帶有 1 個參數,即 <path>。

對於每個被呼叫 GIT_EXTERNAL_DIFF 的路徑,都會設定兩個環境變數:GIT_DIFF_PATH_COUNTERGIT_DIFF_PATH_TOTAL

GIT_EXTERNAL_DIFF_TRUST_EXIT_CODE

若此布林環境變數設為 true,則 GIT_EXTERNAL_DIFF 指令若認為輸入檔案相同,預期回傳結束代碼 0;若認為不同,則回傳 1,如同 diff(1) 一樣。若設為 false(預設值),則無論是否相等,指令皆預期回傳 0。任何其他結束代碼皆會導致 Git 回報嚴重錯誤。

GIT_DIFF_PATH_COUNTER

從 1 開始的計數器,每經過一個路徑就遞增一。

GIT_DIFF_PATH_TOTAL

路徑總數。

其他

GIT_MERGE_VERBOSITY

控制遞迴合併策略顯示輸出量的數值。會覆寫 merge.verbosity。參見 git-merge[1]

GIT_PAGER

此環境變數會覆寫 $PAGER。若設為空字串或 "cat",Git 將不會啟動分頁程式。另請參見 git-config[1] 中的 core.pager 選項。

GIT_PROGRESS_DELAY

控制在顯示選用進度指示器之前延遲秒數的數值。預設為 1。

GIT_EDITOR

此環境變數會覆寫 $EDITOR$VISUAL。在互動模式下,當需要啟動編輯器時,多個 Git 指令會使用此變數。另請參見 git-var[1] 以及 git-config[1] 中的 core.editor 選項。

GIT_SEQUENCE_EDITOR

此環境變數會在編輯互動式重訂基底(interactive rebase)的待辦清單時,覆寫已設定的 Git 編輯器。另請參見 git-rebase[1] 以及 git-config[1] 中的 sequence.editor 選項。

GIT_SSH
GIT_SSH_COMMAND

若設定了上述任一環境變數,當 git fetchgit push 需要連接到遠端系統時,將會使用指定的指令來代替 ssh。傳遞給已設定指令的命令列參數由 ssh 變體決定。詳細資訊請參見 git-config[1] 中的 ssh.variant 選項。

$GIT_SSH_COMMAND 的優先順序高於 $GIT_SSH,且由 shell 解釋,這允許加入額外的參數。另一方面,$GIT_SSH 必須僅為程式路徑(若需要額外參數,可為封裝的 shell 指令稿)。

通常透過個人 .ssh/config 檔案來設定所需的選項會更為簡便。詳細資訊請參閱您的 ssh 文件。

GIT_SSH_VARIANT

若設定此環境變數,將會覆寫 Git 對 GIT_SSH/GIT_SSH_COMMAND/core.sshCommand 是否指向 OpenSSH、plink 或 tortoiseplink 的自動偵測。此變數會覆寫具有相同用途的組態設定 ssh.variant

GIT_SSL_NO_VERIFY

設定並匯出此環境變數為任何值,將告知 Git 在透過 HTTPS 擷取(fetch)或推送(push)時不要驗證 SSL 憑證。

GIT_ATTR_SOURCE

設定 gitattributes 將從其中讀取的樹狀物件(treeish)。

GIT_ASKPASS

若設定此環境變數,需要取得密碼或通行碼的 Git 指令(例如 HTTP 或 IMAP 驗證)將會以合適的提示作為命令列參數呼叫此程式,並從其 STDOUT 讀取密碼。另請參見 git-config[1] 中的 core.askPass 選項。

GIT_TERMINAL_PROMPT

若此布林環境變數設為 false,git 將不會在終端機提示輸入(例如詢問 HTTP 驗證時)。

GIT_CONFIG_GLOBAL
GIT_CONFIG_SYSTEM

使用給定的檔案讀取組態,而非使用全域或系統級的組態檔案。若設定了 GIT_CONFIG_SYSTEM,則不會讀取建置時定義的系統組態檔案(通常為 /etc/gitconfig)。同樣地,若設定了 GIT_CONFIG_GLOBAL,則不會讀取 $HOME/.gitconfig$XDG_CONFIG_HOME/git/config。可設為 /dev/null 以跳過讀取該層級的組態檔案。

GIT_CONFIG_NOSYSTEM

是否跳過讀取全系統的 $(prefix)/etc/gitconfig 檔案。此布林環境變數可與 $HOME$XDG_CONFIG_HOME 搭配使用,為挑剔的指令稿建立可預測的環境,或者您可以將其設為 true,在等待擁有足夠權限的人修復有問題的 /etc/gitconfig 檔案時,暫時避免使用它。

GIT_FLUSH

若此布林環境變數設為 true,則 git blame(增量模式)、git rev-listgit loggit check-attrgit check-ignore 等指令將在每個記錄被寫入後,強制重新整理輸出串流。若此變數設為 false,這些指令的輸出將使用完全緩衝的 I/O。若未設定此環境變數,Git 將根據 stdout 是否重新導向到檔案,選擇緩衝或記錄導向的重新整理方式。

GIT_TRACE

啟用一般追蹤訊息,例如別名展開、內建指令執行和外部指令執行。

若此變數設為 "1"、"2" 或 "true"(比較時不區分大小寫),追蹤訊息將列印到 stderr。

若變數設為大於 2 且小於 10 的整數值,Git 將此值視為開啟的檔案描述符,並嘗試將追蹤訊息寫入該檔案描述符。

或者,若變數設為絕對路徑(以 / 字元開頭),Git 將視其為檔案路徑,並嘗試將追蹤訊息附加到該檔案。

取消設定此變數,或將其設為空值、"0" 或 "false"(不區分大小寫)將停用追蹤訊息。

GIT_TRACE_FSMONITOR

啟用檔案系統監控擴充功能的追蹤訊息。可用追蹤輸出選項請參見 GIT_TRACE

GIT_TRACE_PACK_ACCESS

啟用所有對封裝檔(pack)存取的追蹤訊息。對於每次存取,封裝檔案名稱和偏移量都會被記錄。這對於排解某些與封裝檔相關的效能問題可能有所幫助。可用追蹤輸出選項請參見 GIT_TRACE

GIT_TRACE_PACKET

啟用程式所有進出封包的追蹤訊息。這有助於偵錯物件協商或其他協定問題。當封包以 "PACK" 開始時,追蹤會關閉(但請參見下方的 GIT_TRACE_PACKFILE)。可用追蹤輸出選項請參見 GIT_TRACE

GIT_TRACE_PACKFILE

啟用程式發送或接收的封裝檔(packfile)追蹤。與其他追蹤輸出不同,此追蹤是逐字的:無標頭,且不對二進位資料進行引用。您幾乎肯定會想將其導向至檔案(例如 GIT_TRACE_PACKFILE=/tmp/my.pack),而不是顯示在終端機或與其他追蹤輸出混合。

請注意,此功能目前僅為複製(clone)和擷取(fetch)的用戶端實作。

GIT_TRACE_PERFORMANCE

啟用與效能相關的追蹤訊息,例如每個 Git 指令的總執行時間。可用追蹤輸出選項請參見 GIT_TRACE

GIT_TRACE_REFS

啟用對參照(ref)資料庫執行作業的追蹤訊息。可用追蹤輸出選項請參見 GIT_TRACE

GIT_TRACE_SETUP

啟用追蹤訊息,在 Git 完成設定階段後列印 .git 路徑、工作樹目錄及目前工作目錄。可用追蹤輸出選項請參見 GIT_TRACE

GIT_TRACE_SHALLOW

啟用有助於偵錯淺層(shallow)儲存庫擷取/複製的追蹤訊息。可用追蹤輸出選項請參見 GIT_TRACE

GIT_TRACE_CURL

啟用 git 傳輸協定所有傳入和傳出資料的 curl 完整追蹤轉儲,包括描述性資訊。這類似於在命令列執行 curl --trace-ascii。可用追蹤輸出選項請參見 GIT_TRACE

GIT_TRACE_CURL_NO_DATA

當啟用 curl 追蹤時(參見上述 GIT_TRACE_CURL),不要轉儲資料(即僅轉儲資訊列和標頭)。

GIT_TRACE2

啟用來自 "trace2" 程式庫更詳細的追蹤訊息。GIT_TRACE2 的輸出是適合人類閱讀的簡易文字格式。

若此變數設為 "1"、"2" 或 "true"(比較時不區分大小寫),追蹤訊息將列印到 stderr。

若變數設為大於 2 且小於 10 的整數值,Git 將此值視為開啟的檔案描述符,並嘗試將追蹤訊息寫入該檔案描述符。

或者,若變數設為絕對路徑(以 / 字元開頭),Git 將視其為檔案路徑,並嘗試將追蹤訊息附加到該檔案。若路徑已存在且為目錄,追蹤訊息將寫入該目錄中的檔案(每個程序一個檔案),檔案名稱依據 SID 的最後部分加上可選計數器命名(以避免檔案名稱衝突)。

此外,若變數設為 af_unix:[<socket-type>:]<absolute-pathname>,Git 將嘗試將此路徑開啟為 Unix Domain Socket。Socket 類型可為 streamdgram

取消設定此變數,或將其設為空值、"0" 或 "false"(不區分大小寫)將停用追蹤訊息。

完整詳細資訊請參見 Trace2 文件

GIT_TRACE2_EVENT

此設定會寫入適合機器解讀的 JSON 格式。可用追蹤輸出選項請參見 GIT_TRACE2,完整詳細資訊請參見 Trace2 文件

GIT_TRACE2_PERF

除了 GIT_TRACE2 中提供的文字訊息外,此設定還會寫入適合了解巢狀區域的欄位格式。可用追蹤輸出選項請參見 GIT_TRACE2,完整詳細資訊請參見 Trace2 文件

GIT_TRACE_REDACT

預設情況下,當啟用追蹤時,Git 會遮蔽 cookie 值、"Authorization:" 標頭、"Proxy-Authorization:" 標頭和封裝檔 URI。將此布林環境變數設為 false 可防止此遮蔽。

GIT_NO_REPLACE_OBJECTS

設定並匯出此環境變數將告知 Git 忽略取代參照(replacement refs),且不要取代 Git 物件。

GIT_LITERAL_PATHSPECS

將此布林環境變數設為 true 將導致 Git 將所有路徑規格(pathspecs)視為字面意義,而非萬用字元模式。例如,執行 GIT_LITERAL_PATHSPECS=1 git log -- *.c' 將搜尋觸及路徑 *.c 的提交,而非任何符合萬用字元 *.c 的路徑。若您要將字面路徑提供給 Git(例如先前由 git ls-tree--raw 差異輸出等提供的路徑),您可能會需要此設定。

GIT_GLOB_PATHSPECS

將此布林環境變數設為 true 將導致 Git 將所有路徑規格視為萬用字元模式(又稱 "glob" 魔術)。

GIT_NOGLOB_PATHSPECS

將此布林環境變數設為 true 將導致 Git 將所有路徑規格視為字面意義(又稱 "literal" 魔術)。

GIT_ICASE_PATHSPECS

將此布林環境變數設為 true 將導致 Git 將所有路徑規格視為不區分大小寫。

GIT_NO_LAZY_FETCH

將此布林環境變數設為 true 將告知 Git 不要根據需求,自動從承諾者遠端(promisor remote)延遲擷取遺失的物件。

GIT_REFLOG_ACTION

更新參照時,系統會建立參照記錄項目,以追蹤更新的原因(通常是更新參照的高階指令名稱),以及參照的舊值與新值。當腳本化的 Porcelain 指令由終端使用者作為頂層指令呼叫時,可使用 git-sh-setup 中的 set_reflog_action 輔助函式將其名稱設定為此變數,以便記錄在參照記錄主體中。

GIT_REF_PARANOIA

若此布林環境變數設為 false,在迭代參照清單時將忽略損壞或命名不當的參照。通常 Git 會嘗試包含任何這類參照,這可能會導致某些作業失敗。這通常比較可取,因為潛在的破壞性作業(例如 git-prune[1])最好選擇中止,而不是忽略損壞的參照(因而認為它們指向的歷史記錄不值得保存)。預設值為 1(即對於偵測與中止所有作業保持偏執)。通常您不需要將其設為 0,但在試圖從毀損的儲存庫搶救資料時可能會派上用場。

GIT_COMMIT_GRAPH_PARANOIA

從提交圖(commit-graph)載入提交物件時,Git 會執行物件資料庫中物件的存在性檢查。這樣做是為了避免包含已刪除提交參考的過時提交圖問題,但會帶來效能損耗。

預設值為 "false",這會停用上述行為。將此值設為 "true" 將啟用存在性檢查,這樣過時的提交將永遠不會從提交圖中傳回,但會犧牲效能。

GIT_ALLOW_PROTOCOL

若設為冒號分隔的協定清單,其表現就像 protocol.allow 設為 never,且清單中的每個協定都將 protocol.<name>.allow 設為 always(覆寫任何現有的組態)。更多詳細資訊請參見 git-config[1] 中關於 protocol.allow 的說明。

GIT_PROTOCOL_FROM_USER

將此布林環境變數設為 false,以防止 fetch/push/clone 使用組態為 user 狀態的協定。這對於限制未受信任儲存庫的遞迴子模組初始化,或對於提供潛在未受信任 URL 給 git 指令的程式非常有用。更多詳細資訊請參見 git-config[1]

GIT_PROTOCOL

僅供內部使用。用於連線協定的交握。包含冒號 : 分隔的鍵值清單,並帶有可選的值 <key>[=<value>]。必須忽略未知鍵值。

請注意,伺服器可能需要設定為允許此變數通過某些傳輸方式。當存取本機儲存庫(即 file:// 或檔案系統路徑)以及透過 git:// 協定時,它會自動傳播。對於 git-over-http,它在大多數組態中應能自動運作,但請參見 git-http-backend[1] 中的討論。對於 git-over-ssh,ssh 伺服器可能需要設定為允許用戶端傳遞此變數(例如在 OpenSSH 中使用 AcceptEnv GIT_PROTOCOL)。

此組態為選用。若未傳播此變數,用戶端將回退到原始的 "v0" 協定(但可能會錯過某些效能改進或功能)。此變數目前僅影響複製和擷取;尚未用於推送(但未來可能會)。

GIT_OPTIONAL_LOCKS

若此布林環境變數設為 false,Git 將完成任何請求的作業,而不執行任何需要取得鎖定的選用子作業。例如,這將防止 git status 作為副作用重新整理索引。這對於在背景執行且不希望與儲存庫上的其他作業造成鎖定競爭的程序非常有用。預設值為 1

GIT_REDIRECT_STDIN
GIT_REDIRECT_STDOUT
GIT_REDIRECT_STDERR

僅限 Windows:允許將標準輸入/輸出/錯誤控制代碼重新導向到環境變數指定的路徑。這在多執行緒應用程式中特別有用,因為透過 CreateProcess() 傳遞標準控制代碼的常規方式不可行,因為這會要求控制代碼被標記為可繼承(結果就是每個產生的程序都會繼承它們,可能導致封鎖正常的 Git 作業)。主要預期的使用案例是使用具名管道(named pipes)進行通訊(例如 \\.\pipe\my-git-stdin-123)。

支援兩個特殊值:off 將單純關閉對應的標準控制代碼;若 GIT_REDIRECT_STDERR2>&1,標準錯誤將會重新導向到與標準輸出相同的控制代碼。

GIT_PRINT_SHA1_ELLIPSIS(已棄用)

若設為 yes,則在(縮寫的)SHA-1 值後列印省略號。這會影響分離的 HEAD(git-checkout[1])和原始差異輸出(git-diff[1])。在上述情況下列印省略號不再被認為是合適的,且未來很可能會移除此項支援(以及該變數)。

GIT_ADVICE

若設為 0,則停用所有建議訊息。這些訊息旨在為人類使用者提供提示,協助其脫離問題狀況或利用新功能。使用者可以使用 advice.* 組態鍵停用個別訊息。這些訊息可能會干擾執行 Git 程序的工具,因此提供此變數以停用訊息。(也可以使用 --no-advice 全域選項,但舊版 Git 可能無法理解此選項而失敗。若 Git 版本無法理解此環境變數,將會忽略該變數。)

討論

關於以下內容的更多詳細資訊,請參見 使用者手冊的 Git 概念章節gitcore-tutorial[7]

一個 Git 專案通常包含一個頂層具有 ".git" 子目錄的工作目錄。.git 目錄中包含(除其他事項外)一個代表專案完整歷史記錄的壓縮物件資料庫、一個將該歷史記錄連結至目前工作樹內容的 "index" 檔案,以及指向該歷史記錄的名為標籤和分支頭的指標。

物件資料庫包含三種主要類型的物件:blob(儲存檔案資料);tree(指向 blob 和其他 tree,以建構目錄階層);commit(每個都參照一個 tree 和若干父提交)。

提交(commit)等同於其他系統所稱的 "變更集" 或 "版本",代表專案歷史記錄中的一個步驟,每個父項代表緊接的前一個步驟。具有多於一個父項的提交代表獨立開發線的合併。

所有物件皆以其內容的 SHA-1 雜湊命名,通常寫為 40 個十六進位數位的字串。這類名稱在全域是唯一的。通往提交的整個歷史記錄可以僅透過簽署該提交來擔保。為此提供第四種物件類型:標籤。

物件在最初建立時儲存在個別檔案中,但為了效率起見,稍後可能會壓縮在一起成為 "封裝檔"(pack files)。

名為參照(refs)的指標標記了歷史記錄中有趣的點。參照可能包含物件的 SHA-1 名稱或另一個參照的名稱(後者稱為 "符號參照")。名稱以 refs/head/ 開始的參照包含正在開發的分支的最新提交(或 "head")的 SHA-1 名稱。感興趣標籤的 SHA-1 名稱儲存在 refs/tags/ 下。名為 HEAD 的符號參照包含目前簽出的分支名稱。

索引(index)檔案初始化時包含所有路徑的清單,以及每個路徑的 blob 物件和一組屬性。blob 物件代表目前分支 head 的檔案內容。屬性(上次修改時間、大小等)取自工作樹中對應的檔案。隨後對工作樹的變更可以透過比較這些屬性來發現。索引可以用新內容更新,並可從儲存在索引中的內容建立新的提交。

索引也能夠為給定的路徑名儲存多個項目(稱為 "階段")。這些階段用於在進行合併時保存檔案的各種未合併版本。

安全性

某些組態選項和掛鉤(hook)檔案可能會導致 Git 執行任意的 shell 指令。由於組態和掛鉤不會使用 git clone 複製,因此複製具有未受信任內容的遠端儲存庫,並使用 git log 等進行檢查通常是安全的。

然而,當 .git 目錄本身來自未受信任的來源時,在該目錄(或其周圍的工作樹)中執行 Git 指令是不安全的。其組態和掛鉤中的指令會以通常方式執行。

預設情況下,當儲存庫由執行指令的使用者以外的人擁有時,Git 將拒絕執行。參見 git-config[1] 中的 safe.directory 項目。雖然這有助於在多使用者環境中保護您,但請注意,您也可能取得由您擁有的未受信任儲存庫(例如,若您解壓縮來自未受信任來源的 zip 檔案或 tarball)。在這種情況下,您需要先「清理」未受信任的儲存庫。

若您擁有一個未受信任的 .git 目錄,您應該先使用 git clone --no-local 將其複製以取得乾淨的副本。Git 確實限制了由 upload-pack(處理複製或擷取的伺服器端)執行的選項和掛鉤集,但請注意,針對 upload-pack 的攻擊面很大,因此這確實帶有一定風險。最安全的做法是以無特權的使用者身分提供該儲存庫(透過 git-daemon[1]、ssh,或使用其他工具更改使用者 ID)。參見 git-upload-pack[1]SECURITY 區段討論。

更多文件

請參見「說明」章節中的參考資料以開始使用 Git。以下內容對於初次使用者而言可能過於詳盡。

使用者手冊的 Git 概念章節gitcore-tutorial[7] 皆提供了底層 Git 架構的介紹。

推薦工作流程的總覽,請參見 gitworkflows[7]

請參見 howto 文件以取得一些有用的範例。

內部運作記錄於 Git API 文件 中。

從 CVS 遷移的使用者可能也會想閱讀 gitcvs-migration[7]

作者

Git 由 Linus Torvalds 發起,目前由 Junio C Hamano 維護。來自 Git 郵寄清單 <git@vger.kernel.org> 的眾多貢獻。 https://openhub.net/p/git/contributors/summary 提供了更完整的貢獻者清單。

若您擁有 git.git 本身的副本,git-shortlog[1]git-blame[1] 的輸出可以向您顯示專案特定部分的作者。

報告錯誤

請將錯誤報告發送至開發與維護主要所在地的 Git 郵寄清單 <git@vger.kernel.org>。您不需要訂閱該清單即可發送郵件。請參見 https://lore.kernel.org/git 的清單存檔,以了解過去的錯誤報告與其他討論。

涉及安全性的問題應私下揭露給 Git 安全郵寄清單 <git-security@googlegroups.com>。

GIT

git[1] 套件的一部分