English ▾ 主題 ▾ 最新版本 ▾ git-config 最後更新於 2.54.0

名稱

git-config - 獲取和設置存儲庫或全域選項

概要

git config list [<file-option>] [<display-option>] [--includes]
git config get [<file-option>] [<display-option>] [--includes] [--all] [--regexp] [--value=<pattern>] [--fixed-value] [--default=<default>] [--url=<url>] <name>
git config set [<file-option>] [--type=<type>] [--all] [--value=<pattern>] [--fixed-value] <name> <value>
git config unset [<file-option>] [--all] [--value=<pattern>] [--fixed-value] <name>
git config rename-section [<file-option>] <old-name> <new-name>
git config remove-section [<file-option>] <name>
git config edit [<file-option>]
git config [<file-option>] --get-colorbool <name> [<stdout-is-tty>]

描述

您可以使用此命令查詢/設置/替換/取消設置選項。名稱實際上是由點分隔的區段和鍵,且值將被轉義。

可以使用 --append 選項為一個選項添加多行。如果您想更新或取消設置一個可能出現在多行的選項,則需要提供 --value=<模式>(除非給定了 --fixed-value 選項,否則這是一個擴展正則表達式)。只有符合模式的現有值會被更新或取消設置。如果您想處理與模式< 符合的行,只需在前面加上一個感嘆號(另請參閱 範例),但請注意這僅在未啟用 --fixed-value 選項時才有效。

--type=<類型> 選項指示 git config 確保傳入和傳出的值在給定的 <類型> 下是可規範化的。如果未給出 --type=<類型>,則不會執行規範化。呼叫者可以使用 --no-type 取消設置現有的 --type 指定符。

讀取時,預設會從系統、全域和存儲庫本地配置文件中讀取值,並且可以使用 --system--global--local--worktree--file <文件名> 選項來告訴命令僅從該位置讀取(參閱 文件)。

寫入時,預設會將新值寫入存儲庫本地配置文件,並且可以使用 --system--global--worktree--file <文件名> 選項來告訴命令寫入該位置(您可以輸入 --local,但這是預設值)。

如果出錯,此命令將以非零狀態失敗。一些退出代碼為:

  • 區段或鍵無效 (ret=1),

  • 未提供區段或名稱 (ret=2),

  • 配置文件無效 (ret=3),

  • 無法寫入配置文件 (ret=4),

  • 嘗試取消設置一個不存在的選項 (ret=5),

  • 嘗試取消設置/設置一個匹配多行的選項 (ret=5),或

  • 嘗試使用無效的正則表達式 (ret=6)。

成功時,該命令返回退出代碼 0。

所有可用配置變量的列表可以使用 git help --config 命令獲得。

指令

list

列出配置文件中設置的所有變量及其值。

get

輸出指定鍵的值。如果鍵在配置中出現多次,則輸出最後一個值。如果指定了 --all,則輸出與該鍵相關聯的所有值。如果鍵不存在,則返回錯誤代碼 1。

set

設置一個或多個配置選項的值。預設情況下,此命令拒絕寫入多值配置選項。傳遞 --all 將用新值替換所有多值配置選項,而 --value= 將替換所有值與給定模式匹配的配置選項。

unset

取消設置一個或多個配置選項的值。預設情況下,此命令拒絕取消設置多值鍵。傳遞 --all 將取消設置所有多值配置選項,而 --value 將取消設置所有值與給定模式匹配的配置選項。

rename-section

將給定的區段重新命名為新名稱。

remove-section

從配置文件中刪除給定的區段。

edit

打開編輯器以修改指定的配置文件;可以是 --system--global--local(預設)、--worktree--file <配置文件>

選項 (OPTIONS)

--replace-all

預設行為是最多替換一行。此選項會替換所有與鍵匹配的行(可選擇配合 --value=<模式>)。

--append

向選項添加新行而不更改任何現有值。這與在 set 中提供 --value=^$ 相同。

--comment <訊息>

在新增或修改行的末尾追加註釋。

如果 <訊息> 以一個或多個空格開頭,後跟 "",則按原樣使用。如果它以 "" 開頭,則在使用前會加上一個空格。否則,它會被加上字串 " # "(空格、井號、空格)。產生的字串會緊接在變量定義的值之後。<訊息> 不得包含換行字符(不允許使用多行註釋)。

--all

配合 get 使用時,返回多值鍵的所有值。

--regexp

配合 get 使用時,將名稱解釋為正則表達式。正則表達式匹配目前區分大小寫,並針對鍵的規範化版本進行匹配(其中區段名稱和變量名稱為小寫,但子區段名稱不是)。

--url=<URL>

當給出兩部分 <名稱> 作為 <區段>.<鍵> 時,會返回與給定 URL 最匹配的 <區段>..<鍵> 的值(如果沒有這樣的鍵,則會回退使用 <區段>.<鍵> 的值)。當僅給出 <區段> 作為名稱時,則針對該區段中的所有鍵執行此操作並將其列出。如果找不到值,則返回錯誤代碼 1。

--global

對於寫入選項:寫入全域 ~/.gitconfig 文件,而不是存儲庫的 .git/config;如果存在 $XDG_CONFIG_HOME/git/config~/.gitconfig 不存在,則寫入該文件。

對於讀取選項:僅從全域 ~/.gitconfig$XDG_CONFIG_HOME/git/config 讀取,而不是從所有可用文件中讀取。

另請參閱 文件

--system

對於寫入選項:寫入系統範圍的 $(prefix)/etc/gitconfig,而不是存儲庫的 .git/config

對於讀取選項:僅從系統範圍的 $(prefix)/etc/gitconfig 讀取,而不是從所有可用文件中讀取。

另請參閱 文件

--local

對於寫入選項:寫入存儲庫的 .git/config 文件。這是預設行為。

對於讀取選項:僅從存儲庫的 .git/config 讀取,而不是從所有可用文件中讀取。

另請參閱 文件

--worktree

--local 類似,不同之處在於如果啟用了 extensions.worktreeConfig,則會從 $GIT_DIR/config.worktree 讀取或寫入。否則,它與 --local 相同。請注意,$GIT_DIR 對於主工作樹等於 $GIT_COMMON_DIR,但對於其他工作樹則為 $GIT_DIR/worktrees/<id>/ 形式。請參閱 git-worktree[1] 以了解如何啟用 extensions.worktreeConfig

-f <配置文件>
--file <配置文件>

對於寫入選項:寫入指定文件,而不是存儲庫的 .git/config

對於讀取選項:僅從指定文件讀取,而不是從所有可用文件中讀取。

另請參閱 文件

--blob <blob>

--file 類似,但使用給定的 blob 而不是文件。例如,您可以使用 master:.gitmodules 從 master 分支中的 .gitmodules 文件讀取值。有關如何表示 blob 名稱的更完整列表,請參閱 gitrevisions[7] 中的“指定修訂版本”一節。

--value=<模式>
--no-value

配合 getsetunset 使用時,僅與 <模式> 匹配。除非給出了 --fixed-value,否則模式為擴展正則表達式。

使用 --no-value 來取消設置 <模式>

--fixed-value

--value=<模式> 一起使用時,將 <模式> 視為確切字串而不是正則表達式。這將限制匹配的名稱/值對,僅限於值與 <模式> 完全相等的那些。

--type <類型>

git config 將確保任何輸入或輸出在給定的類型限制下有效,並將傳出值規範化為 <類型> 的規範形式。

有效的 <類型> 包括

  • bool: 將值 trueyeson 和正數規範化為 "true",並將值 falsenooff0 規範化為 "false"。

  • int: 將值規範化為簡單的十進位數。可選的 kmg 後綴會導致輸入值分別乘以 1024、1048576 或 1073741824。

  • bool-or-int: 根據上述 boolint 進行規範化。

  • path: 通過將開頭的 ~ 展開為 $HOME 的值,以及將 ~user 展開為指定用戶的主目錄來規範化。此指定符在設置值時沒有影響(但您可以使用命令列的 git config section.variable ~/ 讓您的 shell 執行展開)。

  • expiry-date: 通過將固定或相對日期字串轉換為時間戳來規範化。此指定符在設置值時沒有影響。

  • color: 獲取值時,通過轉換為 ANSI 顏色轉義序列來規範化。設置值時,會執行健全性檢查以確保給定值可規範化為 ANSI 顏色,但會按原樣寫入。

    如果命令處於 list 模式,則 --type <類型> 參數將應用於每個列出的配置值。如果該值無法以該格式成功解析,則將其從列表中省略。

--bool
--int
--bool-or-int
--path
--expiry-date

用於選擇類型指定符的歷史選項。請改用 --type(見上文)。

--no-type

取消設置先前設置的類型指定符(如果先前已設置)。此選項請求 git config 不規範化檢索到的變量。--no-type 在沒有 --type=<類型>--<類型> 的情況下沒有影響。

-z
--null

對於所有輸出值和/或鍵的選項,始終以空字符(而不是換行符)結束值。改用換行符作為鍵和值之間的分隔符。這允許安全地解析輸出,而不會因包含換行符的值而感到困惑。

--name-only

僅輸出 listget 的配置變量名稱。

--show-names
--no-show-names

使用 get 時,除值外還顯示配置鍵。預設為 --no-show-names,除非給出了 --url 且 <名称> 中沒有子區段。

--show-origin

使用來源類型(文件、標準輸入、blob、命令列)和實際來源(配置文件路徑、引用或 blob ID(如果適用))來增強所有查詢配置選項的輸出。

--show-scope

--show-origin 類似,它會使用該值的作用域(工作樹、本地、全域、系統、命令)來增強所有查詢配置選項的輸出。

--get-colorbool <名稱> [<stdout-is-tty>]

查找 <名稱>(例如 color.diff)的顏色設置並輸出 "true" 或 "false"。 <stdout-is-tty> 應為 "true" 或 "false",並在配置說明為 "auto" 時會納入考慮。如果缺少 <stdout-is-tty>,則檢查命令本身的標準輸出,如果應使用顏色則以狀態 0 退出,否則以狀態 1 退出。當 名稱 的顏色設置未定義時,命令將使用 color.ui 作為回退。

--includes
--no-includes

查找值時遵守配置文件中的 include.* 指令。指定特定文件(例如使用 --file--global 等)時預設為 off,在搜尋所有配置文件時預設為 on

--default <值>

使用 get 且未找到請求的變量時,表現得如同該值已分配給該變量一樣。

已棄用的模式

以下模式已被棄用,轉而使用子命令。建議遷移到新的語法。

git config <名稱>

git config get <名稱> 取代。

git config <名稱> <值> [<值-模式>]

git config set [--value=<模式>] <名稱> <值> 取代。

-l
--list

git config list 取代。

--get <名稱> [<值-模式>]

git config get [--value=<模式>] <名稱> 取代。

--get-all <名稱> [<值-模式>]

git config get [--value=<模式>] --all <名稱> 取代。

--get-regexp <名稱-正則表達式>

git config get --all --show-names --regexp <名稱-正則表達式> 取代。

--get-urlmatch <名稱> <URL>

git config get --url=<URL> <名稱> 取代。

--get-color <名稱> [<預設值>]

git config get --type=color [--default=<預設值>] <名稱> 取代。

--add <名稱> <值>

git config set --append <名稱> <值> 取代。

--unset <名稱> [<值-模式>]

git config unset [--value=<模式>] <名稱> 取代。

--unset-all <名稱> [<值-模式>]

git config unset [--value=<模式>] --all <名稱> 取代。

--rename-section <舊名稱> <新名稱>

git config rename-section <舊名稱> <新名稱> 取代。

--remove-section <名稱>

git config remove-section <名稱> 取代。

-e
--edit

git config edit 取代。

組態設定 (CONFIGURATION)

pager.config 僅在列出配置時才被遵守,即使用 list 或可能返回多個結果的 get 時。預設是使用分頁器。

文件 (FILES)

預設情況下,git config 會從多個文件中讀取配置選項

$(prefix)/etc/gitconfig

系統範圍的配置文件。

$XDG_CONFIG_HOME/git/config
~/.gitconfig

特定於用戶的配置文件。當 XDG_CONFIG_HOME 環境變量未設置或為空時,使用 $HOME/.config/ 作為 XDG_CONFIG_HOME。

這些也稱為“全域”配置文件。如果兩個文件都存在,則會按照上述順序讀取兩個文件。

$GIT_DIR/config

特定於存儲庫的配置文件。

$GIT_DIR/config.worktree

這是可選的,僅當 $GIT_DIR/config 中存在 extensions.worktreeConfig 時才會搜尋。

您還可以在運行任何 git 命令時使用 -c 選項提供額外的配置參數。詳細資訊請參閱 git[1]

選項將從所有可用的文件中讀取。如果全域或系統範圍的配置文件缺失或不可讀,它們將被忽略。如果存儲庫配置文件缺失或不可讀,git config 將以非零錯誤代碼退出。如果文件不可讀,則會產生錯誤訊息,但如果缺失則不會。

文件按照上述順序讀取,最後找到的值優先於較早讀取的值。當獲取多個值時,將使用來自所有文件的鍵的所有值。

預設情況下,選項僅寫入存儲庫特定的配置文件。請注意,這也會影響 setunset 等選項。git config 一次只會更改一個文件

您可以通過指定 --file 選項的文件路徑,或者通過指定 --system--global--local--worktree 的配置作用域來限制讀取或寫入哪些配置源。更多資訊,請參閱上文的 選項

作用域 (SCOPES)

每個配置源都屬於一個配置作用域。作用域包括

系統 (system)

$(prefix)/etc/gitconfig

全域 (global)

$XDG_CONFIG_HOME/git/config

~/.gitconfig

本地 (local)

$GIT_DIR/config

工作樹 (worktree)

$GIT_DIR/config.worktree

命令 (command)

GIT_CONFIG_{COUNT,KEY,VALUE} 環境變量(參閱下文 環境變量

-c 選項

除了 命令 之外,每個作用域都對應一個命令列選項:--system--global--local--worktree

讀取選項時,指定作用域將僅讀取該作用域內的文件中的選項。寫入選項時,指定作用域將寫入該作用域內的文件(而不是存儲庫特定的配置文件)。完整說明請參閱上文的 選項

大多數配置選項無論定義在什麼作用域中都會被遵守,但有些選項僅在特定作用域中被遵守。有關詳細資訊,請參閱相應選項的文檔。

受保護的配置

受保護的配置指 系統全域命令 作用域。出於安全原因,某些選項僅在受保護的配置中指定時才會被遵守,否則會被忽略。

Git 將這些作用域視為由用戶或受信任的管理員控制。這是因為控制這些作用域的攻擊者無需使用 Git 即可造成實質損害,因此假設用戶的環境保護這些作用域免受攻擊者侵害。

環境變量 (ENVIRONMENT)

GIT_CONFIG_GLOBAL
GIT_CONFIG_SYSTEM

從給定文件而不是全域或系統級配置中獲取配置。詳細資訊請參閱 git[1]

GIT_CONFIG_NOSYSTEM

是否跳過從系統範圍的 $(prefix)/etc/gitconfig 文件讀取設置。詳細資訊請參閱 git[1]

另請參閱 文件

GIT_CONFIG_COUNT
GIT_CONFIG_KEY_<n>
GIT_CONFIG_VALUE_<n>

如果 GIT_CONFIG_COUNT 設置為正數,則直到該數量的所有環境變量對 GIT_CONFIG_KEY_<n> 和 GIT_CONFIG_VALUE_<n> 將被添加到進程的運行時配置中。配置對從零開始索引。任何缺失的鍵或值都被視為錯誤。空的 GIT_CONFIG_COUNT 與 GIT_CONFIG_COUNT=0 處理方式相同,即不處理任何對。這些環境變量將覆蓋配置文件中的值,但會被通過 git -c 傳遞的任何顯式選項所覆蓋。

這對於希望使用通用配置啟動多個 git 命令但無法依賴配置文件的情況(例如編寫腳本時)非常有用。

GIT_CONFIG

如果未向 git config 提供 --file 選項,則使用 GIT_CONFIG 給出的文件,如同它通過 --file 提供一樣。此變量對其他 Git 命令沒有影響,主要用於歷史兼容性;通常沒有理由使用它而不是 --file 選項。

範例 (EXAMPLES)

假設 .git/config 如下所示

#
# This is the config file, and
# a '#' or ';' character indicates
# a comment
#

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

; Our diff algorithm
[diff]
	external = /usr/local/bin/diff-wrapper
	renames = true

; Proxy settings
[core]
	gitproxy=proxy-command for kernel.org
	gitproxy=default-proxy ; for all the rest

; HTTP
[http]
	sslVerify
[http "https://weak.example.com"]
	sslVerify = false
	cookieFile = /tmp/cookie.txt

您可以通過以下方式將 filemode 設置為 true

% git config set core.filemode true

假設的代理命令條目實際上具有後綴以辨別它們應用於哪個 URL。以下是如何將 kernel.org 的條目更改為 "ssh" 的方法。

% git config set --value='for kernel.org$' core.gitproxy '"ssh" for kernel.org'

這確保僅替換 kernel.org 的鍵/值對。

要刪除 renames 的條目,請執行

% git config unset diff.renames

如果您想刪除 multivar 的條目(如上面的 core.gitproxy),您必須提供一個匹配確切一行值的正則表達式。

要查詢給定鍵的值,請執行

% git config get core.filemode

或者,要查詢 multivar

% git config get --value="for kernel.org$" core.gitproxy

如果您想了解 multivar 的所有值,請執行

% git config get --all --show-names core.gitproxy

如果您喜歡冒險,可以使用以下命令替換 所有 core.gitproxy 為新的

% git config set --all core.gitproxy ssh

然而,如果您確實只想替換預設代理的行,即沒有 "for …​" 後綴的那一行,請執行如下操作

% git config set --value='! for ' core.gitproxy ssh

要實際僅匹配帶有感嘆號的值,您必須

% git config set --value='[!]' section.key value

要添加新代理而不更改任何現有代理,請使用

% git config set --append core.gitproxy '"proxy-command" for example.com'

在腳本中使用配置中的自定義顏色的範例

#!/bin/sh
WS=$(git config get --type=color --default="blue reverse" color.diff.whitespace)
RESET=$(git config get --type=color --default="reset" "")
echo "${WS}your whitespace color or blue reverse${RESET}"

對於 https://weak.example.com 中的 URL,http.sslVerify 被設置為 false,而對於所有其他 URL 則設置為 true

% git config get --type=bool --url=https://good.example.com http.sslverify
true
% git config get --type=bool --url=https://weak.example.com http.sslverify
false
% git config get --url=https://weak.example.com http
http.cookieFile /tmp/cookie.txt
http.sslverify false

配置文件

Git 配置文件包含許多影響 Git 命令行為的變量。每個存儲庫中的 .git/config 和可選的 config.worktree(參閱 git-worktree[1] 的“配置文件”一節)文件用於存儲該存儲庫的配置,而 $HOME/.gitconfig 用於存儲每用戶配置作為 .git/config 文件的回退值。文件 /etc/gitconfig 可用於存儲系統範圍的預設配置。

配置變量由 Git 管道命令和 porcelain 命令使用。變量被分為多個區段,其中變量本身的完全限定名稱是最後一個點分隔部分,區段名稱是最後一個點之前的所有部分。變量名稱不區分大小寫,僅允許字母數字字符和 -,並且必須以字母開頭。某些變量可能出現多次;我們稱之為多值變量。

語法

語法相當靈活且寬鬆。在這種語境下,空白字符(即空格 (SP) 和水平製表符 (HT))大多被忽略。#; 字符標記註釋直到行尾。空行被忽略。

文件由區段和變量組成。區段以方括號中的區段名稱開始,並持續到下一個區段開始。區段名稱不區分大小寫。區段名稱中僅允許使用字母數字字符、-.。每個變量必須屬於某個區段,這意味著在第一次設置變量之前必須有一個區段頭。

區段可以進一步劃分為子區段。要開始一個子區段,請將其名稱放在雙引號中,並在區段頭中與區段名稱用空格分隔,如下例所示

	[section "subsection"]

子區段名稱區分大小寫,可以包含除換行符和空字節以外的任何字符。雙引號 " 和反斜線可以通過分別轉義為 \"\\ 來包含。讀取時會丟棄其他字符前的反斜線;例如,\t 被讀為 t\0 被讀為 0。區段頭不能跨越多行。變量可以直接屬於某個區段或給定的子區段。如果您有 [區段 "子區段"],則可以有 [區段],但這不是必需的。

還有一個已棄用的 [區段.子區段] 語法。使用此語法時,子區段名稱會轉換為小寫並進行區分大小寫的比較。這些子區段名稱遵循與區段名稱相同的限制。

所有其他行(以及區段頭之後該行的其餘部分)被識別為設置變量,格式為 名稱 = 值(或者僅僅是 名稱,這是一種表示該變量為布爾值 "true" 的速記)。變量名稱不區分大小寫,僅允許使用字母數字字符和 -,並且必須以字母開頭。

名稱= 周圍的空白字符將被丟棄。 內部的空白字符將按原樣保留。以 #; 開頭並延伸至行尾的註釋將被丟棄。定義值的行可以通過以反斜線 (\) 結束來延續到下一行;反斜線和行尾字符將被丟棄。

如果 需要包含開頭或結尾的空白字符,則必須將其括在雙引號 (") 中。在雙引號內,雙引號 (") 和反斜線 (\) 字符必須進行轉義:使用 \" 表示 ",使用 \\ 表示 \

識別以下轉義序列(除了 \"\\):\n 表示換行字符 (NL),\t 表示水平製表符 (HT, TAB),以及 \b 表示退格鍵 (BS)。其他字符轉義序列(包括八進位轉義序列)是無效的。

包含 (Includes)

includeincludeIf 區段允許您包含來自另一個來源的配置指令。這些區段的行為完全相同,不同之處在於如果 includeIf 區段的條件未評估為 true,則它們可能會被忽略;請參閱下文的“條件包含”。

您可以通過將特殊的 include.path(或 includeIf.*.path)變量設置為要包含的文件名稱來包含另一個配置文件。該變量採用路徑名作為其值,並受波浪號擴展約束。這些變量可以多次給出。

包含的文件的內容會立即插入,如同它們在包含指令的位置被發現一樣。如果變量的值是相對路徑,則該路徑被認為相對於發現包含指令的配置文件。範例請參見下文。

條件包含 (Conditional includes)

您可以通過將 includeIf.<條件>.path 變量設置為要包含的文件名稱來有條件地包含另一個配置文件。

條件以關鍵字開始,後跟冒號和一些數據,其格式和含義取決於關鍵字。支持的關鍵字為

gitdir

關鍵字 gitdir 和冒號後面的數據用作 glob 模式。如果 .git 目錄的位置匹配該模式,則滿足包含條件。

.git 位置可能是自動發現的,或者來自 $GIT_DIR 環境變量。如果存儲庫是通過 .git 文件(例如來自子模組或連結的工作樹)自動發現的,則 .git 位置將是 .git 目錄的最終位置,而不是 .git 文件所在的位置。

該模式可以包含標準 glob 通配符以及兩個額外的通配符 **//**,它們可以匹配多個路徑組件。詳情請參閱 gitignore[5]。為了方便

  • 如果模式以 ~/ 開頭,~ 將被環境變量 HOME 的內容替換。

  • 如果模式以 ./ 開頭,它將被包含當前配置文件的目錄替換。

  • 如果模式不以 ~/.// 開頭,**/ 將被自動添加到開頭。例如,模式 foo/bar 變為 **/foo/bar,並將匹配 /any/path/to/foo/bar

  • 如果模式以 / 結尾,** 將被自動添加。例如,模式 foo/ 變為 foo/**。換句話說,它匹配 "foo" 及其內部所有內容,並進行遞歸。

gitdir/i

這與 gitdir 相同,不同之處在於匹配是不區分大小寫的(例如在不區分大小寫的文件系統上)

onbranch

關鍵字 onbranch 和冒號後面的數據被視為帶有標準 glob 通配符的模式,以及兩個額外的通配符 **//**,它們可以匹配多個路徑組件。如果我們位於一個工作樹中,且當前簽出的分支名稱匹配該模式,則滿足包含條件。

如果模式以 / 結尾,** 將被自動添加。例如,模式 foo/ 變為 foo/**。換句話說,它匹配所有以 foo/ 開頭的分支。如果您的分支是層次化組織的,並且您希望將配置應用於該層次結構中的所有分支,這非常有用。

hasconfig:remote.*.url

關鍵字和冒號後面的數據被視為帶有標準 glob 通配符的模式,以及兩個額外的通配符 **//**,它們可以匹配多個組件。第一次看到此關鍵字時,將掃描其餘配置文件以查找遠端 URL(不應用任何值)。如果至少存在一個匹配此模式的遠端 URL,則滿足包含條件。

此選項(直接或間接)包含的文件不允許包含遠端 URL。

請注意,與其他 includeIf 條件不同,解決此條件依賴於讀取條件時尚未知曉的信息。一個典型的用例是此選項作為系統級或全域級配置存在,而遠端 URL 位於本地級配置中;因此在解析此條件時需要提前掃描。為了避免潛在包含的文件可能影響此類文件是否被潛在包含的“先有雞還是先有蛋”問題,Git 通過禁止這些文件影響這些條件的解析(從而禁止它們聲明遠端 URL)來打破循環。

至於此關鍵字的命名,它是為了與支持更多基於變量的包含條件的命名方案的前向兼容性,但目前 Git 僅支持上述確切的關鍵字。

關於通過 gitdirgitdir/i 進行匹配的更多說明

  • $GIT_DIR 中的符號連結在匹配前不會被解析。

  • 路徑的符號連結和真實路徑版本都將在 $GIT_DIR 之外匹配。例如,如果 ~/git 是 /mnt/storage/git 的符號連結,則 gitdir:~/gitgitdir:/mnt/storage/git 都會匹配。

    在 v2.13.0 此功能的初始版本中並非如此,當時僅匹配真實路徑版本。希望與此功能初始版本兼容的配置需要指定僅真實路徑版本,或兩個版本。

  • 請注意,"../" 並不特殊,將按字面匹配,這很可能不是您想要的。

範例

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

# Our diff algorithm
[diff]
	external = /usr/local/bin/diff-wrapper
	renames = true

[branch "devel"]
	remote = origin
	merge = refs/heads/devel

# Proxy settings
[core]
	gitProxy="ssh" for "kernel.org"
	gitProxy=default-proxy ; for the rest

[include]
	path = /path/to/foo.inc ; include by absolute path
	path = foo.inc ; find "foo.inc" relative to the current file
	path = ~/foo.inc ; find "foo.inc" in your `$HOME` directory

; include if $GIT_DIR is /path/to/foo/.git
[includeIf "gitdir:/path/to/foo/.git"]
	path = /path/to/foo.inc

; include for all repositories inside /path/to/group
[includeIf "gitdir:/path/to/group/"]
	path = /path/to/foo.inc

; include for all repositories inside $HOME/to/group
[includeIf "gitdir:~/to/group/"]
	path = /path/to/foo.inc

; relative paths are always relative to the including
; file (if the condition is true); their location is not
; affected by the condition
[includeIf "gitdir:/path/to/group/"]
	path = foo.inc

; include only if we are in a worktree where foo-branch is
; currently checked out
[includeIf "onbranch:foo-branch"]
	path = foo.inc

; include only if a remote with the given URL exists (note
; that such a URL may be provided later in a file or in a
; file read after this file is read, as seen in this example)
[includeIf "hasconfig:remote.*.url:https://example.com/**"]
	path = foo.inc
[remote "origin"]
	url = https://example.com/git

值 (Values)

許多變量的值被視為簡單字串,但有些變量採用特定類型的值,並且對於如何書寫它們有相應規則。

布爾值 (boolean)

當變量被稱為採用布爾值時,接受許多 truefalse 的同義詞;這些都不區分大小寫。

true

布爾 true 的字面量包括 yesontrue1。此外,沒有 = <值> 定義的變量被視為 true。

false

布爾 false 的字面量包括 noofffalse0 和空字串。

當使用 --type=bool 類型指定符將值轉換為其規範形式時,git config 將確保輸出為 "true" 或 "false"(以小寫拼寫)。

整數 (integer)

指定各種大小的許多變量的值可以加上 kM 等後綴,表示“按 1024 縮放數字”、“按 1024x1024 縮放”等。

顏色 (color)

採用顏色的變量的值是顏色列表(最多兩個,一個用於前景,一個用於背景)和屬性(任意多個),由空格分隔。

接受的基本顏色有 normalblackredgreenyellowbluemagentacyanwhitedefault。給出的第一個顏色是前景;第二個是背景。除 normaldefault 外的所有基本顏色都有一個亮色變體,可以通過在顏色前加上 bright 來指定,例如 brightred

顏色 normal 不會改變顏色。它與空字串相同,但當單獨指定背景顏色時可用作前景顏色(例如 "normal red")。

顏色 default 明確將顏色重置為終端預設值,例如用於指定清除的背景。雖然在不同終端之間有所不同,但這通常與設置為 "white black" 不同。

顏色也可以給出為 0 到 255 之間的數字;這些使用 ANSI 256 色模式(但請注意並非所有終端都支持此功能)。如果您的終端支持,您還可以將 24 位 RGB 值指定為十六進位,例如 #ff0ab3,或 12 位 RGB 值如 #f1b,這等同於 24 位顏色 #ff11bb

接受的屬性有 bolddimulblinkreverseitalicstrike(用於劃掉或“刪除線”字母)。屬性相對於顏色的位置(之前、之後或之間)並不重要。可以通過在特定屬性前加上 nono- 來關閉特定屬性(例如 noreverseno-ul 等)。

偽屬性 reset 在應用指定的著色之前重置所有顏色和屬性。例如,reset green 將導致綠色前景和預設背景,而沒有任何活動屬性。

空顏色字串不會產生任何顏色效果。這可用於避免對特定元素進行著色,而無需完全禁用顏色。

對於 git 的預定義顏色插槽,屬性旨在在彩色輸出中每個項目的開頭進行重置。因此,將 color.decorate.branch 設置為 black 將以普通的 black 繪製該分支名稱,即使同一輸出行上的前一個內容(例如 log --decorate 輸出中分支名稱列表前的左括號)設置為以 bold 或其他屬性繪製。然而,自定義日誌格式可能會進行更複雜和分層的著色,負面形式在那裡可能很有用。

路徑名 (pathname)

採用路徑名值的變量可以給出以 "~/" 或 "~user/" 開頭的字串,通常的波浪號擴展會應用於此類字串:~/ 展開為 $HOME 的值,~user/ 展開為指定用戶的主目錄。

如果路徑以 %(prefix)/ 開頭,其餘部分被解釋為相對於 Git 的“運行時前綴”的路徑,即相對於安裝 Git 本身的位置。例如,%(prefix)/bin/ 指的是 Git 可執行文件本身所在的目錄。如果 Git 在沒有運行時前綴支持的情況下編譯,則會代入編譯進的前綴。在極少數情況下,如果需要指定一個不應展開的文字路徑,則需要以 ./ 為前綴,像這樣:./%(prefix)/bin

如果加上 :(optional) 前綴,如果命名路徑不存在,則該配置變量被視為不存在。

變量 (Variables)

請注意,此列表並不詳盡,也不一定完整。對於特定命令的變量,您將在適當的手冊頁中找到更詳細的說明。

其他與 git 相關的工具可以並且確實使用它們自己的變量。在為您自己的工具發明新變量時,請確保它們的名稱不會與 Git 本身和其他常用工具使用的變量衝突,並在您的文檔中描述它們。

add.ignoreErrors
add.ignore-errors (已棄用)

告訴 git add 當某些文件由於索引錯誤而無法添加時繼續添加文件。等同於 git-add[1]--ignore-errors 選項。add.ignore-errors 已棄用,因為它不遵循配置變量的常用命名約定。

advice.*

這些變量控制旨在幫助新用戶的各種可選幫助訊息。當未配置時,Git 將給出該訊息以及如何關閉它的說明。您可以通過將相應變量設置為 false 來告訴 Git 您已經了解該問題,不再需要特定的幫助訊息。

由於它們旨在幫助人類用戶,這些訊息輸出到標準錯誤。當運行 Git 作為子進程的工具發現它們具有破壞性時,它們可以在環境中設置 GIT_ADVICE=0 來關閉所有建議訊息。

addEmbeddedRepo

當用戶意外將一個 git 存儲庫添加到另一個存儲庫中時顯示。

addEmptyPathspec

當用戶運行 git add 而未提供 pathspec 參數時顯示。

addIgnoredFile

當用戶嘗試將忽略的文件添加到索引時顯示。

amWorkDir

git-am[1] 無法應用補丁文件時顯示,以告訴用戶文件的位置。

ambiguousFetchRefspec

當多個遠端的 fetch refspec 映射到同一個遠端跟蹤分支命名空間並導致分支跟蹤設置失敗時顯示。

checkoutAmbiguousRemoteBranchName

git-checkout[1]git-switch[1] 的參數歧義解析為多個遠端上的遠端跟蹤分支時顯示(在無歧義參數原本會導致簽出遠端跟蹤分支的情況下)。請參閱 checkout.defaultRemote 配置變量,了解如何在某些情況下預設設置給定遠端。

commitBeforeMerge

git-merge[1] 拒絕合併以避免覆蓋本地更改時顯示。

detachedHead

當用戶使用 git-switch[1]git-checkout[1] 移動到分離 HEAD 狀態時顯示,以告訴用戶事後如何創建本地分支。

diverging

當無法進行快進時顯示。

fetchShowForcedUpdates

git-fetch[1] 在引用更新後計算強制更新需要很長時間時,或警告該檢查已禁用時顯示。

forceDeleteBranch

當用戶嘗試刪除未完全合併的分支而未設置強制選項時顯示。

ignoredHook

當鉤子因未設置為可執行而被忽略時顯示。

implicitIdentity

當用戶資訊是從系統用戶名和域名猜測得出時顯示,以告訴用戶如何設置身份配置。

mergeConflict

當各種命令因衝突而停止時顯示。

nestedTag

當用戶嘗試遞歸標記標記對象時顯示。

pushAlreadyExists

git-push[1] 拒絕不符合快進條件的更新時顯示(例如標記)。

pushFetchFirst

git-push[1] 拒絕嘗試覆蓋指向我們沒有的對象的遠端引用時顯示。

pushNeedsForce

git-push[1] 拒絕嘗試覆蓋指向非 commit-ish 對象的遠端引用,或使遠端引用指向非 commit-ish 對象時顯示。

pushNonFFCurrent

git-push[1] 由於對當前分支進行非快進更新而失敗時顯示。

pushNonFFMatching

當用戶運行 git-push[1] 並明確推送“匹配的引用”(即使用 :,或指定了不是當前分支的 refspec)且導致非快進錯誤時顯示。

pushRefNeedsUpdate

git-push[1] 在其遠端跟蹤引用具有我們本地沒有的更新時,拒絕分支的強制更新時顯示。

pushUnqualifiedRefname

git-push[1] 放棄嘗試根據源和目標引用猜測源屬於哪個遠端引用命名空間時顯示,但在這裡我們仍然可以建議用戶根據源對象的類型推送到 refs/heads/*refs/tags/*

pushUpdateRejected

如果您想同時禁用 pushNonFFCurrentpushNonFFMatchingpushAlreadyExistspushFetchFirstpushNeedsForcepushRefNeedsUpdate,請將此變量設置為 false

rebaseTodoError

當編輯變基待辦事項列表後出現錯誤時顯示。

refSyntax

當用戶提供非法的引用名稱時顯示,以告訴用戶有關引用語法文檔的資訊。

resetNoRefresh

git-reset[1] 在重置後刷新索引需要超過 2 秒時顯示,以告訴用戶他們可以使用 --no-refresh 選項。

resolveConflict

當衝突阻止執行操作時,由各種命令顯示。

rmHints

git-rm[1] 輸出失敗時顯示,以提供如何從當前狀態繼續的說明。

sequencerInUse

當序列器命令已在進行中時顯示。

skippedCherryPicks

git-rebase[1] 跳過已揀選到上游分支的提交時顯示。

sparseIndexExpanded

當稀疏索引擴展為完整索引時顯示,這很可能是由於在稀疏檢出之外存在意外的文件集。

statusAheadBehind

git-status[1] 計算本地引用與其遠端跟蹤引用相比的領先/落後計數時,且該計算耗時超過預期時顯示。如果 status.aheadBehind 為 false 或給定了選項 --no-ahead-behind,則不會出現。

statusHints

git-status[1] 的輸出中、在 git-commit[1] 中編寫提交訊息時顯示的模板中,以及在 git-switch[1]git-checkout[1] 切換分支時顯示的幫助訊息中,顯示如何從當前狀態繼續的說明。

statusUoption

git-status[1] 枚舉未跟蹤文件需要超過 2 秒時顯示,以告訴用戶他們可以使用 -u 選項。

submoduleAlternateErrorStrategyDie

當配置為 "die" 的 submodule.alternateErrorStrategy 選項導致致命錯誤時顯示。

submoduleMergeConflict

當遇到非顯而易見的子模組合併衝突時顯示的建議。

submodulesNotUpdated

當用戶運行子模組命令而失敗(因為未運行 git submodule update --init)時顯示。

suggestDetachingHead

git-switch[1] 拒絕在沒有明確 --detach 選項的情況下分離 HEAD 時顯示。

updateSparsePath

當要求 git-add[1]git-rm[1] 更新當前稀疏檢出之外的索引條目時顯示。

waitingForEditor

當 Git 正在等待編輯器輸入時顯示。當編輯器未在終端內啟動時非常相關。

worktreeAddOrphan

當使用者嘗試從無效的引用(reference)建立工作樹(worktree)時顯示,用以告知使用者如何改為建立一個新的未出生分支(unborn branch)。

alias.*
alias.*.command

git[1] 命令封裝程式的命令別名。別名可以使用兩種語法定義:

  1. 不帶子區段,例如:[alias] co = checkout。別名名稱(此例中的 "co")僅限使用 ASCII 字母數字字元與 -,且匹配時不區分大小寫。

  2. 帶有子區段,例如:[alias "co"] command = checkout。別名名稱可包含任何字元(換行符與 NUL 位元組除外),包括 UTF-8,且匹配時作為原始位元組並區分大小寫。您可以在 command 中定義該別名的動作。

範例

# Without subsection (ASCII alphanumeric and dash only)
[alias]
    co = checkout
    st = status

# With subsection (allows any characters, including UTF-8)
[alias "hämta"]
    command = fetch
[alias "rätta till"]
    command = commit --amend

定義 Git 別名後,例如:

$ git config --global alias.last "cat-file commit HEAD"
# Which is equivalent to
$ git config --global alias.last.command "cat-file commit HEAD"

git last 等同於 git cat-file commit HEAD

為了避免指令碼使用上的混淆與麻煩,除了已棄用的命令外,隱藏既有 Git 命令的別名將會被忽略。參數以空格分隔,支援一般的 Shell 引號與跳脫字元。可以使用一對引號或反斜線來引述它們。

請注意,別名的第一個單字不一定是命令。它可以是一個會傳遞給 git 呼叫的命令列選項。特別是,這在搭配 -c 傳遞一次性設定,或使用 -p 強制分頁時非常有用。例如,可以定義 loud-rebase = -c commit.verbose=true rebase,這樣執行 git loud-rebase 就等同於執行 git -c commit.verbose=true rebase。此外,ps = -p status 會是一個很有用的別名,因為 git ps 會對 git status 的輸出進行分頁,而原始命令則不會。

如果別名展開以驚嘆號開頭,它將被視為 Shell 命令。例如,定義 alias.new = !gitk --all --not ORIG_HEAD,呼叫 git new 就等同於執行 Shell 命令 gitk --all --not ORIG_HEAD。注意:

  • Shell 命令將會從儲存庫的頂層目錄執行,這不一定是當前目錄。

  • GIT_PREFIX 設定為從原始當前目錄執行 git rev-parse --show-prefix 的回傳值。參見 git-rev-parse[1]

  • Shell 命令別名會自動接收提供給 Git 命令列的任何額外參數,作為位置參數。

    • 如果您的 Shell 別名是一個包含多個命令的「單行」指令碼(例如在管線中)、引用多個參數,或者無法處理新增在結尾的位置參數,則需要特別小心。例如:alias.cmd = "!echo $1 | grep $2" 若以 git cmd 1 2 呼叫,將會執行為 echo $1 | grep $2 1 2,這不是您想要的結果。

    • 處理此問題的一個簡便方法是將您的指令碼操作寫在一個內嵌函式中,然後用命令列提供的任何參數來呼叫它。例如 alias.cmd = "!c() { echo $1 | grep $2 ; }; c" 將會正確執行前述的例子。

    • 設定 GIT_TRACE=1 可以協助您對別名所執行的命令進行除錯。

am.keepcr

如果設為 true,git-am[1] 在處理 mbox 格式的修補檔時,會帶上參數 --keep-cr 呼叫 git-mailsplit[1]。在此情況下,git-mailsplit[1] 不會移除以 \r\n 結尾的行中的 \r。此設定可透過命令列給予 --no-keep-cr 來覆寫。

am.threeWay

預設情況下,如果修補檔無法乾淨地套用,git-am[1] 將會失敗。當設為 true 時,此設定會告知 git-am[1] 在修補檔記錄了它預計要套用的 blob 識別碼,且我們在本地端擁有這些 blob 時,改用三路合併(3-way merge,等同於在命令列給予 --3way 選項)。預設值為 false

am.messageId

使用 git-am[1] 時,根據電子郵件標頭將 Message-ID 尾註(trailer)新增至提交中(參見 git-interpret-trailers[1])。亦請參見 --message-id--no-message-id 選項。

apply.ignoreWhitespace

當設為 change 時,告知 git apply 忽略空白字元變更,方式與 --ignore-space-change 選項相同。當設為 no、none、never 或 false 其中之一時,告知 git apply 考慮所有空白字元差異。參見 git-apply[1]

apply.whitespace

告知 git apply 如何處理空白字元,方式與 --whitespace 選項相同。參見 git-apply[1]

attr.tree

儲存庫中用以讀取屬性的樹狀物件(tree)引用,而非工作樹中的 .gitattributes 檔案。如果該值無法解析為有效的樹狀物件,則改為使用空樹。當使用 GIT_ATTR_SOURCE 環境變數或 --attr-source 命令列選項時,此設定變數無效。

注意
bitmapPseudoMerge.* 中的設定選項被視為實驗性功能,未來可能會有所變更或完全移除。關於偽合併點陣圖(pseudo-merge bitmap)功能的詳細資訊,請參見 gitpacking[7] 的「Pseudo-merge bitmaps」章節。
bitmapPseudoMerge.<name>.pattern

用於匹配引用名稱的正規表示式。符合此模式的引用所指向的提交(且滿足以下條件,例如 bitmapPseudoMerge.<name>.sampleRatebitmapPseudoMerge.<name>.threshold),將被考慮納入偽合併點陣圖中。

提交會根據指向該提交的引用是否匹配該模式(一個擴充正規表示式)而被分組到偽合併群組中。

在偽合併群組內,提交可能會根據模式中的擷取群組(capture groups)進一步分組為子群組。這些子群組是透過串接正規表示式中的任何擷取群組,並在中間加上 - 破折號所形成的。

例如,如果模式為 refs/tags/,則所有標籤(前提是滿足以下條件)都將被視為相同偽合併群組的候選者。然而,如果模式為 refs/remotes/([0-9])+/tags/,則來自不同遠端(remote)的標籤將會根據遠端編號被分組到不同的偽合併群組中。

bitmapPseudoMerge.<name>.decay

決定連續的偽合併點陣圖群組大小遞減的速率。必須為非負數。此參數可被視為函數 f(n) = C * n^-k 中的 k,其中 f(n) 是第 n 個群組的大小。

將衰減率設為 0 會使所有群組大小相同。將衰減率設為 1 會使 nth group to be 1/n 初始群組的大小。較高的衰減率會導致連續的群組以遞增的速率縮小。預設值為 1

如果所有群組大小相同,包含較新提交的群組可能比早期群組被使用的機率更低,因為指向較新提交的引用被更新的頻率通常高於指向舊提交的引用。

bitmapPseudoMerge.<name>.sampleRate

決定非點陣圖提交(在引用提示中)中被選中納入不穩定偽合併點陣圖的比例。必須介於 01 之間(含)。預設值為 1

bitmapPseudoMerge.<name>.threshold

決定非點陣圖提交(在引用提示中,如上所述)作為不穩定偽合併點陣圖候選者的最小年齡。預設值為 1.week.ago

bitmapPseudoMerge.<name>.maxMerges

決定提交可分佈其中的偽合併提交之最大數量。

對於模式不包含任何擷取群組的偽合併群組,此設定適用於所有符合正規表示式的提交。對於具有一個或多個擷取群組的模式,此設定適用於每個不同的擷取群組。

例如,如果您的擷取群組是 refs/tags/,則此設定會將所有標籤分佈到最多 maxMerges 個偽合併提交中。然而,如果您的擷取群組是例如 refs/remotes/([0-9]+)/tags/,則此設定將個別應用於每個遠端的標籤集合。

必須為非負數。預設值為 64。

bitmapPseudoMerge.<name>.stableThreshold

決定提交(在引用提示中,如上所述,但穩定提交即使已被點陣圖涵蓋仍被視為候選者)作為穩定偽合併點陣圖候選者的最小年齡。預設值為 1.month.ago

將此閾值設為較小的值(例如 1.week.ago)會導致產生更多穩定群組(這會產生一次性生成成本),但這些群組隨時間推移可能會變舊。使用較大的值則會產生相反的缺點(較少的穩定群組,但更具實用性)。

bitmapPseudoMerge.<name>.stableSize

決定穩定偽合併點陣圖的大小(以提交數量計)。預設值為 512

blame.blankBoundary

git-blame[1] 中顯示邊界提交的空白提交物件名稱。此選項預設為 false。

blame.coloring

決定套用於 blame 輸出的著色方案。可以是 repeatedLineshighlightRecent 或預設的 none

blame.date

指定 git-blame[1] 中日期輸出的格式。若未設定,則使用 iso 格式。關於支援的值,請參閱 git-log[1] 中關於 --date 選項的討論。

blame.showEmail

git-blame[1] 中顯示作者電子郵件而非作者名稱。此選項預設為 false。

blame.showRoot

不要將根提交(root commits)視為 git-blame[1] 中的邊界。此選項預設為 false。

blame.ignoreRevsFile

忽略檔案中列出的修訂版本(每行一個完整的物件名稱),用於 git-blame[1]。空白字元與以 # 開頭的註解將被忽略。此選項可重複使用多次。空檔名將重設被忽略修訂版本的清單。此選項的處理優先於命令列選項 --ignore-revs-file

blame.markUnblamableLines

git-blame[1] 的輸出中,將無法歸因於另一個提交的被忽略修訂版本所變更的行標記為 *

blame.markIgnoredLines

git-blame[1] 的輸出中,將歸因於另一個提交的被忽略修訂版本所變更的行標記為 ?

branch.autoSetupMerge

告知 git branchgit switchgit checkout 設定新分支,以便 git-pull[1] 能正確地從起始點分支合併。請注意,即使未設定此選項,亦可透過 --track--no-track 選項對每個分支選擇此行為。此選項預設為 true。有效設定如下:

false

不進行自動設定

true

當起始點為遠端追蹤分支(remote-tracking branch)時進行自動設定

always

當起始點為本地分支或遠端追蹤分支時進行自動設定

inherit

如果起始點具有追蹤設定,則將其複製到新分支

simple

僅在起始點為遠端追蹤分支,且新分支與遠端分支同名時進行自動設定。

branch.autoSetupRebase

當使用 git branchgit switchgit checkout 建立追蹤其他分支的新分支時,此變數告知 Git 將拉取(pull)設定為變基(rebase)而非合併(見 branch.<name>.rebase)。有效設定如下:

never

變基不會自動設為 true。

local

對於追蹤其他本地分支的分支,變基設為 true。

remote

對於追蹤遠端追蹤分支的分支,變基設為 true。

always

對於所有追蹤分支,變基都將設為 true。

關於如何設定分支以追蹤另一個分支的詳細資訊,請參見 branch.autoSetupMerge。此選項預設為 never

branch.sort

此變數控制 git-branch[1] 顯示分支時的排序順序。在未提供 --sort=<value> 選項時,此變數的值將被用作預設值。請參見 git-for-each-ref[1] 的欄位名稱以取得有效值。

branch.<name>.remote

當位於分支 <name> 時,告知 git fetchgit push 要從哪個遠端獲取或推送到哪個遠端。推送到的遠端可透過 remote.pushDefault(針對所有分支)來覆寫。目前分支推送到的遠端,可進一步透過 branch.<name>.pushRemote 覆寫。如果沒有設定遠端,或者若您不在任何分支上,且儲存庫中定義了多個遠端,則獲取的預設值為 origin,推送的預設值為 remote.pushDefault。此外,.(句點)代表當前本地儲存庫(點儲存庫),請參見下方 branch.<name>.merge 的最後說明。

branch.<name>.pushRemote

當位於分支 <name> 時,它會覆寫 branch.<name>.remote 以進行推送。它同時也會覆寫從分支 <name> 推送時的 remote.pushDefault。當您從一個地方拉取(例如您的上游)並推送到另一個地方(例如您自己的發佈儲存庫)時,您會希望設定 remote.pushDefault 來指定所有分支的推送遠端,並使用此選項針對特定分支進行覆寫。

branch.<name>.merge

branch.<name>.remote 一同定義給定分支的上游分支。它告知 git fetch/git pull/git rebase 要合併哪個分支,也可能影響 git push(參見 push.default)。位於分支 <name> 時,它告知 git fetch 預設的引用規格(refspec)要標記為在 FETCH_HEAD 中合併。該值的處理方式類似於引用規格的遠端部分,且必須符合從 branch.<name>.remote 所給定遠端獲取的引用。合併資訊由 git pull(會先呼叫 git fetch)使用,以查詢預設合併分支。若無此選項,git pull 預設會合併獲取到的第一個引用規格。指定多個值可進行章魚合併(octopus merge)。如果您希望設定 git pull,使其合併至本地儲存庫中另一個分支至 <name>,您可以將 branch.<name>.merge 指向該分支,並對 branch.<name>.remote 使用相對路徑設定 .(句點)。

branch.<name>.mergeOptions

設定合併至分支 <name> 的預設選項。語法與支援的選項與 git-merge[1] 相同,但目前不支援包含空白字元的選項值。

branch.<name>.rebase

當設為 true 時,在執行 git pull 時,會將分支 <name> 變基於獲取的分支之上,而非合併預設遠端的預設分支。請參見 pull.rebase 以進行非分支特定的設定。

當設為 merges(或僅 m)時,將 --rebase-merges 選項傳遞給 git rebase,以便本地合併提交被包含在變基中(詳情請參見 git-rebase[1])。

當值為 interactive(或僅 i)時,變基將以互動模式執行。

注意:這可能是一個危險的操作;除非您理解其影響,否則請使用(詳情請參見 git-rebase[1])。

branch.<name>.description

分支描述,可使用 git branch --edit-description 編輯。分支描述會自動新增至 format-patch 的封面信(cover letter)或 request-pull 的摘要中。

browser.<tool>.cmd

指定呼叫該瀏覽器的命令。指定的命令會在 Shell 中執行,並將 URL 作為參數傳遞。(參見 git-web--browse[1]。)

browser.<tool>.path

覆寫給定工具的路徑,該工具可用於瀏覽 HTML 說明(參見 git-help[1] 中的 -w 選項)或 gitweb 中的工作儲存庫(參見 git-instaweb[1])。

bundle.*

bundle.* 鍵可能出現在透過 git clone --bundle-uri 選項找到的「套件清單檔案」中。如果將這些鍵放在儲存庫的設定檔中,目前不會產生任何效果,但未來可能會有所變更。請參見 套件 URI 設計文件 以取得更多詳細資訊。

bundle.version

此整數值宣告了套件清單所使用的格式版本。目前唯一接受的值為 1

bundle.mode

此字串值應為 allany。此值描述是否需要所有宣告的套件來解開(unbundle)對套件資訊的完整理解(all),或者清單中任何一個套件 URI 即已足夠(any)。

bundle.heuristic

如果存在此字串值鍵,則套件清單被設計為能與增量 git fetch 命令良好運作。該啟發法標示出每個套件都有額外的鍵可用,有助於確定客戶端應下載哪一部分的套件。目前唯一能理解的值為 creationToken

bundle.<id>.*

bundle.<id>.* 鍵用於描述套件清單中的單一項目,分組在 <id> 下以便識別。

bundle.<id>.uri

此字串值定義了 Git 可存取此 <id> 內容的 URI。此 URI 可以是套件檔案或另一個套件清單。

checkout.defaultRemote

當您執行 git checkout <something>git switch <something> 且只有一個遠端時,它可能會隱含地回退到檢出並追蹤例如 origin/<something>。一旦您有多個具有 <something> 參照的遠端,這將不再起作用。此設定允許設定一個偏好的遠端名稱,在消除歧義時應始終勝出。典型的使用案例是將其設定為 origin

目前 git-switch[1]git-checkout[1] 會在執行 git checkout <something>git switch <something> 將檢出另一個遠端上的 <something> 分支時使用此設定;而 git-worktree[1] 會在 git worktree add 參照遠端分支時使用它。此設定未來可能會用於其他類似檢出的指令或功能。

checkout.guess

git checkoutgit switch 中的 --guess--no-guess 選項提供預設值。請參閱 git-switch[1]git-checkout[1]

checkout.workers

更新工作區時使用的平行工作執行緒數量。預設值為 1,即循序執行。如果設定為小於 1 的值,Git 將使用與可用邏輯核心數量相同的工作執行緒。此設定和 checkout.thresholdForParallelism 會影響所有執行檢出的指令。例如:checkout、clone、reset、sparse-checkout 等。

注意
平行檢出通常能為位於 SSD 或透過 NFS 存取的儲存庫提供更好的效能。對於位於傳統硬碟和/或核心數量較少的機器上的儲存庫,預設的循序檢出通常表現更好。儲存庫的大小和壓縮程度也可能影響平行版本的表現。
checkout.thresholdForParallelism

當執行檔案數量較少的平行檢出時,產生子程序和程序間通訊的成本可能會抵消平行化帶來的收益。此設定允許您定義嘗試平行檢出的最小檔案數量。預設值為 100。

clean.requireForce

一個布林值,使 git-clean 在未給予 -f 選項時拒絕刪除檔案。預設值為 true。

clone.defaultRemoteName

複製儲存庫時要建立的遠端名稱。預設值為 origin。可透過向 git-clone[1] 傳遞 --origin 命令列選項來覆寫。

clone.rejectShallow

如果儲存庫是淺層(shallow)儲存庫,則拒絕複製;此選項可透過在命令列傳遞 --reject-shallow 選項來覆寫。參見 git-clone[1]

clone.filterSubmodules

如果提供了部分複製篩選器(參見 git-rev-list[1] 中的 --filter),並且使用了 --recurse-submodules,則該篩選器也將應用於子模組(submodules)。

color.advice

一個布林值,用於啟用/停用提示(hints)中的顏色(例如當 push 失敗時,參見 advice.* 清單)。可設為 alwaysfalse(或 never)或 auto(或 true),此時顏色僅在錯誤輸出到終端時使用。若未設定,則使用 color.ui 的值(預設為 auto)。

color.advice.hint

為提示使用自訂顏色。

color.blame.highlightRecent

指定 git blame --color-by-age 的行註解顏色,該顏色取決於該行的產生時間(age)。

此設定應設為以逗號分隔的顏色與日期設定清單,以顏色開始並以顏色結束,日期應從最舊到最新設定。如果該行是在給定的時間戳記之前引入的,中繼資料將會以指定的顏色著色,並覆寫較舊時間戳記的顏色。

除了絕對時間戳記外,相對時間戳記也可運作,例如 2.weeks.ago 可用於處理任何超過 2 週之前的內容。

其預設值為 blue,12 month ago,white,1 month ago,red,這會將超過一年的內容標記為藍色,一到十二個月之間的近期變更保持白色,而最近一個月內引入的行則標記為紅色。

color.blame.repeatedLines

如果行註解來源於與上一行相同的提交,則為 git blame --color-lines 使用指定的顏色。預設為青色(cyan)。

color.branch

一個布林值,用於啟用/停用 git-branch[1] 輸出中的顏色。可設為 alwaysfalse(或 never)或 auto(或 true),此時顏色僅在輸出到終端時使用。若未設定,則使用 color.ui 的值(預設為 auto)。

color.branch.<slot>

為分支著色使用自訂顏色。<slot>current(當前分支)、local(本地分支)、remote(refs/remotes/ 下的遠端追蹤分支)、upstream(上游追蹤分支)、plain(其他引用)其中之一。

color.diff

是否使用 ANSI 跳脫序列為修補檔著色。如果設為 always,則 git-diff[1]git-log[1]git-show[1] 將對所有修補檔使用顏色。如果設為 trueauto,這些命令僅在輸出到終端時使用顏色。若未設定,則使用 color.ui 的值(預設為 auto)。

這不影響 git-format-patch[1]git-diff-* 低階命令。可透過命令列的 --color[=<when>] 選項覆寫。

color.diff.<slot>

為 Diff 著色使用自訂顏色。<slot> 指定修補檔中使用指定顏色的部分,可以是 context(上下文文字 - plain 為歷史同義詞)、meta(中繼資訊)、frag(區塊標頭)、func(區塊標頭中的函式)、old(已移除的行)、new(新增的行)、commit(提交標頭)、whitespace(標亮空白字元錯誤)、oldMoved(已刪除的行)、newMoved(新增的行)、oldMovedDimmedoldMovedAlternativeoldMovedAlternativeDimmednewMovedDimmednewMovedAlternativenewMovedAlternativeDimmed(詳情參見 git-diff[1]--color-moved<mode> 設定)、contextDimmedoldDimmednewDimmedcontextBoldoldBoldnewBold(詳情參見 git-range-diff[1])。

color.decorate.<slot>

git log --decorate 輸出使用自訂顏色。<slot> 對於本地分支、遠端追蹤分支、標籤、儲存(stash)與 HEAD,分別是 branchremoteBranchtagstashHEAD,而對於已合併(grafted)的提交,則為 grafted

color.grep

當設為 always 時,總是標亮匹配項。當設為 false(或 never)時,從不標亮。當設為 trueauto 時,僅在輸出寫入終端時使用顏色。若未設定,則使用 color.ui 的值(預設為 auto)。

color.grep.<slot>

為 grep 著色使用自訂顏色。<slot> 指定該行中使用指定顏色的部分,是下列之一:

context

上下文行中不匹配的文字(使用 -A-B-C 時)

filename

檔名前綴(未使用 -h 時)

function

函式名稱行(使用 -p 時)

lineNumber

行號前綴(使用 -n 時)

column

欄號前綴(使用 --column 時)

match

匹配的文字(與分別設定 matchContextmatchSelected 相同)

matchContext

上下文行中匹配的文字

matchSelected

所選行中匹配的文字。此外,也用於自訂以下 git-log[1] 子命令:--grep--author--committer

selected

所選行中不匹配的文字。此外,也用於自訂以下 git-log[1] 子命令:--grep--author--committer

separator

行中欄位之間的分隔符(:-=)以及區塊之間的分隔符(--

color.interactive

當設為 always 時,總是對互動式提示與顯示使用顏色(例如 "git-add --interactive" 與 "git-clean --interactive" 使用的那些)。當設為 false(或 never)時,從不使用。當設為 trueauto 時,僅在輸出到終端時使用顏色。若未設定,則使用 color.ui 的值(預設為 auto)。

color.interactive.<slot>

git add --interactivegit clean --interactive 的輸出使用自訂顏色。<slot> 可以是 promptheaderhelperror,分別對應互動式命令輸出的四種不同類型的普通輸出。

color.pager

一個布林值,指定 auto 顏色模式是否應將輸出到分頁器(pager)的內容著色。預設為 true;如果您的分頁器無法識別 ANSI 顏色碼,請將其設為 false。

color.push

一個布林值,用於啟用/停用推送錯誤中的顏色。可設為 alwaysfalse(或 never)或 auto(或 true),此時顏色僅在錯誤輸出到終端時使用。若未設定,則使用 color.ui 的值(預設為 auto)。

color.push.error

為推送錯誤使用自訂顏色。

color.remote

如果設定,行首的關鍵字將會標亮。這些關鍵字為 "error"、"warning"、"hint" 與 "success",且匹配時不區分大小寫。可設為 alwaysfalse(或 never)或 auto(或 true)。若未設定,則使用 color.ui 的值(預設為 auto)。

color.remote.<slot>

為每個遠端關鍵字使用自訂顏色。<slot> 可以是 hintwarningsuccesserror,匹配對應的關鍵字。

color.showBranch

一個布林值,用於啟用/停用 git-show-branch[1] 輸出中的顏色。可設為 alwaysfalse(或 never)或 auto(或 true),此時顏色僅在輸出到終端時使用。若未設定,則使用 color.ui 的值(預設為 auto)。

color.status

一個布林值,用於啟用/停用 git-status[1] 輸出中的顏色。可設為 alwaysfalse(或 never)或 auto(或 true),此時顏色僅在輸出到終端時使用。若未設定,則使用 color.ui 的值(預設為 auto)。

color.status.<slot>

為狀態著色使用自訂顏色。<slot>header(狀態訊息的標頭文字)、addedupdated(已新增但未提交的檔案)、changed(已變更但未在索引中新增的檔案)、untracked(Git 未追蹤的檔案)、branch(當前分支)、nobranch(顯示「無分支」警告的顏色,預設為紅色)、localBranchremoteBranch(在狀態簡短格式中顯示分支與追蹤資訊時的本地與遠端分支名稱),或 unmerged(具有未合併變更的檔案)其中之一。

color.transport

一個布林值,用於啟用/停用推送被拒絕時的顏色。可設為 alwaysfalse(或 never)或 auto(或 true),此時顏色僅在錯誤輸出到終端時使用。若未設定,則使用 color.ui 的值(預設為 auto)。

color.transport.rejected

當推送被拒絕時使用自訂顏色。

color.ui

此變數決定諸如 color.diffcolor.grep 等控制每命令族顏色使用之變數的預設值。其範圍將隨著更多命令學習如何設定 --color 選項的預設值而擴大。如果您不希望 Git 命令使用顏色(除非透過其他設定或 --color 選項明確啟用),請將其設為 falsenever。如果您希望所有非供機器讀取的輸出都使用顏色,請設為 always;如果您希望此類輸出在寫入終端時使用顏色,請設為 trueauto(這是自 Git 1.8.4 以來的預設值)。

column.ui

指定支援的命令是否應以欄位(columns)輸出。此變數由空格或逗號分隔的代幣清單組成。

這些選項控制何時啟用該功能(預設為 never):

always

總是顯示為欄位

never

從不顯示為欄位

auto

若輸出到終端,則顯示為欄位

這些選項控制佈局(預設為 column)。若未指定 alwaysneverauto,設定其中任何選項即隱含 always

column

先填滿欄位,再填滿列

row

先填滿列,再填滿欄位

plain

以單一欄位顯示

最後,這些選項可與佈局選項結合使用(預設為 nodense):

dense

建立不等寬欄位以利用更多空間

nodense

建立等寬欄位

column.branch

指定 git branch 是否應以欄位輸出分支清單。詳情請參見 column.ui

column.clean

指定 git clean -i 中列出項目時的佈局,其總是以欄位顯示檔案與目錄。詳情請參見 column.ui

column.status

指定 git status 是否應以欄位輸出未追蹤檔案。詳情請參見 column.ui

column.tag

指定 git tag 是否應以欄位輸出標籤清單。詳情請參見 column.ui

commit.cleanup

此設定覆寫 git commit--cleanup 選項的預設值。詳情請參見 git-commit[1]。當您總是希望在提交訊息中保留以註解字元(core.commentChar,預設為 #)開頭的行時,變更預設值會很有用。在這種情況下,您會執行 git config commit.cleanup whitespace(請注意,如果您這麼做,您必須自行刪除提交訊息範本中以註解字元開頭的說明行)。

commit.gpgSign

一個布林值,指定是否應對所有提交進行 GPG 簽署。在執行諸如變基等操作時使用此選項,可能會導致大量提交被簽署。使用代理程式(agent)以避免多次輸入 GPG 通關密碼可能較為方便。

commit.status

一個布林值,用於啟用/停用在使用編輯器準備提交訊息時,將狀態資訊包含在提交訊息範本中。預設為 true

commit.template

指定用作新提交訊息範本的檔案路徑。

commit.verbose

一個布林值或整數,用於指定 git commit 的詳細程度。詳情請參見 git-commit[1]

commitGraph.generationVersion

指定寫入或讀取 commit-graph 檔案時要使用的生成編號(generation number)版本類型。如果指定版本 1,則不會寫入或讀取修正後的提交日期。預設為 2。

commitGraph.maxNewFilters

指定 git commit-graph write--max-new-filters 選項的預設值(參見 git-commit-graph[1])。

commitGraph.changedPaths

如果為 true,則 git commit-graph write 將預設計算並寫入已變更路徑(changed-path)的 Bloom 篩選器,等同於傳遞 --changed-paths。如果為 false 或未設定,則只有在目前 commit-graph 檔案中已存在篩選器時,才會在 git commit-graph write 期間寫入已變更路徑的 Bloom 篩選器。這符合未帶任何 --[no-]changed-paths 選項的 git commit-graph write 之預設行為。若要重寫不含任何篩選器的 commit-graph 檔案,請使用 --no-changed-paths 選項。命令列選項 --[no-]changed-paths 總是優先於此設定。預設為未設定。

commitGraph.readChangedPaths

已棄用。如果為 true,等同於 commitGraph.changedPathsVersion=-1;如果為 false,等同於 commitGraph.changedPathsVersion=0。(如果同時設定了 commitGraph.changedPathVersion,則 commitGraph.changedPathsVersion 優先。)

commitGraph.changedPathsVersion

指定 Git 將讀取與寫入的已變更路徑 Bloom 篩選器版本。可以是 -1、0、1 或 2。請注意,大於 1 的值可能與尚未識別這些版本的舊版 Git 不相容。在混合版本環境中操作時請小心。

預設為 -1。

如果為 -1,Git 將使用儲存庫中已變更路徑 Bloom 篩選器的版本,若沒有則預設為 1。

如果為 0,Git 將不會讀取任何 Bloom 篩選器,並在指示寫入時寫入版本 1 的 Bloom 篩選器。

如果為 1,Git 將僅讀取版本 1 的 Bloom 篩選器,並寫入版本 1 的 Bloom 篩選器。

如果為 2,Git 將僅讀取版本 2 的 Bloom 篩選器,並寫入版本 2 的 Bloom 篩選器。

更多資訊請參見 git-commit-graph[1]

completion.commands

此選項僅由 git-completion.bash 使用,以從已完成命令清單中新增或移除命令。通常只會完成 porcelain 命令與少數其他選定命令。您可以在此變數中新增更多命令,並以空格分隔。在命令前加上 - 將會將其從既有清單中移除。

core.fileMode

告知 Git 是否應遵守工作樹中檔案的執行位元(executable bit)。

某些檔案系統在檢出(checkout)被標記為可執行檔的檔案時會遺失執行位元,或者檢出帶有執行位元的非執行檔。 git-clone[1]git-init[1] 會探測檔案系統以查看其是否正確處理執行位元,此變數會依需要自動設定。

然而,儲存庫可能位於正確處理檔案模式(filemode)的檔案系統上,該變數在建立時被設為 true,但後來可能被另一個遺失檔案模式的環境存取(例如透過 CIFS 掛載匯出 ext4,使用 Git for Windows 或 Eclipse 存取 Cygwin 建立的儲存庫)。在這種情況下,可能有必要將此變數設為 false。參見 git-update-index[1]

預設值為 true(當設定檔中未指定 core.filemode 時)。

core.hideDotFiles

(僅 Windows)如果為 true,將名稱以點開頭的新建立目錄與檔案標記為隱藏。如果設為 dotGitOnly,則僅隱藏 .git/ 目錄,而不隱藏其他以點開頭的檔案。預設模式為 dotGitOnly

core.ignoreCase

內建變數,啟用各種變通方法,使 Git 能在不區分大小寫的檔案系統(如 APFS、HFS+、FAT、NTFS 等)上運作得更好。例如,如果目錄清單在 Git 預期 "Makefile" 時找到了 "makefile",Git 會假設它們其實是同一個檔案,並繼續將其記為 "Makefile"。

預設值為 false,但 git-clone[1]git-init[1] 在建立儲存庫時會適當地探測並將 core.ignoreCase 設為 true。

Git 依賴此變數的正確設定來適應您的作業系統與檔案系統。修改此值可能會導致意外行為。

core.precomposeUnicode

此選項僅由 Mac OS 版 Git 使用。當 core.precomposeUnicode=true 時,Git 會還原 Mac OS 對檔名進行的 Unicode 分解(decomposition)。這在 Mac OS 與 Linux 或 Windows 之間共享儲存庫時非常有用。(需要 Git for Windows 1.7.10 或更高版本,或 cygwin 1.7 下的 Git)。當設為 false 時,檔名由 Git 完全透明地處理,這與舊版 Git 向後相容。

core.protectHFS

如果設為 true,則不允許檢出在 HFS+ 檔案系統上會被視為等同於 .git 的路徑。在 Mac OS 上預設為 true,其他平台上為 false

core.protectNTFS

如果設為 true,則不允許檢出會導致 NTFS 檔案系統問題的路徑,例如與 8.3「短」名稱衝突。在 Windows 上預設為 true,其他平台上為 false

core.fsmonitor

如果設為 true,則為此工作目錄啟用內建檔案系統監視器守護程式(git-fsmonitor--daemon[1])。

與基於 Hook 的檔案系統監視器一樣,內建檔案系統監視器可以加快在檔案眾多的工作目錄中需要重新整理 Git 索引的 Git 命令(例如 git status)。內建監視器消除了安裝與維護外部第三方工具的需求。

內建檔案系統監視器目前僅在有限的支援平台上可用。目前包括 Windows 與 MacOS。

否則,此變數包含 "fsmonitor" Hook 命令的路徑。

此 Hook 命令用於識別自請求日期/時間以來可能已變更的所有檔案。此資訊用於透過避免不必要地掃描未變更的檔案來加快 git 速度。

請參見 githooks[5] 的「fsmonitor-watchman」章節。

請注意,如果您同時使用多個 Git 版本(例如命令列使用一個版本,IDE 工具中使用另一個版本),core.fsmonitor 的定義已擴充為允許布林值(除了 Hook 路徑名稱外)。Git 2.35.1 及更早版本將無法理解布林值,並會將 "true" 或 "false" 值視為要呼叫的 Hook 路徑。Git 2.26 到 2.35.1 版本預設為 Hook 協定 V2,並會退回到無 fsmonitor(完整掃描)。2.26 之前的 Git 版本預設為 Hook 協定 V1,並會靜默假定沒有變更需要報告(無掃描),因此狀態命令可能會報告不完整的結果。因此,在使用內建檔案系統監視器之前,最好升級您所有的 Git 版本。

core.fsmonitorHookVersion

設定呼叫 "fsmonitor" Hook 時要使用的協定版本。

目前有版本 1 與 2。若未設定,則會先嘗試版本 2,若失敗則嘗試版本 1。版本 1 使用時間戳記作為輸入來確定自該時間以來哪些檔案有變更,但某些監視器(如 Watchman)在與時間戳記一起使用時存在競爭條件(race condition)。版本 2 使用不透明字串,以便監視器能返回可用於確定哪些檔案已變更的資訊,而不會有競爭條件。

core.trustctime

如果為 false,則會忽略索引與工作樹之間的 ctime 差異;當 inode 變更時間經常被 Git 外部的某個程式(檔案系統爬蟲與某些備份系統)修改時,這很有用。參見 git-update-index[1]。預設為 true。

core.splitIndex

如果為 true,將使用索引的 split-index 功能。參見 git-update-index[1]。預設為 false。

core.untrackedCache

決定如何處理索引的「未追蹤快取」(untracked cache)功能。若此變數未設定或設為 keep,它將被保留。若設為 true,它將自動新增;若設為 false,它將自動移除。在將其設為 true 之前,您應檢查 mtime 在您的系統上是否運作正常。參見 git-update-index[1]。除非啟用了會將此設定預設為 truefeature.manyFiles,否則預設為 keep

core.checkStat

當遺失或設為 default 時,會檢查 stat 結構中的許多欄位以偵測檔案自 Git 查看後是否已修改。當此設定變數設為 minimal 時,mtime 與 ctime 的次秒部分、檔案所有者的 uid 與 gid、inode 編號(以及裝置編號,若 Git 編譯時使用了它),將從檢查中排除,只剩下 mtime(與 ctime,如果設定了 core.trustCtime)的整秒部分與檔案大小會被檢查。

有些 Git 實作不會在某些欄位中留下可用值(例如 JGit);透過從比較中排除這些欄位,當同一個儲存庫被這些其他系統同時使用時,minimal 模式可能有助於互通性。

core.quotePath

輸出路徑的命令(例如 ls-filesdiff)將透過將路徑名用雙引號括起來,並以 C 語言跳脫控制字元(例如 TAB 為 \t、LF 為 \n、反斜線為 \\)或值大於 0x80 的位元組(例如 UTF-8 中 "micro" 的八進位 \302\265)的方式,對路徑名中的「異常」字元進行引述。如果此變數設為 false,則大於 0x80 的位元組不再被視為「異常」。雙引號、反斜線與控制字元無論此變數設定如何總是會被跳脫。單一空格字元不被視為「異常」。許多命令可以使用 -z 選項完整地以原樣輸出路徑名。預設值為 true。

core.eol

為被標記為文字的檔案(透過設定 text 屬性,或具有 text=auto 且 Git 自動偵測內容為文字)設定工作目錄中使用的行尾類型。替代方案為 lfcrlfnative(使用平台原生的行尾)。預設值為 native。關於行尾轉換的更多資訊,請參見 gitattributes[5]。請注意,如果 core.autocrlf 設為 trueinput,則此值會被忽略。

core.safecrlf

如果為 true,則使 Git 在行尾轉換啟用時,檢查轉換 CRLF 是否可逆。Git 將驗證命令是否直接或間接修改了工作樹中的檔案。例如,提交一個檔案後隨即檢出該檔案,應在工作樹中產生原始檔案。如果當前的 core.autocrlf 設定並非如此,Git 將拒絕該檔案。該變數可設為 "warn",此時 Git 僅會警告不可逆的轉換,但會繼續操作。

CRLF 轉換有輕微損壞資料的風險。啟用後,Git 會在提交時將 CRLF 轉換為 LF,並在檢出時將 LF 轉換為 CRLF。提交前包含 LF 與 CRLF 混合的檔案,無法由 Git 重現。對於文字檔,這是正確的做法:它修正行尾,使儲存庫中僅有 LF 行尾。但對於被意外歸類為文字的二進位檔案,轉換可能會損壞資料。

如果您及早識別出此類損壞,可以透過在 .gitattributes 中明確設定轉換類型來輕鬆修正它。提交後,您的工作樹中仍有原始檔案,且該檔案尚未損壞。您可以明確告知 Git 該檔案是二進位檔案,Git 將會適當地處理它。

不幸的是,清理混合行尾文字檔的期望效果,與損壞二進位檔案的不良副作用無法區分。在這兩種情況下,CRLF 都是以不可逆的方式移除的。對於文字檔,這是正確做法,因為 CRLF 是行尾;而對於二進位檔案,轉換 CRLF 會損壞資料。

注意,此安全檢查並不意味著檢出操作會為不同的 core.eolcore.autocrlf 設定產生與原始檔案完全相同的檔案,僅適用於當前的設定。例如,具有 LF 的文字檔在 core.eol=lf 時會被接受,之後可以用 core.eol=crlf 檢出,此時產生的檔案將包含 CRLF,儘管原始檔案包含 LF。然而,在兩個工作樹中行尾將是一致的,即全部為 LF 或全部為 CRLF,絕不會混用。具有混合行尾的檔案將由 core.safecrlf 機制報告。

core.autocrlf

將此變數設為 "true" 等同於將所有檔案的 text 屬性設為 "auto",並將 core.eol 設為 "crlf"。如果您希望在工作目錄中有 CRLF 行尾,且儲存庫中有 LF 行尾,請設為 true。此變數可設為 input,此時不執行輸出轉換。

core.checkRoundtripEncoding

Git 執行 UTF-8 往返檢查(round trip checks)時所使用的編碼列表(以逗號和/或空白字元分隔),若這些編碼用於 working-tree-encoding 屬性(請參閱 gitattributes[5])。預設值為 SHIFT-JIS

若設為 false,符號連結(symbolic links)將被檢出為包含連結文字的小型純文字檔。git-update-index[1]git-add[1] 不會將其記錄的類型更改為一般檔案。這在不支援符號連結的檔案系統(如 FAT)上非常有用。

預設值為 true,除非 git-clone[1]git-init[1] 在建立儲存庫時進行偵測,若有必要則會將 core.symlinks 設為 false。

core.gitProxy

使用 Git 協定進行提取(fetch)時,用來替代直接連線到遠端伺服器所執行的「代理指令」(格式為 command host port)。如果該變數值格式為 "COMMAND for DOMAIN",則該指令僅適用於以指定網域字串結尾的主機名稱。此變數可設定多次,並依照給定順序進行比對;第一個符合的項目將被採用。

可透過 GIT_PROXY_COMMAND 環境變數覆蓋(該變數始終通用,且不具備特殊的 "for" 處理邏輯)。

特殊字串 none 可用作代理指令,表示針對特定網域模式不使用代理。這對於將防火牆內的伺服器排除在代理使用範圍之外,同時為外部網域預設使用通用代理非常有用。

core.sshCommand

若設定此變數,當 git fetchgit push 需要連線到遠端系統時,將使用指定的指令而非 ssh。該指令的形式與 GIT_SSH_COMMAND 環境變數相同,且當設定了該環境變數時會被覆蓋。

core.ignoreStat

若為 true,Git 將透過為那些在索引(index)和工作樹(working tree)中已完全更新的追蹤檔案設定「assume-unchanged」(假定未變更)位元,來避免使用 lstat() 呼叫以偵測檔案是否已變更。

當檔案在 Git 外部被修改時,使用者需要明確地暫存這些修改過的檔案(例如,請參閱 git-update-index[1] 中的「範例」章節)。通常情況下,Git 不會偵測到這些檔案的變更。

這在 lstat() 呼叫非常緩慢的系統(如 CIFS/Microsoft Windows)上非常有用。

預設為 False。

core.preferSymlinkRefs

使用符號連結(symbolic links)代替 HEAD 和其他符號參照(symbolic reference)檔案的預設 "symref" 格式。這有時是為了相容那些期望 HEAD 是符號連結的舊腳本所必需的。

此設定已過時,將在 Git 3.0 中移除。符號參照將一律寫入為文字形式的 symrefs。

core.alternateRefsCommand

當宣告來自替代儲存庫(alternate)的可用歷史紀錄提示(tips)時,使用 shell 執行指定的指令,而不是 git-for-each-ref[1]。第一個參數是替代儲存庫的絕對路徑。輸出必須包含每一行一個十六進位物件 ID(即由 git for-each-ref --format='%(objectname) 所產生的輸出)。

請注意,一般情況下您無法將 git for-each-ref 直接放入設定值中,因為它不接受儲存庫路徑作為參數(但您可以將上述指令包裹在 shell 腳本中)。

core.alternateRefsPrefixes

列出替代儲存庫中的參照時,僅列出以給定字首開頭的參照。字首的比對方式如同將其作為參數傳遞給 git-for-each-ref[1] 一樣。若要列出多個字首,請以空白分隔。如果設定了 core.alternateRefsCommand,則設定 core.alternateRefsPrefixes 無效。

core.bare

若為 true,則假定此儲存庫為「裸儲存庫」(bare),且與其關聯的沒有工作目錄。若屬此情況,許多需要工作目錄的指令將會被停用,例如 git-add[1]git-merge[1]

此設定由 git-clone[1]git-init[1] 在儲存庫建立時自動猜測。預設情況下,結尾為 "/.git" 的儲存庫被假定為非裸儲存庫(bare = false),而所有其他儲存庫則被假定為裸儲存庫(bare = true)。

core.worktree

設定工作樹(working tree)根目錄的路徑。如果設定了 GIT_COMMON_DIR 環境變數,core.worktree 將被忽略,不會用於確定工作樹的根目錄。此設定可由 GIT_WORK_TREE 環境變數和 --work-tree 命令列選項覆蓋。該值可以是絕對路徑,或是相對於 .git 目錄(由 --git-dir、GIT_DIR 指定,或自動發現)的路徑。如果指定了 --git-dir 或 GIT_DIR,但未指定 --work-tree、GIT_WORK_TREE 和 core.worktree,則當前工作目錄將被視為工作樹的頂層。

請注意,即使在目錄的 ".git" 子目錄中的設定檔中設定此變數,且其值與後者目錄不同(例如 "/path/to/.git/config" 的 core.worktree 設定為 "/different/path"),該變數仍會被採納,這很可能是配置錯誤。在 "/path/to" 目錄中執行 Git 指令仍會使用 "/different/path" 作為工作樹的根目錄,並可能導致混亂,除非您清楚自己在做什麼(例如,您正在建立相同索引的唯讀快照,其位置與儲存庫通常的工作樹不同)。

core.lockfilePid

若為 true,Git 將在鎖定檔案旁建立一個 PID 檔案。當鎖定獲取失敗且 PID 檔案存在時,Git 可以提供關於持有鎖定的行程的額外診斷資訊,包括它是否仍在執行。預設為 false

PID 檔案的命名方式是在 .lock 字尾前插入 ~pid。例如,若鎖定檔案為 index.lock,則 PID 檔案將為 index~pid.lock。該檔案包含一行格式為 pid <value> 的內容,後接一個換行符。

core.logAllRefUpdates

啟用 reflog。對參照 <ref> 的更新會被記錄到檔案 "$GIT_DIR/logs/<ref>" 中,僅在檔案存在時,透過附加新的和舊的 SHA-1、日期/時間以及更新原因來進行。如果此設定變數設為 true,則會為分支頭(即 refs/heads/ 下)、遠端參照(即 refs/remotes/ 下)、註解參照(即 refs/notes/ 下)以及符號參照 HEAD 自動建立缺失的 "$GIT_DIR/logs/<ref>" 檔案。如果設為 always,則會為 refs/ 下的任何參照自動建立缺失的 reflog。

此資訊可用於確定「2 天前」分支的頂端(tip)是哪個提交。

此值在關聯了工作目錄的儲存庫中預設為 true,在裸儲存庫中預設為 false。

core.repositoryFormatVersion

識別儲存庫格式和配置版本的內部變數。請參閱 gitrepository-layout[5]

core.sharedRepository

當設為 group(或 true)時,儲存庫可供群組中的多個使用者共用(確保所有檔案和物件均可由群組寫入)。當設為 all(或 worldeverybody)時,除了群組共用外,儲存庫還可供所有使用者讀取。當設為 umask(或 false)時,Git 將使用 umask(2) 報告的權限。當設為 0xxx0xxx 為八進位數字)時,儲存庫中的檔案將具有此模式值。0xxx 將覆蓋使用者的 umask 值(而其他選項僅覆蓋使用者 umask 值的請求部分)。範例:0660 將使儲存庫對擁有者和群組可讀/寫,但其他人無法存取(等同於 group,除非 umask 為例如 0022)。0640 是一個對群組可讀但對群組不可寫的儲存庫。請參閱 git-init[1]。預設為 False。

core.warnAmbiguousRefs

若為 true,若您傳遞的參照名稱具有歧義且可能符合儲存庫中的多個參照,Git 將會發出警告。預設為 true。

core.compression

-1 到 9 之間的整數,表示預設壓縮等級。-1 為 zlib 預設值。0 表示不壓縮,1..9 表示各種速度/大小權衡,9 為最慢。若已設定,此變數將作為其他壓縮變數(如 core.looseCompressionpack.compression)的預設值。

core.looseCompression

-1 到 9 之間的整數,表示未位於封裝檔(pack file)中的物件的壓縮等級。-1 為 zlib 預設值。0 表示不壓縮,1..9 表示各種速度/大小權衡,9 為最慢。若未設定,則預設為 core.compression。若該值也未設定,則預設為 1(最佳速度)。

core.packedGitWindowSize

單次對映(mapping)操作中對映至記憶體的封裝檔位元組數。較大的視窗大小可能允許您的系統更快速地處理少量大型封裝檔。較小的視窗大小會因增加對作業系統記憶體管理員的呼叫而對效能產生負面影響,但在存取大量大型封裝檔時可能會提高效能。

若編譯時設定了 NO_MMAP,則預設為 1 MiB,否則在 32 位元平台上預設為 32 MiB,在 64 位元平台上預設為 1 GiB。這對所有使用者/作業系統來說都是合理的。您可能不需要調整此值。

支援 kmg 的通用單位字尾。

core.packedGitLimit

同時從封裝檔對映至記憶體的最大位元組數。如果 Git 需要同時存取超過此位元組數才能完成操作,它將取消對映現有區域以回收行程內的虛擬位址空間。

在 32 位元平台上預設為 256 MiB,在 64 位元平台上預設為 32 TiB(實際上無限)。這對除最大型專案外的所有使用者/作業系統來說都是合理的。您可能不需要調整此值。

支援 kmg 的通用單位字尾。

core.deltaBaseCacheLimit

每個執行緒用於快取可能被多個增量物件(deltified objects)參考的基礎物件的最大位元組數。透過在快取中儲存完整的解壓縮基礎物件,Git 能夠避免多次拆包(unpacking)和解壓縮頻繁使用的基礎物件。

所有平台預設均為 96 MiB。這對除最大型專案外的所有使用者/作業系統來說都是合理的。您可能不需要調整此值。

支援 kmg 的通用單位字尾。

core.bigFileThreshold

被視為「大」檔案的尺寸,如下所述,這會改變許多 git 指令的行為,以及這類檔案在儲存庫中的儲存方式。預設值為 512 MiB。支援 kmg 的通用單位字尾。

超過設定限制的檔案將:

  • 以 deflate 壓縮儲存在封裝檔中,而不嘗試增量壓縮。

    預設限制主要是考慮到此使用情境。有了它,大多數專案的原始程式碼和其他文字檔案將被增量壓縮,但不會壓縮較大的二進位媒體檔案。

    儲存不帶增量壓縮的大型檔案可避免過度的記憶體使用,代價是稍微增加磁碟空間使用量。

  • 將被視為已標記為 "binary"(請參閱 gitattributes[5])。例如,git-log[1]git-diff[1] 將不會為超過此限制的檔案計算 diff。

  • 通常會在寫入時進行串流傳輸,這避免了過度的記憶體使用,代價是產生一些固定的開銷。使用此功能的指令包括 git-archive[1]git-fast-import[1]git-index-pack[1]git-unpack-objects[1]git-fsck[1]

core.excludesFile

除了 .gitignore(每個目錄)和 .git/info/exclude 之外,指定包含路徑模式的檔案路徑,這些路徑不應被追蹤。預設為 $XDG_CONFIG_HOME/git/ignore。若 $XDG_CONFIG_HOME 未設定或為空,則改用 $HOME/.config/git/ignore。請參閱 gitignore[5]

core.askPass

某些互動式詢問密碼的指令(例如 svn 和 http 介面)可以被告知使用由此變數值給出的外部程式。可由 GIT_ASKPASS 環境變數覆蓋。若未設定,則回退到 SSH_ASKPASS 環境變數的值,若仍失敗,則使用簡單的密碼提示。外部程式將獲得適當的提示作為命令列參數,並將密碼寫入其 STDOUT。

core.attributesFile

除了 .gitattributes(每個目錄)和 .git/info/attributes 之外,指定包含屬性的檔案路徑(請參閱 gitattributes[5])。預設值為 $XDG_CONFIG_HOME/git/attributes。若 $XDG_CONFIG_HOME 未設定或為空,則改用 $HOME/.config/git/attributes

core.hooksPath

預設情況下,Git 會在 $GIT_DIR/hooks 目錄中尋找您的勾點(hooks)。將此設定為不同的路徑(例如 /etc/git/hooks),Git 就會嘗試在該目錄中尋找您的勾點(例如,在 /etc/git/hooks/pre-receive 而不是 $GIT_DIR/hooks/pre-receive 中)。

該路徑可以是絕對或相對路徑。相對路徑被視為相對於執行勾點的目錄(請參閱 githooks[5] 的「描述」章節)。

此設定變數在您希望集中配置 Git 勾點而不是在每個儲存庫基礎上進行配置時,或者作為一種更靈活且集中的替代方案(相比於修改預設勾點的 init.templateDir)時非常有用。

您也可以透過將 core.hooksPath 設為 /dev/null 來完全停用所有勾點。這通常僅建議專家使用者使用,並以 git -c core.hooksPath=/dev/null ... 形式的配置參數在每個指令的基礎上使用。

core.editor

當設定此變數且未設定 GIT_EDITOR 環境變數時,諸如 committag 這類允許透過啟動編輯器編輯訊息的指令將使用此變數的值。請參閱 git-var[1]

core.commentChar
core.commentString

諸如 committag 這類允許您編輯訊息的指令會將以該字元開頭的行視為註解,並在編輯器返回後移除它們(預設為 #)。

若設為 "auto",git-commit 將選擇一個在現有提交訊息中未在任何行開頭出現過的字元。由於以下限制,此值的支援已過時,將在 Git 3.0 中移除:

  • 它與在提交訊息範本中新增註解不相容。這包括由 cherry-pickmergerebaserevert 新增到提交訊息中的衝突註解。

  • 它與在 prepare-commit-msg 勾點中向提交訊息新增註解不相容。

  • 它與重訂基準(rebase)時的 fixupsquash 指令不相容,

  • 它不被 git notes 所遵守。

請注意,這兩個變數互為別名,在現代 Git 版本中,您可以自由地使用字串(例如 //⁑⁕⁑)搭配 commentChar。v2.45.0 之前的 Git 版本將忽略 commentString,但會拒絕由多個 ASCII 位元組組成的 commentChar 值。如果您計畫將設定用於較舊和較新的 Git 版本,您可能需要同時指定兩者。

[core]
# single character for older versions
commentChar = "#"
# string for newer versions (which will override commentChar
# because it comes later in the file)
commentString = "//"
core.filesRefLockTimeout

嘗試鎖定個別參照時重試的時間長度(以毫秒為單位)。值 0 表示根本不重試;-1 表示無限期重試。預設值為 100(即重試 100ms)。

core.packedRefsTimeout

嘗試鎖定 packed-refs 檔案時重試的時間長度(以毫秒為單位)。值 0 表示根本不重試;-1 表示無限期重試。預設值為 1000(即重試 1 秒)。

core.pager

供 Git 指令使用的文字檢視器(例如 less)。該值旨在由 shell 解釋。優先順序為 $GIT_PAGER 環境變數,其次是 core.pager 配置,接著是 $PAGER,最後是編譯時選擇的預設值(通常是 less)。

LESS 環境變數未設定時,Git 將其設為 FRX(如果已設定 LESS 環境變數,Git 則完全不更改它)。如果您想有選擇地覆蓋 Git 對 LESS 的預設設定,您可以將 core.pager 設為例如 less -S。這將由 Git 傳遞給 shell,shell 會將最終指令轉換為 LESS=FRX less -S。環境變數沒有設定 S 選項,但命令列有,指示 less 截斷長行。同樣地,將 core.pager 設為 less -+F 會從命令列停用環境變數指定的 F 選項,停用 less 的「一屏即退出」行為。您可以針對特定指令啟用某些旗標:例如,將 pager.blame 設為 less -S 僅為 git blame 啟用行截斷。

同樣地,當 LV 環境變數未設定時,Git 將其設為 -c。您可以透過匯出具有另一個值的 LV 或將 core.pager 設為 lv +c 來覆蓋此設定。

core.whitespace

以逗號分隔的常見空白字元問題列表,需留意。git diff 將使用 color.diff.whitespace 來反白顯示它們,且 git apply --whitespace=error 會將它們視為錯誤。您可以加前置 - 來停用其中任何一個(例如 -trailing-space)。

  • blank-at-eol 將行尾的尾隨空白字元視為錯誤(預設啟用)。

  • space-before-tab 將在行初始縮排部分中緊接在定位點字元(tab)之前出現的空格字元視為錯誤(預設啟用)。

  • indent-with-non-tab 將以空格字元而非等效定位點縮排的行視為錯誤(預設停用)。

  • tab-in-indent 將行初始縮排部分中的定位點字元視為錯誤(預設停用)。

  • blank-at-eof 將在檔案末尾新增的空行視為錯誤(預設啟用)。

  • trailing-space 是涵蓋 blank-at-eolblank-at-eof 的簡寫。

  • cr-at-eol 將行尾的回車字元(carriage-return)視為行終止符的一部分,即透過它,如果該回車字元之前的字元不是空白字元,則不會觸發 trailing-space(預設停用)。

  • incomplete-line 將檔案末尾缺少換行符的最後一行視為錯誤(預設停用)。

  • tabwidth=<n> 說明定位點佔用的字元位置數量;這與 indent-with-non-tab 有關,也與 Git 修復 tab-in-indent 錯誤時有關。預設定位點寬度為 8。允許值為 1 到 63。

core.fsync

以逗號分隔的儲存庫組件列表,在建立或修改時應透過 core.fsyncMethod 進行強化。您可以透過在前加上 - 來停用任何組件的強化。在系統非正常關機的情況下,未強化的項目可能會遺失。除非您有特殊要求,否則建議將此選項留空或選擇 committedaddedall 其中之一。

當遇到此配置時,組件集合從平台預設值開始,移除已停用的組件,並新增額外的組件。none 會重設狀態,使平台預設值被忽略。

空字串將 fsync 配置重設為平台預設值。大多數平台上的預設值等同於 core.fsync=committed,-loose-object,這具有良好的效能,但在系統非正常關機時有遺失近期工作的風險。

  • none 會清除已同步的組件集合。

  • loose-object 強化以鬆散物件(loose-object)形式新增到儲存庫的物件。

  • pack 強化以封裝檔形式新增到儲存庫的物件。

  • pack-metadata 強化封裝檔點陣圖(bitmaps)和索引。

  • commit-graph 強化 commit-graph 檔案。

  • index 在修改時強化索引。

  • objects 是一個聚合選項,等同於 loose-object,pack

  • reference 強化儲存庫中已修改的參照。

  • derived-metadata 是一個聚合選項,等同於 pack-metadata,commit-graph

  • committed 是一個聚合選項,目前等同於 objects。此模式會犧牲一些效能,以確保透過 git commit 或類似指令提交到儲存庫的工作得到強化。

  • added 是一個聚合選項,目前等同於 committed,index。此模式會犧牲額外的效能,以確保 git add 和類似操作的結果得到強化。

  • all 是一個同步上述所有個別組件的聚合選項。

core.fsyncMethod

一個值,表示 Git 將使用 fsync 和相關原語(primitives)強化儲存庫資料的策略。

  • fsync 使用 fsync() 系統呼叫或平台等效物。

  • writeout-only 發出頁面快取寫回(writeback)請求,但根據檔案系統和儲存硬體的不同,在系統崩潰時新增到儲存庫的資料可能無法持久。這是 macOS 上的預設模式。

  • batch 啟用一種模式,使用 writeout-only 快取刷新將多個更新暫存到磁碟寫回快取中,然後對虛擬檔案執行單一完整的 fsync,以在操作結束時觸發磁碟快取刷新。

    目前 batch 模式僅適用於鬆散物件檔案。其他儲存庫資料如同指定了 fsync 一樣具有持久性。此模式預期在 macOS(儲存在 HFS+ 或 APFS 檔案系統上的儲存庫)和 Windows(儲存在 NTFS 或 ReFS 檔案系統上的儲存庫)上與 fsync 一樣安全。

core.fsyncObjectFiles

此布林值將在寫入物件檔案時啟用 fsync()。此設定已過時。請使用 core.fsync。

此設定會影響以鬆散物件形式新增到 Git 儲存庫的資料。設為 true 時,Git 將發出 fsync 或類似的系統呼叫以刷新快取,以便在系統非正常關機時保持鬆散物件的一致性。

core.preloadIndex

git diff 等操作啟用平行索引預載。

這可以加快 git diffgit status 等操作的速度,特別是在 NFS 等具有弱快取語意且 IO 延遲相對較高的檔案系統上。啟用後,Git 將並行地進行索引與檔案系統資料的比較,允許重疊的 IO。預設為 true。

core.unsetenvvars

僅限 Windows:在生成任何其他行程之前需要取消設定的環境變數名稱(以逗號分隔)。預設為 PERL5LIB,因為 Git for Windows 堅持使用自己的 Perl 解譯器。

core.createObject

您可以將其設為 link,在此情況下,使用硬連結(hardlink)後刪除原始檔,以確保物件建立不會覆蓋現有物件。

在某些檔案系統/作業系統組合上,這是不可靠的。請在該處將此配置設定設為 rename;然而,這將移除確保現有物件檔案不會被覆蓋的檢查。

core.notesRef

顯示提交訊息時,同時顯示儲存在給定參照中的註解(notes)。該參照必須是完整限定的。如果給定的參照不存在,這不是錯誤,但意味著不應列印任何註解。

此設定預設為 "refs/notes/commits",且可由 GIT_NOTES_REF 環境變數覆蓋。請參閱 git-notes[1]

core.commitGraph

若為 true,則 git 將讀取 commit-graph 檔案(如果存在)以解析提交的圖形結構。預設為 true。請參閱 git-commit-graph[1] 以取得更多資訊。

core.useReplaceRefs

若設為 false,行為如同在命令列上給定了 --no-replace-objects 選項。請參閱 git[1]git-replace[1] 以取得更多資訊。

core.multiPackIndex

使用 multi-pack-index 檔案透過單一索引來追蹤多個封裝檔。請參閱 git-multi-pack-index[1] 以取得更多資訊。預設為 true。

core.sparseCheckout

啟用「稀疏檢出」(sparse checkout)功能。請參閱 git-sparse-checkout[1] 以取得更多資訊。

core.sparseCheckoutCone

啟用稀疏檢出功能的「錐模式」(cone mode)。當稀疏檢出檔案包含有限的模式集時,此模式可提供顯著的效能優勢。透過將此變數設為 false,可以請求「非錐模式」,以允許指定更靈活的模式。請參閱 git-sparse-checkout[1] 以取得更多資訊。

core.abbrev

設定物件名稱縮寫後的長度。若未指定或設為 "auto",則會根據儲存庫中封裝物件的近似數量計算出一個適當的值,希望這足以讓縮寫後的物件名稱保持一段時間的唯一性。若設為 "no",則不進行縮寫,並以完整長度顯示物件名稱。最小長度為 4。

core.maxTreeDepth

Git 在遍歷樹(tree)時願意遞迴的最大深度(例如 "a/b/cde/f" 的深度為 4)。這是一種容錯機制,允許 Git 乾淨地中止,通常不需要進行調整。當使用 MSVC 編譯 Git 時,預設值為 512。否則,預設值為 2048。

credential.helper

指定當需要使用者名稱或密碼憑證時要呼叫的外部協助程式;該協助程式可能會查詢外部儲存空間以避免提示使用者輸入憑證。這通常是具有可能參數的憑證協助程式名稱,但也可以是具有參數的絕對路徑,若以 ! 開頭,則為 shell 指令。

請注意,可以定義多個協助程式。請參閱 gitcredentials[7] 以取得詳細資訊和範例。

credential.interactive

預設情況下,當需要新憑證時,Git 和任何配置的憑證協助程式都會要求使用者輸入。如果這些憑證仍然有效,許多這類協助程式會根據儲存的憑證取得成功。為避免 Git 可能的使用者互動,請將 credential.interactive=false。一些憑證協助程式也遵守此選項。

credential.useHttpPath

獲取憑證時,將 http 或 https URL 的 "path" 元件視為重要的。預設為 false。請參閱 gitcredentials[7] 以取得更多資訊。

credential.sanitizePrompt

預設情況下,顯示為密碼提示一部分的使用者名稱和主機不允許包含控制字元(預設會被 URL 編碼)。將此設定配置為 false 以覆蓋該行為。

credential.protectProtocol

預設情況下,Git 與憑證協助程式交談時所使用的協定不允許回車字元(Carriage Return)。此設定允許使用者覆蓋此預設值。

credential.username

若未設定網路驗證的使用者名稱,請預設使用此使用者名稱。請參閱下方的 credential.<context>.*,以及 gitcredentials[7]

credential.<url>.*

上述任何 credential.* 選項都可以選擇性地應用於某些憑證。例如,"credential.https://example.com.username" 將僅為前往 example.com 的 https 連線設定預設使用者名稱。請參閱 gitcredentials[7] 以取得 URL 如何比對的詳細資訊。

credentialCache.ignoreSIGHUP

告知 git-credential-cache—​daemon 忽略 SIGHUP,而不是退出。

credentialStore.lockTimeoutMS

git-credential-store 在嘗試鎖定憑證檔案時重試的時間長度(以毫秒為單位)。值 0 表示根本不重試;-1 表示無限期重試。預設值為 1000(即重試 1 秒)。

diff.autoRefreshIndex

使用 git diff 與工作樹檔案進行比較時,不要將僅統計變更視為已變更。相反地,靜默執行 git update-index --refresh,以更新工作樹內容與索引中內容相符的路徑的快取統計資訊。此選項預設為 true。請注意,這僅影響 git diff Porcelain,而不影響底層 diff 指令(如 git diff-files)。

diff.dirstat

以逗號分隔的 --dirstat 參數列表,指定 git-diff[1] 等工具中 --dirstat 選項的預設行為。預設值可在命令列上覆蓋(使用 --dirstat=<param>,...)。後備預設值(當未被 diff.dirstat 變更時)為 changes,noncumulative,3。可用的參數如下:

changes

透過計算從來源移除或新增到目的地的行數來計算 dirstat 數值。這會忽略檔案內純粹的程式碼移動。換句話說,重新排列檔案中的行不像其他變更那樣被大量計算。這是未提供參數時的預設行為。

lines

透過執行一般的基於行的差異分析來計算 dirstat 數值,並加總移除/新增的行數。(對於二進位檔案,則計算 64 位元組的區塊,因為二進位檔案沒有自然的「行」概念)。這比 changes 行為更耗費資源,但它會將檔案內重新排列的行視為與其他變更一樣重要。產生的輸出與您從其他 --*stat 選項獲得的結果一致。

files

透過計算更改的檔案數量來計算 dirstat 數值。每個更改的檔案在 dirstat 分析中的權重相等。這是計算上最便宜的 --dirstat 行為,因為它根本不需要查看檔案內容。

cumulative

同時計算子目錄中對父目錄的變更。請注意,使用 cumulative 時,報告的百分比總和可能會超過 100%。預設(非累進)行為可以使用 noncumulative 參數指定。

<limit>

整數參數指定截斷百分比(預設為 3%)。變更佔比低於此百分比的目錄不會顯示在輸出中。

範例:以下內容將計算已變更的檔案,同時忽略變更檔案總數少於 10% 的目錄,並在父目錄中累積子目錄計數: files,10,cumulative

diff.statNameWidth

限制 --stat 輸出中檔案名稱部分的寬度。若已設定,則適用於除 format-patch 之外所有產生 --stat 輸出的指令。

diff.statGraphWidth

限制 --stat 輸出中圖形部分的寬度。若已設定,則適用於除 format-patch 之外所有產生 --stat 輸出的指令。

diff.context

產生包含 <n> 行上下文的 diff,而不是預設的 3 行。此值可由 -U 選項覆蓋。

diff.interHunkContext

顯示 diff 區塊(hunks)之間的上下文,最多顯示指定的行數,藉此融合彼此接近的區塊。此值作為 --inter-hunk-context 命令列選項的預設值。

diff.external

如果設定了此配置變數,則 diff 產生不會使用內部的 diff 機制,而是使用給定的指令。可由 GIT_EXTERNAL_DIFF 環境變數覆蓋。該指令以 git[1] 中「git Diffs」下描述的參數呼叫。注意:如果您只想在檔案的子集上使用外部 diff 程式,您可能需要改用 gitattributes[5]

diff.trustExitCode

如果此布林值設為 true,則 diff.external 指令預期在認為輸入檔案相等時傳回退出代碼 0,在認為不同時傳回 1,如同 diff(1)。如果預設設為 false,則指令預期無論相等與否都傳回退出代碼 0。任何其他退出代碼會導致 Git 報告嚴重錯誤。

diff.ignoreSubmodules

設定 --ignore-submodules 的預設值。請注意,這僅影響 git diff Porcelain,而不影響底層 diff 指令(如 git diff-files)。git checkoutgit switch 在報告未提交的變更時也遵守此設定。將其設為 all 會停用當 status.submoduleSummary 設定時由 git commitgit status 通常顯示的子模組摘要,除非使用 --ignore-submodules 命令列選項進行覆蓋。git submodule 指令不受此設定影響。預設設定為 untracked,因此任何未追蹤的子模組都會被忽略。

diff.mnemonicPrefix

若設定,git diff 會使用一組不同於標準 a/b/ 的字首對,具體取決於正在比較的項目。當此配置生效時,反向 diff 輸出也會交換字首的順序:

git diff

比較索引(index)與工作樹(work tree);

git diff HEAD

比較提交(commit)與工作樹;

git diff --cached

比較提交與索引;

git diff HEAD:<file1> <file2>

比較物件(object)與工作樹實體;

git diff --no-index <a> <b>

比較兩個非 git 項目 <a><b>

diff.noPrefix

若設定,git diff 不會顯示任何來源或目的地字首。

diff.srcPrefix

若設定,git diff 使用此來源字首。預設為 a/

diff.dstPrefix

若設定,git diff 使用此目的地字首。預設為 b/

diff.relative

若設為 truegit diff 不會顯示目錄之外的變更,並顯示相對於當前目錄的檔案名稱。

diff.orderFile

指示如何在 diff 中對檔案進行排序的檔案。請參閱 git-diff[1]-O 選項以取得詳細資訊。若 diff.orderFile 是相對路徑名稱,它被視為相對於工作樹頂層。

diff.renameLimit

在複製/重新命名偵測的詳盡部分中要考慮的檔案數量;等同於 git diff 選項 -l。若未設定,目前預設值為 1000。如果關閉重新命名偵測,此設定無效。

diff.renames

Git 是否以及如何偵測重新命名。若設為 false,則停用重新命名偵測。若設為 true,則啟用基本重新命名偵測。若設為 copiescopy,Git 也會偵測複製。預設為 true。請注意,這僅影響 git-diff[1]git-log[1]git diff Porcelain,而不影響 git-diff-files[1] 等底層指令。

diff.suppressBlankEmpty

一個布林值,用於抑制在每個空白輸出行之前列印空格的標準行為。預設為 false

diff.submodule

指定顯示子模組差異的格式。short 格式僅顯示範圍開始和結束時的提交名稱。log 格式列出範圍內的提交,如同 git-submodule[1] summary 所做的那樣。diff 格式顯示子模組已變更內容的內聯(inline)diff。預設為 short

diff.wordRegex

用於執行逐字差異計算時確定什麼是「字」的 POSIX 擴充正規表示式。符合該正規表示式的字元序列為「字」,所有其他字元都是可忽略的空白字元。

diff.<driver>.command

自訂 diff 驅動程式指令。請參閱 gitattributes[5] 以取得詳細資訊。

diff.<driver>.trustExitCode

如果此布林值設為 true,則 diff.<driver>.command 指令預期在認為輸入檔案相等時傳回退出代碼 0,在認為不同時傳回 1,如同 diff(1)。如果預設設為 false,則該指令預期無論相等與否都傳回退出代碼 0。任何其他退出代碼會導致 Git 報告嚴重錯誤。

diff.<driver>.xfuncname

diff 驅動程式應使用來識別區塊標頭(hunk header)的正規表示式。也可以使用內建模式。請參閱 gitattributes[5] 以取得詳細資訊。

diff.<driver>.binary

將此選項設為 true 可使 diff 驅動程式將檔案視為二進位。請參閱 gitattributes[5] 以取得詳細資訊。

diff.<driver>.textconv

diff 驅動程式應呼叫以產生檔案文字轉換版本的指令。轉換的結果用於產生人類可讀的 diff。請參閱 gitattributes[5] 以取得詳細資訊。

diff.<driver>.wordRegex

diff 驅動程式應使用來分割一行中字詞的正規表示式。請參閱 gitattributes[5] 以取得詳細資訊。

diff.<driver>.cachetextconv

將此選項設為 true 可使 diff 驅動程式快取文字轉換輸出。請參閱 gitattributes[5] 以取得詳細資訊。

diff.indentHeuristic

將此選項設為 false 以停用預設啟發式演算法,該演算法會移動 diff 區塊邊界以使修補程式更容易閱讀。

diff.algorithm

選擇差異演算法。變體如下:

default
myers

基本的貪婪差異演算法。目前這是預設值。

minimal

花費額外時間以確保產生最小可能的差異。

patience

在產生修補檔時使用 "patience diff" 演算法。

histogram

此演算法擴展了 patience 演算法以「支援低出現率的共同元素」。

diff.wsErrorHighlight

反白顯示 diff 中 contextoldnew 行中的空白字元錯誤。多個值以逗號分隔,none 重設先前的值,default 將列表重設為 newallold,new,context 的簡寫。空白字元錯誤以 color.diff.whitespace 顏色顯示。命令列選項 --ws-error-highlight=<kind> 會覆蓋此設定。

diff.colorMoved

若設為有效的 <mode>true 值,diff 中移動的行將以不同顏色顯示。關於有效模式的詳細資訊,請參閱 git-diff[1] 中的 --color-moved。若僅設為 true,將使用預設顏色模式。當設為 false 時,移動的行不會被著色。

diff.colorMovedWS

當使用例如 diff.colorMoved 設定對移動的行進行著色時,此選項控制處理空格的模式。關於有效模式的詳細資訊,請參閱 git-diff[1] 中的 --color-moved-ws

diff.tool

控制 git-difftool[1] 使用哪種 diff 工具。此變數會覆蓋在 merge.tool 中配置的值。下列表格顯示了有效的內建值。任何其他值都被視為自訂 diff 工具,並要求定義對應的 difftool.<tool>.cmd 變數。

diff.guitool

控制當指定 -g/--gui 旗標時 git-difftool[1] 使用哪種 diff 工具。此變數會覆蓋在 merge.guitool 中配置的值。下列表格顯示了有效的內建值。任何其他值都被視為自訂 diff 工具,並要求定義對應的 difftool.<guitool>.cmd 變數。

  • araxis

  • bc

  • codecompare

  • deltawalker

  • diffmerge

  • diffuse

  • ecmerge

  • emerge

  • examdiff

  • guiffy

  • gvimdiff

  • kdiff3

  • kompare

  • meld

  • nvimdiff

  • opendiff

  • p4merge

  • smerge

  • tkdiff

  • vimdiff

  • vscode

  • winmerge

  • xxdiff

difftool.<tool>.cmd

指定呼叫該 diff 工具的指令。指定的指令將在 shell 中評估,並使用以下可用變數:LOCAL 設為包含 diff 預映像(pre-image)內容的暫存檔案名稱,REMOTE 設為包含 diff 後映像(post-image)內容的暫存檔案名稱。

請參閱 git-difftool[1] 中的 --tool=<tool> 選項以取得更多詳細資訊。

difftool.<tool>.path

覆蓋給定工具的路徑。如果您的工具不在 PATH 中,這非常有用。

difftool.trustExitCode

如果呼叫的 diff 工具傳回非零的退出狀態,則退出 difftool。

請參閱 git-difftool[1] 中的 --trust-exit-code 選項以取得更多詳細資訊。

difftool.prompt

在每次呼叫 diff 工具之前提示。

difftool.guiDefault

設為 true 以預設使用 diff.guitool(等同於指定 --gui 參數),或設為 auto 以根據 DISPLAY 環境變數值的存在與否來選擇 diff.guitooldiff.tool。預設為 false,此時必須明確提供 --gui 參數才能使用 diff.guitool

extensions.*

除非另有說明,如果 core.repositoryFormatVersion 不為 1,則指定擴充功能是錯誤的。請參閱 gitrepository-layout[5]

compatObjectFormat

指定要使用的相容雜湊演算法。可接受的值為 sha1sha256。指定的值必須與 extensions.objectFormat 的值不同。這允許物件格式符合此 compatObjectFormat 的 git 儲存庫之間進行用戶端層級的互通。特別是當完全實作時,可推播(push)和拉取(pull)物件格式符合 compatObjectFormat 的儲存庫。以及除了使用以 objectFormat 編碼的 oid 外,還能使用以 compatObjectFormat 編碼的 oid 來在本地指定物件。

請注意,此擴充功能啟用的功能尚未完整且可能會變更。它目前僅存在於允許開發和測試基礎功能,並非設計供終端使用者啟用。

noop

此擴充功能完全不會改變 git 的行為。它僅對測試格式-1 相容性有用。

基於歷史原因,無論 core.repositoryFormatVersion 設定為何,此擴充功能都會受到尊重。

noop-v1

此擴充功能完全不會改變 git 的行為。它僅對測試格式-1 相容性有用。

objectFormat

指定要使用的雜湊演算法。可接受的值為 sha1sha256。若未指定,假定為 sha1

請注意,此設定僅應由 git-init[1]git-clone[1] 設定。初始化後嘗試更改它將不會奏效,並會產生難以診斷的問題。

partialClone

啟用時,表示儲存庫是以部分複製(partial clone)建立的(或之後執行了部分提取),且遠端可能省略了發送某些不需要的物件。此類遠端稱為「承諾遠端」(promisor remote),它承諾將來可以從它那裡獲取所有這類被省略的物件。

此鍵的值為承諾遠端的名稱。

基於歷史原因,無論 core.repositoryFormatVersion 設定為何,此擴充功能都會受到尊重。

preciousObjects

如果啟用,表示儲存庫中的物件不得被刪除(例如,透過 git-prunegit repack -d)。

基於歷史原因,無論 core.repositoryFormatVersion 設定為何,此擴充功能都會受到尊重。

refStorage

指定參照儲存格式和對應的有效負載(payload)。該值可以是格式名稱或 URI。

  • 僅格式名稱(例如 reftablefiles)。

  • URI 格式 <format>://<payload> 明確指定了格式和有效負載(例如 reftable:///foo/bar)。

支援的格式名稱為:

files

用於帶有 packed-refs 的鬆散檔案。這是預設值。

reftable

用於 reftable 格式。

有效負載直接傳遞給參照後端。對於 files 和 reftable 後端,這必須是儲存參照的檔案系統路徑。未提供有效負載時預設為 commondir。相對路徑解析為相對於 $GIT_DIR。未來的後端可能支援其他有效負載配置,例如 postgres://127.0.0.1:5432?database=myrepo。

請注意,此設定僅應由 git-init[1]git-clone[1] 設定。初始化後嘗試更改它將不會奏效,並會產生難以診斷的問題。

relativeWorktrees

如果啟用,表示至少有一個工作樹(worktree)以相對路徑連結。如果使用 --relative-paths 選項或 worktree.useRelativePaths 配置設為 true 建立或修復了工作樹,則會自動設定此項。

submodulePathConfig

此擴充功能適用於少數使用者,他們:

  • 遇到類似 refusing to create ... in another submodule's git dir 等錯誤,原因很多,例如建立名為 fooFoo 的模組時出現不區分大小寫的檔案系統衝突。

  • 需要更靈活的子模組佈局,例如由於預設 gitdir 機制(使用 .git/modules/<plain-name> 位置,導致進一步衝突)不支援 foofoo/barfoo/baz 等巢狀名稱。

當啟用 extensions.submodulePathConfig 時,submodule.<name>.gitdir 配置成為所有子模組 gitdir 路徑的單一事實來源,並在複製和初始化操作期間為所有新子模組自動設定。

如果模組沒有對應的 submodule.<name>.gitdir 設定,Git 將會錯誤退出。

現有的(擴充功能前)子模組需要透過新增遺失的設定項目來遷移。這可以手動完成,例如對於每個子模組: git config submodule.<name>.gitdir .git/modules/<name>,或者透過 git submodule--helper migrate-gitdir-configs 指令完成,該指令會迭代所有子模組並嘗試遷移它們。

透過將 init.defaultSubmodulePathConfig 設為 true(例如透過執行 git config --global init.defaultSubmodulePathConfig true),可以為新儲存庫自動啟用該擴充功能。

worktreeConfig

如果啟用,則工作樹將從 $GIT_DIR/config.worktree 檔案載入配置設定,除了 $GIT_COMMON_DIR/config 檔案之外。請注意,對於主要工作樹,$GIT_COMMON_DIR$GIT_DIR 是相同的,而其他工作樹則具有 $GIT_DIR 等於 $GIT_COMMON_DIR/worktrees/<id>/config.worktree 檔案中的設定將覆蓋來自任何其他設定檔的設定。

啟用此擴充功能時,您必須小心地將某些值(如果存在)從通用設定檔移動到主要工作樹的 config.worktree 檔案:

  • core.worktree 必須從 $GIT_COMMON_DIR/config 移動到 $GIT_COMMON_DIR/config.worktree

  • 如果 core.bare 為 true,則必須從 $GIT_COMMON_DIR/config 移動到 $GIT_COMMON_DIR/config.worktree

根據您對每個工作樹可自訂稀疏檢出(sparse-checkout)設定的渴望,調整 core.sparseCheckoutcore.sparseCheckoutCone 的位置也可能有益。預設情況下,git sparse-checkout 內建指令會啟用此擴充功能,在每個工作樹基礎上指派這些設定值,並使用 $GIT_DIR/info/sparse-checkout 檔案來獨立指定每個工作樹的稀疏性。請參閱 git-sparse-checkout[1] 以取得更多詳細資訊。

基於歷史原因,無論 core.repositoryFormatVersion 設定為何,此擴充功能都會受到尊重。

fastimport.unpackLimit

如果 git-fast-import[1] 匯入的物件數量低於此限制,則物件將被解包(unpacked)為鬆散物件檔案。然而,如果匯入的物件數量等於或超過此限制,則封裝檔將儲存為封裝檔。從 fast-import 儲存封裝檔可以使匯入操作完成得更快,特別是在緩慢的檔案系統上。若未設定,則改用 transfer.unpackLimit 的值。

feature.*

feature. 開頭的設定設定會修改一組其他設定設定的預設值。這些群組由 Git 開發人員社群建立作為推薦的預設值,且可能會變更。特別是,可能會新增具有不同預設值的新設定選項。

feature.experimental

啟用 Git 新增的設定選項,並正在考慮用於未來的預設值。此處包含的設定設定可能會隨每個版本(包括次要版本更新)而新增或移除。由於這些設定非常新,可能會產生意想不到的交互作用。如果您有興趣提供有關實驗性功能的意見,請啟用此設定。新的預設值為:

  • fetch.negotiationAlgorithm=skipping 可能透過每次跳過更多提交來改善提取協商時間,減少來回傳輸次數。

  • pack.useBitmapBoundaryTraversal=true 可能透過遍歷更少的物件來改善點陣圖遍歷時間。

  • pack.allowPackReuse=multi 可能透過重複使用來自多個封裝檔而非僅僅一個的物件,改善建立封裝檔所需的時間。

  • pack.usePathWalk 可能加快封裝檔建立速度,並在出現與 Git 預設名稱雜湊的特定檔案名稱碰撞時,使封裝檔顯著變小。

  • init.defaultRefFormat=reftable 導致新初始化的儲存庫使用 reftable 格式來儲存參照。這種新格式解決了不區分大小寫檔案系統的問題,壓縮效果更好,並且在許多使用情境下效能顯著更好。請參閱 Documentation/technical/reftable.adoc 以取得有關此新儲存格式的更多資訊。

feature.manyFiles

啟用針對工作目錄中擁有許多檔案的儲存庫進行最佳化的設定選項。擁有許多檔案時,git statusgit checkout 等指令可能會變慢,這些新預設值可改善效能:

  • index.skipHash=true 透過不計算結尾校驗和來加快索引寫入速度。請注意,這將導致 2.13.0 之前的 Git 版本拒絕解析索引,且 2.40.0 之前的 Git 版本將在 git fsck 期間報告索引損壞。

  • index.version=4 啟用索引中的路徑字首壓縮。

  • core.untrackedCache=true 啟用未追蹤快取。此設定假定 mtime 在您的機器上正常運作。

fetch.recurseSubmodules

此選項控制 git fetch(以及 git pull 中的底層提取)是否遞迴地提取到已填充的子模組中。此選項可設為布林值或 on-demand。設為布林值會將 fetch 和 pull 的行為變更為在設為 true 時無條件遞迴進入子模組,或在設為 false 時完全不遞迴。設為 on-demand 時,fetch 和 pull 僅會在超級專案檢索到更新子模組參照的提交時,遞迴進入已填充的子模組。預設為 on-demand,若已設定則為 submodule.recurse 的值。

fetch.fsckObjects

如果設為 true,git-fetch-pack 將檢查所有已提取的物件。請參閱 transfer.fsckObjects 以了解檢查內容。預設為 false。若未設定,則改用 transfer.fsckObjects 的值。

fetch.fsck.<msg-id>

作用如同 fsck.<msg-id>,但由 git-fetch-pack[1] 而非 git-fsck[1] 使用。請參閱 fsck.<msg-id> 文件以取得詳細資訊。

fetch.fsck.skipList

作用如同 fsck.skipList,但由 git-fetch-pack[1] 而非 git-fsck[1] 使用。請參閱 fsck.skipList 文件以取得詳細資訊。

fetch.unpackLimit

如果透過 Git 原生傳輸所提取的物件數量低於此限制,則物件將會被解包為鬆散物件檔案 (loose object files)。然而,如果接收到的物件數量達到或超過此限制,則接收到的封裝檔 (pack) 將會被直接儲存為一個封裝檔,並在新增任何缺失的差異基準 (delta bases) 後進行儲存。儲存推送來的封裝檔可以讓推送操作更快完成,尤其是在較慢的檔案系統上。如果未設定,則會使用 transfer.unpackLimit 的值來代替。

fetch.prune

如果設為 true,fetch 將會自動表現得如同在命令列中給定了 --prune 選項一樣。另請參閱 remote.<name>.prune 以及 git-fetch[1] 中的 PRUNING 章節。

fetch.pruneTags

如果設為 true,在進行修剪 (pruning) 時,fetch 將會自動表現得如同提供了 refs/tags/*:refs/tags/* 參照規格 (refspec) 一樣(如果尚未設定的話)。這允許同時設定此選項與 fetch.prune,以維持與上游參照的 1 對 1 對應。另請參閱 remote.<name>.pruneTags 以及 git-fetch[1] 中的 PRUNING 章節。

fetch.all

如果設為 true,fetch 將嘗試更新所有可用的遠端倉庫。此行為可以透過傳入 --no-all 或明確指定一個或多個要提取的遠端倉庫來覆蓋。預設值為 false

fetch.output

控制如何列印參照更新狀態。有效值為 fullcompact。預設值為 full。詳情請參閱 git-fetch[1] 中的 OUTPUT 章節。

fetch.negotiationAlgorithm

控制在協商伺服器將傳送的封裝檔 (packfile) 內容時,如何發送本地倉庫的提交資訊。設為 consecutive 以使用遍歷連續提交並逐一檢查的演算法。設為 skipping 以使用跳過提交的演算法,以期更快收斂,但可能會導致封裝檔大於必要大小;或設為 noop 以完全不發送任何資訊,這幾乎肯定會導致封裝檔大於必要大小,但會跳過協商步驟。設為 default 以覆蓋先前設定並使用預設行為。預設值通常為 consecutive,但如果 feature.experimentaltrue,則預設值為 skipping。無效值將導致 git fetch 報錯。

另請參閱 git-fetch[1]--negotiate-only--negotiation-tip 選項。

fetch.showForcedUpdates

設為 false 以在 git-fetch[1]git-pull[1] 指令中啟用 --no-show-forced-updates。預設值為 true

fetch.parallel

指定一次並行執行的最大提取操作數量(當 git-fetch[1]--multiple 選項生效時,用於子模組或遠端倉庫)。

數值 0 將提供合理的預設值。如果未設定,則預設為 1。

對於子模組,此設定可使用 submodule.fetchJobs 設定值來覆蓋。

fetch.writeCommitGraph

設為 true 以在每次從遠端下載封裝檔的 git fetch 指令後寫入提交圖 (commit-graph)。使用 --split 選項時,大多數執行將在現有的提交圖檔案之上建立一個非常小的提交圖檔案。偶爾,這些檔案會合併,寫入可能需要較長時間。擁有更新的提交圖檔案有助於許多 Git 指令的效能,包括 git merge-basegit push -fgit log --graph。預設值為 false

fetch.bundleURI

此值儲存了一個 URI,用於在從原始 Git 伺服器進行增量提取之前,從 Bundle URI 下載 Git 物件資料。這類似於 git-clone[1] 中的 --bundle-uri 選項的行為。如果提供的 Bundle URI 包含為增量提取而組織的 Bundle 列表,則 git clone --bundle-uri 將會設定 fetch.bundleURI 的值。

如果您修改此值,且您的倉庫擁有 fetch.bundleCreationToken 值,請在從新的 Bundle URI 提取之前移除該 fetch.bundleCreationToken 值。

fetch.bundleCreationToken

當使用 fetch.bundleURI 從使用 "creationToken" 啟發式 (heuristic) 的 Bundle 列表進行增量提取時,此設定值儲存了已下載 Bundle 的最大 creationToken 值。如果宣告的 creationToken 不嚴格大於此值,此值將用於防止未來下載 Bundle。

建立令牌 (creation token) 的值是由提供特定 Bundle URI 的服務商所選擇的。如果您修改了 fetch.bundleURI 的 URI,請務必在提取前移除 fetch.bundleCreationToken 的值。

filter.<driver>.clean

在檢入 (checkin) 時,將工作樹檔案內容轉換為 blob 的指令。詳情請參閱 gitattributes[5]

filter.<driver>.smudge

在檢出 (checkout) 時,將 blob 物件內容轉換為工作樹檔案的指令。詳情請參閱 gitattributes[5]

format.attach

啟用 multipart/mixed 附件作為 format-patch 的預設值。該值也可以是一個以雙引號括起來的字串,這將啟用附件作為預設值並將該值設為邊界 (boundary)。參見 git-format-patch[1] 中的 --attach 選項。若要撤銷先前的值,將其設為空字串即可。

format.from

為 format-patch 的 --from 選項提供預設值。接受布林值、姓名和電子郵件地址。如果設為 false,format-patch 預設為 --no-from,直接使用提交作者作為補丁郵件的 "From:" 欄位。如果設為 true,format-patch 預設為 --from,使用您的提交者身分作為補丁郵件的 "From:" 欄位,並在必要時於補丁郵件主體中包含 "From:" 欄位。如果設為非布林值,format-patch 將使用該值而不是您的提交者身分。預設值為 false。

format.forceInBodyFrom

為 format-patch 的 --[no-]force-in-body-from 選項提供預設值。預設值為 false。

format.numbered

一個布林值,可以啟用或停用補丁主題中的序號。預設為 "auto",僅在補丁超過一個時啟用。可以透過將其設為 "true" 或 "false" 來為所有訊息啟用或停用。參見 git-format-patch[1] 中的 --numbered 選項。

format.headers

要包含在透過郵件提交的補丁中的額外電子郵件標頭。參見 git-format-patch[1]

format.to
format.cc

要包含在透過郵件提交的補丁中的額外收件人。參見 git-format-patch[1] 中的 --to 和 --cc 選項。

format.subjectPrefix

format-patch 的預設值是輸出帶有 [PATCH] 主題字首的檔案。使用此變數可更改該字首。

format.coverFromDescription

format-patch 的預設模式,用於決定封面信 (cover letter) 的哪些部分將使用分支的描述來填充。參見 git-format-patch[1] 中的 --cover-from-description 選項。

format.signature

format-patch 的預設值是輸出包含 Git 版本號的簽名。使用此變數來更改該預設值。將此變數設為空字串 ("") 可抑制簽名生成。

format.signatureFile

功能與 format.signature 相同,除了此變數指定的檔案內容將作為簽名。

format.suffix

format-patch 的預設值是輸出帶有 .patch 後綴的檔案。使用此變數來更改該後綴(如果您需要點號,請確保包含它)。

format.encodeEmailHeaders

使用 "Q-encoding"(在 RFC 2047 中描述)對包含非 ASCII 字元的電子郵件標頭進行編碼,以進行電子郵件傳輸。預設值為 true。

format.pretty

log/show/whatchanged 指令的預設簡美格式 (pretty format)。參見 git-log[1], git-show[1], git-whatchanged[1]

format.thread

git format-patch 的預設執行緒樣式。可以是布林值,或者 shallowdeepshallow 執行緒化使每封郵件成為對系列首部的回覆,首部依序從封面信、--in-reply-to 和第一封補丁郵件中選擇。deep 執行緒化使每封郵件成為對上一封郵件的回覆。布林值 true 等同於 shallow,而 false 則停用執行緒化。

format.signOff

一個布林值,讓您預設啟用 format-patch 的 -s/--signoff 選項。注意:向補丁添加 Signed-off-by 簽署欄應該是有意識的行為,這意味著您證明您有權利在相同的開源許可證下提交此工作。請參閱 SubmittingPatches 文件以獲取進一步討論。

format.coverLetter

一個布林值,控制呼叫 format-patch 時是否生成封面信,此外還可設為 "auto",僅在補丁超過一個時才生成封面信。預設值為 false。

format.commitListFormat

當未給定 --cover-letter-format 選項時,format-patch 使用此變數的值來決定如何格式化每個提交的條目。預設值為 shortlog

format.outputDirectory

設定自訂目錄以儲存產生的檔案,而不是目前的的工作目錄。所有目錄組件都將被建立。

format.filenameMaxLength

format-patch 指令所產生的輸出檔案名稱的最大長度;預設為 64。可透過命令列選項 --filename-max-length=<n> 覆蓋。

format.useAutoBase

一個布林值,讓您預設啟用 format-patch 的 --base=auto 選項。也可以設為 "whenAble",允許在有合適基準 (base) 可用的情況下啟用 --base=auto,否則在不中止格式化的情況下跳過添加基準資訊。

format.notes

為 format-patch 的 --notes 選項提供預設值。接受布林值或指定從何處獲取筆記的參照 (ref)。如果為 false,format-patch 預設為 --no-notes。如果為 true,format-patch 預設為 --notes。如果設為非布林值,format-patch 預設為 --notes=<ref>,其中 ref 為該非布林值。預設值為 false。

如果希望使用參照 refs/notes/true,請使用該字面量。

此配置可以多次指定,以允許包含多個筆記參照。在這種情況下,它的行為將類似於傳入多個 --[no-]notes[=] 選項。也就是說,值 true 將顯示預設筆記,值 <ref> 也將顯示來自該筆記參照的筆記,而值 false 將抵銷先前的配置而不顯示筆記。

例如,

[format]
	notes = true
	notes = foo
	notes = false
	notes = bar

將僅顯示來自 refs/notes/bar 的筆記。

format.mboxrd

一個布林值,在使用 --stdout 時啟用強健的 "mboxrd" 格式,以轉義 "^>+From " 行。

format.noprefix

如果設定,補丁中將不顯示任何來源或目標字首。這等同於 git diff 使用的 diff.noprefix 選項(但 format-patch 不會遵從後者)。請注意,透過設定此項,您生成的任何補丁的接收者都必須使用 -p0 選項來應用它們。

fsck.<msg-id>

在 fsck 期間,git 可能會發現舊版資料的問題,這些問題不會由當前版本的 git 生成,也不會在 transfer.fsckObjects 設定時透過網路傳送。此功能旨在支援處理包含此類資料的舊版倉庫。

設定 fsck.<msg-id> 將被 git-fsck[1] 採用,但若要接受此類資料的推送,請改為設定 receive.fsck.<msg-id>,或者若要複製 (clone) 或提取 (fetch) 此類資料,請設定 fetch.fsck.<msg-id>

為了簡潔起見,本文檔的其餘部分討論 fsck.*,但同樣適用於相應的 receive.fsck.*fetch.fsck.* 變數。

color.uicore.editor 等變數不同,如果未設定 receive.fsck.<msg-id>fetch.fsck.<msg-id> 變數,它們不會回退到 fsck.<msg-id> 配置。為了在不同情況下統一配置相同的 fsck 設定,這三個變數都必須設定為相同的值。

當設定 fsck.<msg-id> 時,可以透過配置 fsck.<msg-id> 設定將錯誤轉換為警告,反之亦然。其中 <msg-id> 是 fsck 訊息 ID,值為 errorwarnignore 之一。為了方便起見,fsck 會在錯誤/警告前加上訊息 ID,例如 "missingEmail: invalid author/committer line - missing email" 意味著設定 fsck.missingEmail = ignore 將隱藏該問題。

通常,最好使用 fsck.skipList 列舉存在問題的現有物件,而不是列出這些有問題的物件所共有且應被忽略的損壞類型,因為後者會允許相同類型的新錯誤未被察覺。

設定未知的 fsck.<msg-id> 值將導致 fsck 中止,但對 receive.fsck.<msg-id>fetch.fsck.<msg-id> 執行相同操作只會導致 git 發出警告。

有關 <msg-id> 的支援值,請參閱 git-fsck[1]Fsck Messages 章節。

fsck.skipList

指向物件名稱列表的路徑(即每行一個未縮寫的 SHA-1),這些物件已知以非致命方式損壞且應被忽略。在 Git 2.20 及更高版本中,註解 (#)、空行以及任何前導和尾隨空白都會被忽略。在舊版本中,每行除了 SHA-1 之外的任何內容都會導致錯誤。

此功能在已建立的專案儘管包含可安全忽略的錯誤(例如無效的提交者電子郵件地址)的早期提交而仍需被接受時非常有用。注意:損壞的物件不能透過此設定跳過。

fsck.<msg-id> 一樣,此變數具有相應的 receive.fsck.skipListfetch.fsck.skipList 變體。

color.uicore.editor 等變數不同,如果未設定 receive.fsck.skipListfetch.fsck.skipList 變數,它們不會回退到 fsck.skipList 配置。為了在不同情況下統一配置相同的 fsck 設定,這三個變數都必須設定為相同的值。

舊版本的 Git(2.20 之前)記錄說物件名稱列表應該排序。這從來都不是要求;物件名稱可以以任何順序出現,但在讀取列表時,我們會追蹤列表是否已排序,以用於內部二進位搜尋實現,這可以為已排序的列表節省工作。除非您有龐大的列表,否則沒有理由特意預先排序。在 Git 2.20 版本之後,改用了雜湊 (hash) 實現,因此現在沒有理由預先排序列表。

fsmonitor.allowRemote

預設情況下,fsmonitor 守護行程拒絕與網路掛載的倉庫一起工作。將 fsmonitor.allowRemote 設為 true 可覆蓋此行為。僅在 core.fsmonitor 設為 true 時生效。

fsmonitor.socketDir

此 Mac OS 特有的選項(若已設定)指定了用於 fsmonitor 守護行程與各種 Git 指令之間通訊的 Unix 網域通訊端 (Unix domain socket) 建立目錄。該目錄必須位於原生 Mac OS 檔案系統上。僅在 core.fsmonitor 設為 true 時生效。

gc.aggressiveDepth

git gc --aggressive 所使用的差異壓縮演算法中的深度參數。預設為 50,這也是未使用 --aggressive--depth 選項的預設值。

更多詳細資訊,請參閱 git-repack[1]--depth 選項的說明文件。

gc.aggressiveWindow

git gc --aggressive 所使用的差異壓縮演算法中的視窗大小參數。預設為 250,這是一個比預設的 --window 值 10 更積極的視窗大小。

更多詳細資訊,請參閱 git-repack[1]--window 選項的說明文件。

gc.auto

當倉庫中的鬆散物件大約超過此數量時,git gc --auto 將會對其進行封裝。某些 Porcelain 指令會使用此指令不時執行輕量級垃圾回收。預設值為 6700。

將此值設為 0 不僅會停用基於鬆散物件數量的自動封裝,還會停用 git gc --auto 可能用來判斷是否有工作要做的任何其他啟發式方法,例如 gc.autoPackLimit

gc.autoPackLimit

當倉庫中未標記 *.keep 檔案的封裝檔數量超過此值時,git gc --auto 會將它們合併成一個較大的封裝檔。預設值為 50。將此值設為 0 可停用此功能。將 gc.auto 設為 0 也會停用此功能。

請參閱下方的 gc.bigPackThreshold 配置變數。使用時,它會影響自動封裝限制的運作方式。

gc.autoDetach

如果系統支援,使 git gc --auto 立即返回並在後台執行。預設值為 true。若未設定 maintenance.autoDetach,此配置變數將作為後備。

gc.bigPackThreshold

如果為非零值,當執行 git gc 時,所有大於此限制的非 cruft 封裝檔都會被保留。這與 --keep-largest-pack 非常相似,除了所有符合閾值的非 cruft 封裝檔都會被保留,而不僅僅是最大的封裝檔。預設值為 0。支援 kmg 等常見單位後綴。

請注意,如果保留的封裝檔數量超過 gc.autoPackLimit,此配置變數將被忽略,除了基礎封裝檔之外的所有封裝檔都將被重新封裝。之後封裝檔數量應該會低於 gc.autoPackLimit,且 gc.bigPackThreshold 應該會再次被遵從。

如果 git repack 平穩執行所需的估計記憶體不可用,且未設定 gc.bigPackThreshold,則最大的封裝檔也將被排除(這等同於使用 --keep-largest-pack 執行 git gc)。

gc.writeCommitGraph

如果為 true,則執行 git-gc[1] 時,gc 會重寫提交圖檔案。當使用 git gc --auto 時,如果需要內務處理,提交圖將會更新。預設值為 true。詳情請參閱 git-commit-graph[1]

gc.logExpiry

如果 gc.log 檔案存在,則 git gc --auto 將列印其內容並以狀態碼 0 退出,而不是執行 gc 操作,除非該檔案的時間超過 gc.logExpiry。預設值為 "1.day"。有關指定其值的更多方法,請參閱 gc.pruneExpire

gc.packRefs

在倉庫中執行 git pack-refs 會使其無法被 1.5.1.2 之前的 Git 版本透過 HTTP 等笨傳輸 (dumb transports) 進行複製。此變數決定 git gc 是否執行 git pack-refs。可以將其設為 notbare 以在所有非 bare 倉庫中啟用它,或者設為布林值。預設值為 true

gc.cruftPacks

將無法存取的物件儲存在 cruft pack 中(參見 git-repack[1]),而不是作為鬆散物件。預設值為 true

gc.maxCruftSize

重新封裝時限制新的 cruft pack 的大小。當與 --max-cruft-size 一起指定時,命令列選項優先。參見 git-repack[1]--max-cruft-size 選項。

gc.pruneExpire

執行 git gc 時,它將呼叫 prune --expire 2.weeks.ago(如果透過 gc.cruftPacks--cruft 使用 cruft packs,則為 repack --cruft --cruft-expiration 2.weeks.ago)。使用此配置變數覆蓋寬限期。值 "now" 可用於停用此寬限期並始終立即修剪無法存取的物件,或者 "never" 可用於抑制修剪。此功能有助於在 git gc 與另一個向倉庫寫入的程序並行執行時防止損壞;請參閱 git-gc[1] 的 "NOTES" 章節。

gc.worktreePruneExpire

當執行 git gc 時,它會呼叫 git worktree prune --expire 3.months.ago。此配置變數可用於設定不同的寬限期。值 "now" 可用於停用寬限期並立即修剪 $GIT_DIR/worktrees,或者 "never" 可用於抑制修剪。

gc.reflogExpire
gc.<pattern>.reflogExpire

git reflog expire 刪除早於此時間的 reflog 條目;預設為 90 天。值 "now" 立即使所有條目過期,"never" 則完全抑制過期。中間帶有 "<pattern>"(例如 "refs/stash")時,該設定僅適用於符合該 <pattern> 的參照。

gc.reflogExpireUnreachable
gc.<pattern>.reflogExpireUnreachable

git reflog expire 刪除早於此時間且無法從當前頂端 (tip) 存取的 reflog 條目;預設為 30 天。值 "now" 立即使所有條目過期,"never" 則完全抑制過期。中間帶有 "<pattern>"(例如 "refs/stash")時,該設定僅適用於符合該 <pattern> 的參照。

這類條目通常是因使用 git commit --amendgit rebase 而產生的,且為修正或變基 (rebase) 發生前的提交。由於這些變更不是當前專案的一部分,大多數使用者會希望更快使它們過期,這就是為什麼預設值比 gc.reflogExpire 更積極的原因。

gc.recentObjectsHook

在考慮是否移除物件(無論是在生成 cruft pack 還是將無法存取的物件儲存為鬆散物件時)時,使用 shell 執行指定的指令。將其輸出解釋為 Git 將視為 "最近" 的物件 ID,無論其年齡如何。透過將其 mtime 視為 "now",輸出中提到的任何物件(及其後代)都將被保留,無論其真實年齡如何。

輸出必須每行精確包含一個十六進位物件 ID,且不含其他內容。倉庫中找不到的物件將被忽略。支援多個 Hook,但所有 Hook 都必須成功退出,否則操作(生成 cruft pack 或解包無法存取的物件)將被中止。

gc.repackFilter

重新封裝時,使用指定的過濾器將某些物件移至單獨的封裝檔。參見 git-repack[1]--filter=<filter-spec> 選項。

gc.repackFilterTo

重新封裝並使用過濾器時,請參閱 gc.repackFilter,指定的目錄將用於建立包含過濾後物件的封裝檔。警告:指定的目錄應該是可存取的,例如使用 Git alternates 機制,否則 Git 可能認為倉庫已損壞,因為它可能無法存取該封裝檔中的物件。參見 git-repack[1]--filter-to=<dir> 選項以及 gitrepository-layout[5]objects/info/alternates 章節。

gc.rerereResolved

當執行 git rerere gc 時,您先前解決的衝突合併記錄將保留此天數。您也可以使用更具可讀性的 "1.month.ago" 等。預設為 60 天。參見 git-rerere[1]

gc.rerereUnresolved

當執行 git rerere gc 時,您尚未解決的衝突合併記錄將保留此天數。您也可以使用更具可讀性的 "1.month.ago" 等。預設為 15 天。參見 git-rerere[1]

gitcvs.commitMsgAnnotation

將此字串附加到每個提交訊息。設為空字串可停用此功能。預設為 "via git-CVS emulator"。

gitcvs.enabled

此倉庫是否啟用了 CVS 伺服器介面。參見 git-cvsserver[1]

gitcvs.logFile

CVS 伺服器介面記錄各種事務的日誌檔案路徑。參見 git-cvsserver[1]

gitcvs.usecrlfattr

如果為 true,伺服器將查詢檔案的行尾轉換屬性以決定要使用的 -k 模式。如果屬性強迫 Git 將檔案視為文字,則 -k 模式將保持空白,以便 CVS 用戶端將其視為文字。如果它們抑制文字轉換,檔案將以 -kb 模式設定,這會抑制用戶端可能執行的任何換行符修改。如果屬性無法判斷檔案類型,則使用 gitcvs.allBinary。參見 gitattributes[5]

gitcvs.allBinary

如果 gitcvs.usecrlfattr 無法解析正確的 -kb 模式,則使用此項。如果為 true,所有未解析的檔案都將以 -kb 模式傳送到用戶端。這導致用戶端將其視為二進位檔案,抑制其可能執行的任何換行符修改。或者,如果設為 "guess",則檢查檔案內容以決定其是否為二進位,類似於 core.autocrlf

gitcvs.dbName

git-cvsserver 用於快取從 Git 倉庫導出的修訂資訊的資料庫。確切含義取決於所使用的資料庫驅動程式,對於 SQLite(預設驅動程式),這是一個檔案名稱。支援變數替換(詳情參見 git-cvsserver[1])。不得包含分號 (;)。預設值:%Ggitcvs.%m.sqlite

gitcvs.dbDriver

使用的 Perl DBI 驅動程式。您可以在此指定任何可用驅動程式,但不保證能運作。git-cvsserver 已使用 DBD::SQLite 進行測試,據報可與 DBD::Pg 搭配使用,且據報支援 DBD::mysql。實驗性功能。不得包含雙冒號 (:)。預設值:SQLite。參見 git-cvsserver[1]

gitcvs.dbUser
gitcvs.dbPass

資料庫使用者與密碼。僅在設定 gitcvs.dbDriver 時有用,因為 SQLite 沒有資料庫使用者和/或密碼的概念。gitcvs.dbUser 支援變數替換(詳情參見 git-cvsserver[1])。

gitcvs.dbTableNamePrefix

資料庫資料表名稱字首。加在任何使用的資料庫資料表名稱前,允許單個資料庫用於多個倉庫。支援變數替換(詳情參見 git-cvsserver[1])。任何非字母字元將被替換為底線。

gitcvs.usecrlfattrgitcvs.allBinary 外,所有 gitcvs 變數也可以指定為 gitcvs.<access_method>.<varname>(其中 access_method 為 "ext" 或 "pserver" 之一),以使其僅適用於給定的存取方法。

gitweb.category
gitweb.description
gitweb.owner
gitweb.url

描述請參閱 gitweb[1]

gitweb.avatar
gitweb.blame
gitweb.grep
gitweb.highlight
gitweb.patches
gitweb.pickaxe
gitweb.remote_heads
gitweb.showSizes
gitweb.snapshot

描述請參閱 gitweb.conf[5]

gpg.program

在製作或驗證 PGP 簽名時,用於代替 "gpg" 的程式路徑。該程式必須支援與 GPG 相同的命令列介面,即執行 "gpg --verify $signature - <$file" 來驗證分離簽名 (detached signature),且預期該程式透過以退出碼 0 退出,來標示簽名有效。要生成 ASCII 裝甲分離簽名,"gpg -bsau $key" 的標準輸入會被餵入要簽名的內容,預期該程式將結果發送到其標準輸出。

gpg.format

指定使用 --gpg-sign 簽名時使用的金鑰格式。預設為 "openpgp"。其他可能的值為 "x509"、"ssh"。

有關簽名格式,請參閱 gitformat-signature[5],它會根據所選的 gpg.format 而有所不同。

gpg.<format>.program

使用此選項來客製化您選擇的簽名格式所使用的程式。(參見 gpg.programgpg.formatgpg.program 仍可作為 gpg.openpgp.program 的舊式同義詞使用。gpg.x509.program 的預設值為 "gpgsm",而 gpg.ssh.program 為 "ssh-keygen"。

gpg.minTrustLevel

指定簽名驗證的最低信任級別。如果未設定此選項,則合併操作的簽名驗證需要具有至少 marginal(邊緣)信任的金鑰。執行簽名驗證的其他操作則需要具有至少 undefined(未定義)信任的金鑰。設定此選項會覆蓋所有操作所需的信任級別。支援的值依顯著性遞增:

  • undefined

  • never

  • marginal

  • fully

  • ultimate

gpg.ssh.defaultKeyCommand

當未設定 user.signingkey 且要求 ssh 簽名時,將執行此指令。成功退出時,預期在其輸出的第一行獲得以 key:: 為字首的有效 ssh 公鑰。這允許腳本在靜態配置 user.signingKey 不切實際時,對正確的公鑰進行動態查詢。例如,當金鑰或 SSH 憑證頻繁輪換,或正確金鑰的選擇取決於 git 不知道的外部因素時。

gpg.ssh.allowedSignersFile

一個包含您願意信任的 ssh 公鑰的檔案。該檔案由一行或多行主體 (principals) 後跟一個 ssh 公鑰組成。例如:user1@example.com,user2@example.com ssh-rsa AAAAX1... 詳情參見 ssh-keygen(1) 的 "ALLOWED SIGNERS" 章節。主體僅用於識別金鑰,並在驗證簽名時可用。

SSH 沒有像 gpg 那樣的信任級別概念。為了能夠區分有效簽名和受信任簽名,當公鑰存在於 allowedSignersFile 中時,簽名驗證的信任級別設為 fully。否則,信任級別為 undefined,且 git verify-commit/tag 將會失敗。

此檔案可以設在倉庫外部的位置,每個開發人員維護自己的信任儲存。中央倉庫伺服器可以從具有推送存取權限的 ssh 金鑰自動生成此檔案,以驗證程式碼。在企業環境中,此檔案通常是從已經處理開發人員 ssh 金鑰的自動化系統在全域位置生成的。

僅允許已簽名提交的倉庫可以將該檔案儲存在倉庫本身中,使用相對於工作樹頂層的路徑。這樣,只有擁有已有效金鑰的提交者才能新增或更改金鑰環中的金鑰。

自 OpenSSH 8.8 起,此檔案允許使用 valid-after 和 valid-before 選項指定金鑰生命週期。如果簽名金鑰在簽名建立時有效,Git 將標記簽名為有效。這允許使用者更換簽名金鑰而不使所有先前生成的簽名無效。

使用帶有 cert-authority 選項的 SSH CA 金鑰(參見 ssh-keygen(1) 的 "CERTIFICATES" 章節)也是有效的。

gpg.ssh.revocationFile

SSH KRL 或已撤銷公鑰的列表(不含主體字首)。詳情參見 ssh-keygen(1)。如果在此檔案中找到公鑰,它將始終被視為具有 "never" 信任級別,且簽名將顯示為無效。

grep.lineNumber

如果設為 true,預設啟用 -n 選項。

grep.column

如果設為 true,預設啟用 --column 選項。

grep.patternType

設定預設的匹配行為。使用 basicextendedfixedperl 的值將分別啟用 --basic-regexp--extended-regexp--fixed-strings--perl-regexp 選項,而值 default 將使用 grep.extendedRegexp 選項在 basicextended 之間選擇。

grep.extendedRegexp

如果設為 true,預設啟用 --extended-regexp 選項。當 grep.patternType 選項設為 default 以外的值時,此選項會被忽略。

grep.threads

要使用的 grep 工作執行緒數量。如果未設定(或設為 0),Git 將使用與可用邏輯核心數量相同的執行緒數。

grep.fullName

如果設為 true,預設啟用 --full-name 選項。

grep.fallbackToNoIndex

如果設為 true,當在 git 倉庫外執行 git grep 時,回退至 git grep --no-index。預設值為 false。

gui.commitMsgWidth

定義 git-gui[1] 中提交訊息視窗的寬度。"75" 是預設值。

gui.diffContext

指定在 git-gui[1] 進行的 diff 呼叫中應使用多少行上下文行。預設值為 "5"。

gui.displayUntracked

決定 git-gui[1] 是否在檔案列表中顯示未追蹤的檔案。預設值為 "true"。

gui.encoding

指定在 git-gui[1]gitk[1] 中顯示檔案內容時使用的預設字元編碼。它可以透過設定相關檔案的 encoding 屬性來覆蓋(參見 gitattributes[5])。如果未設定此選項,工具將預設使用本地編碼。

gui.matchTrackingBranch

決定使用 git-gui[1] 建立的新分支是否預設追蹤名稱匹配的遠端分支。預設值:"false"。

gui.newBranchTemplate

用作使用 git-gui[1] 建立新分支時建議的名稱。

gui.pruneDuringFetch

如果 git-gui[1] 在執行 fetch 時應修剪遠端追蹤分支,則為 "true"。預設值為 "false"。

gui.trustmtime

決定 git-gui[1] 是否應信任檔案修改時間戳記。預設情況下,不信任時間戳記。

gui.spellingDictionary

指定用於在 git-gui[1] 中檢查提交訊息拼字檢查的字典。當設為 "none" 時,拼字檢查功能將被關閉。

gui.fastCopyBlame

如果為 true,git gui blame 使用 -C 而不是 -C -C 進行原始位置偵測。這使得 blame 在大型倉庫上顯著變快,代價是較不徹底的複製偵測。

gui.copyBlameThreshold

指定在 git gui blame 原始位置偵測中使用的閾值,以字母數字字元數計量。有關複製偵測的更多資訊,請參閱 git-blame[1] 手冊。

gui.blamehistoryctx

指定當從 git gui blame 呼叫 Show History Context 選單項目時,在 gitk[1] 中為所選提交顯示的歷史上下文半徑(以天為單位)。如果此變數設為 0,則顯示整個歷史記錄。

gui.GCWarning

決定當 git 偵測到倉庫中有大量鬆散物件時,git-gui[1] 是否應提示進行垃圾回收。預設值為 "true"。

guitool.<name>.cmd

指定在呼叫 git-gui[1] Tools 選單中的對應項目時要執行的 shell 指令行。此選項對於每個工具都是強制性的。該指令從工作目錄的根目錄執行,並且在環境中,它接收工具名稱作為 GIT_GUITOOL,目前所選檔案名稱作為 FILENAME,以及目前分支名稱作為 CUR_BRANCH(如果 HEAD 分離,CUR_BRANCH 為空)。

guitool.<name>.needsFile

僅在 GUI 中選取了 diff 時才執行工具。它保證 FILENAME 不為空。

guitool.<name>.noConsole

靜默執行指令,不建立顯示輸出的視窗。

guitool.<name>.noRescan

工具執行完成後,不要重新掃描工作目錄的變更。

guitool.<name>.confirm

在實際執行工具之前顯示確認對話框。

guitool.<name>.argPrompt

要求使用者輸入字串引數,並透過 ARGS 環境變數將其傳遞給工具。由於要求引數隱含確認,如果啟用了此項,confirm 選項將無效。如果該選項設為 trueyes1,對話框將使用內建的通用提示;否則將使用該變數的確切值。

guitool.<name>.revPrompt

要求使用者輸入單個有效的修訂版本,並設定 REVISION 環境變數。在其他方面,此選項類似於 argPrompt,且可以與其一起使用。

guitool.<name>.revUnmerged

僅在 revPrompt 子對話框中顯示未合併的分支。這對於類似 merge 或 rebase 的工具很有用,但不適用於像 checkout 或 reset 之類的操作。

guitool.<name>.title

指定提示對話框使用的標題。預設為工具名稱。

guitool.<name>.prompt

指定顯示在對話框頂部的通用提示字串,位於 argPromptrevPrompt 的子區段之前。預設值包含實際執行的指令。

help.browser

指定將用於以 web 格式顯示說明的瀏覽器。參見 git-help[1]

help.format

覆蓋 git-help[1] 使用的預設說明格式。支援 maninfowebhtml 值。預設為 manwebhtml 相同。

help.autoCorrect

如果 git 偵測到輸入錯誤並能準確識別與錯誤類似的一個有效指令,git 將嘗試建議正確的指令,甚至自動執行建議。可能的配置值為:

  • 0, "false", "off", "no", "show": 顯示建議的指令(預設)。

  • 1, "true", "on", "yes", "immediate": 立即執行建議的指令。

  • 大於 1 的正數:在指定的十分之一秒 (0.1 sec) 後執行建議的指令。

  • "never": 不執行或顯示任何建議的指令。

  • "prompt": 顯示建議並提示確認以執行指令。

help.htmlPath

指定 HTML 文件所在的路徑。支援檔案系統路徑和 URL。當以 web 格式顯示說明時,HTML 頁面將以前綴此路徑。預設為您的 Git 安裝文件路徑。

http.proxy

覆蓋 HTTP 代理,通常透過 http_proxyhttps_proxyall_proxy 環境變數配置(參見 curl(1))。除了 curl 理解的語法之外,還可以指定帶有使用者名稱但無密碼的代理字串,在這種情況下,git 將嘗試以與其他憑證相同的方式取得密碼。詳情參見 gitcredentials[7]。語法為 [protocol://][user[:password]@]proxyhost[:port][/path]。這可以在每個遠端倉庫的基礎上被覆蓋;參見 remote.<name>.proxy

任何配置的代理都必須完全透明,且不得以任何方式修改、轉換或緩衝請求或回應。已知非完全透明的代理會導致各種形式的 Git 損壞。

http.proxyAuthMethod

設定與 HTTP 代理進行驗證的方法。僅當配置的代理字串包含使用者名稱部分(即形式為 user@hostuser@host:port)時生效。這可以在每個遠端倉庫的基礎上被覆蓋;參見 remote.<name>.proxyAuthMethod。兩者都可以由 GIT_HTTP_PROXY_AUTHMETHOD 環境變數覆蓋。可能的值為:

  • anyauth - 自動選擇合適的驗證方法。假定代理使用 407 狀態碼回應未經驗證的請求,並附帶一個或多個支援驗證方法的 Proxy-authenticate 標頭。這是預設值。

  • basic - HTTP Basic 驗證

  • digest - HTTP Digest 驗證;這可以防止密碼以明文形式傳輸到代理

  • negotiate - GSS-Negotiate 驗證(對比 curl(1) 的 --negotiate 選項)

  • ntlm - NTLM 驗證(對比 curl(1) 的 --ntlm 選項)

http.proxySSLCert

用於驗證 HTTPS 代理的用戶端憑證的檔案路徑。可由 GIT_PROXY_SSL_CERT 環境變數覆蓋。

http.proxySSLKey

用於驗證 HTTPS 代理的私鑰檔案路徑。可由 GIT_PROXY_SSL_KEY 環境變數覆蓋。

http.proxySSLCertPasswordProtected

為代理 SSL 憑證啟用 Git 的密碼提示。否則,如果憑證或私鑰已加密,OpenSSL 將多次提示使用者。可由 GIT_PROXY_SSL_CERT_PASSWORD_PROTECTED 環境變數覆蓋。

http.proxySSLCAInfo

包含憑證包的檔案路徑,該憑證包用於在使用 HTTPS 代理時驗證代理。可由 GIT_PROXY_SSL_CAINFO 環境變數覆蓋。

http.emptyAuth

嘗試驗證而不尋求使用者名稱或密碼。這可用於在不指定 URL 中的使用者名稱的情況下嘗試 GSS-Negotiate 驗證,因為 libcurl 通常需要驗證使用者名稱。

http.proactiveAuth

嘗試驗證而不先進行未經驗證的嘗試並收到 401 回應。這可用於確保所有請求都經過驗證。如果 http.emptyAuth 設為 true,則此值無效。

如果所使用的憑證輔助程式 (credential helper) 指定了驗證方案(即透過 authtype 欄位),則將使用該值;如果提供了沒有方案的使用者名稱和密碼,則使用 Basic 驗證。該選項的值決定了向輔助程式請求的方案。可能的值為:

  • basic - 向輔助程式請求 Basic 驗證。

  • auto - 允許輔助程式選擇合適的方案。

  • none - 停用主動驗證。

注意,此配置應始終與 TLS 一起使用,否則如果選擇 Basic 驗證,很容易意外暴露明文憑證。

http.delegation

控制 GSSAPI 憑證委派 (delegation)。libcurl 自 7.21.7 版本起預設停用委派。設定參數以告知伺服器在使用者憑證方面允許委派的內容。與 GSS/kerberos 一起使用。可能的值為:

  • none - 不允許任何委派。

  • policy - 僅在 Kerberos 服務票證中設定了 OK-AS-DELEGATE 旗標時才委派,這取決於 realm 策略。

  • always - 無條件允許伺服器委派。

http.extraHeader

與伺服器通訊時傳遞額外的 HTTP 標頭。如果存在多個此類條目,它們都會作為額外標頭添加。為了允許覆蓋從系統配置繼承的設定,空值將重設額外標頭列表為空。

http.cookieFile

包含先前儲存的 cookie 行的檔案路徑,如果它們與伺服器匹配,則應在 Git http 會話中使用。讀取 cookie 的檔案格式應為純 HTTP 標頭或 Netscape/Mozilla cookie 檔案格式(參見 curl(1))。將其設為空字串,以僅接受來自伺服器的新 cookie 並在同一個連線中的後續請求中將其發回。注意,除非設定了 http.saveCookies,否則 http.cookieFile 指定的檔案僅用作輸入。

http.saveCookies

如果設定,將請求期間接收到的 cookie 儲存到 http.cookieFile 指定的檔案中。如果未設定 http.cookieFile 或設為空字串,則無效。

http.version

與伺服器通訊時使用指定的 HTTP 協定版本。如果您想強制使用預設值。可用且預設的版本取決於 libcurl。目前此選項的可能值為:

  • HTTP/2

  • HTTP/1.1

http.curloptResolve

傳送 HTTP 請求時 libcurl 將首先使用的主機名稱解析資訊。此資訊應採用以下格式之一:

  • [+]HOST:PORT:ADDRESS[,ADDRESS]

  • -HOST:PORT

第一種格式將所有對給定 HOST:PORT 的請求重導向到提供的 ADDRESS。第二種格式清除該 HOST:PORT 組合的所有先前配置值。為了允許輕鬆覆蓋從系統配置繼承的所有設定,空值將重設所有解析資訊為空列表。

http.sslVersion

在協商 SSL 連線時要使用的 SSL 版本,如果您想強制使用預設值。可用且預設的版本取決於 libcurl 是針對 NSS 還是 OpenSSL 建構的,以及所使用的加密庫的特定配置。在內部,這會設定 CURLOPT_SSL_VERSION 選項;有關此選項格式的詳細資訊以及支援的 ssl 版本,請參閱 libcurl 文件。目前此選項的可能值為:

  • sslv2

  • sslv3

  • tlsv1

  • tlsv1.0

  • tlsv1.1

  • tlsv1.2

  • tlsv1.3

可由 GIT_SSL_VERSION 環境變數覆蓋。若要強制 git 使用 libcurl 的預設 ssl 版本並忽略任何顯式的 http.sslversion 選項,請將 GIT_SSL_VERSION 設為空字串。

http.sslCipherList

協商 SSL 連線時使用的 SSL 密碼列表。可用密碼取決於 libcurl 是針對 NSS 還是 OpenSSL 建構的,以及所使用的加密庫的特定配置。在內部,這會設定 CURLOPT_SSL_CIPHER_LIST 選項;有關此列表格式的詳細資訊,請參閱 libcurl 文件。

可由 GIT_SSL_CIPHER_LIST 環境變數覆蓋。若要強制 git 使用 libcurl 的預設密碼列表並忽略任何顯式的 http.sslCipherList 選項,請將 GIT_SSL_CIPHER_LIST 設為空字串。

http.sslVerify

透過 HTTPS 提取或推送時是否驗證 SSL 憑證。預設值為 true。可由 GIT_SSL_NO_VERIFY 環境變數覆蓋。

http.sslCert

透過 HTTPS 提取或推送時包含 SSL 憑證的檔案。可由 GIT_SSL_CERT 環境變數覆蓋。

http.sslKey

透過 HTTPS 提取或推送時包含 SSL 私鑰的檔案。可由 GIT_SSL_KEY 環境變數覆蓋。

http.sslCertPasswordProtected

為 SSL 憑證啟用 Git 的密碼提示。否則,如果憑證或私鑰已加密,OpenSSL 將多次提示使用者。可由 GIT_SSL_CERT_PASSWORD_PROTECTED 環境變數覆蓋。

http.sslCAInfo

透過 HTTPS 提取或推送時包含驗證對等方的憑證檔案。可由 GIT_SSL_CAINFO 環境變數覆蓋。

http.sslCAPath

透過 HTTPS 提取或推送時包含驗證對等方的 CA 憑證檔案的路徑。可由 GIT_SSL_CAPATH 環境變數覆蓋。

http.sslBackend

要使用的 SSL 後端名稱(例如 "openssl" 或 "schannel")。如果 cURL 不支援在執行時選擇 SSL 後端,則此選項會被忽略。

http.sslCertType

透過 HTTPS 提取或推送時使用的用戶端憑證類型。使用 openssl 或 gnutls 後端時支援 "PEM"、"DER"。在 "openssl"、"schannel"、"securetransport" 和 gnutls 8.11+ 上支援 "P12"。另參見 libcurl CURLOPT_SSLCERTTYPE。可由 GIT_SSL_CERT_TYPE 環境變數覆蓋。

http.sslKeyType

透過 HTTPS 提取或推送時使用的用戶端私鑰類型(例如 "PEM"、"DER" 或 "ENG")。僅在使用 "openssl" 後端時適用。"DER" 不支援 openssl。特別是在設為 "ENG" 以使用 PKCS#11 權杖進行驗證時非常有用,此時 sslCert 選項中包含 PKCS#11 URL。另參見 libcurl CURLOPT_SSLKEYTYPE。可由 GIT_SSL_KEY_TYPE 環境變數覆蓋。

http.schannelCheckRevoke

當 http.sslBackend 設為 "schannel" 時,用於在 cURL 中強制執行或停用憑證撤銷檢查。如果未設定,預設值為 true。僅在 Git 持續報錯且訊息是關於檢查憑證撤銷狀態時,才需要停用此項。如果 cURL 不支援在執行時設定相關 SSL 選項,此選項會被忽略。

http.schannelUseSSLCAInfo

自 cURL v7.60.0 起,Secure Channel 後端可以使用透過 http.sslCAInfo 提供的憑證包,但這會覆蓋 Windows 憑證存放區。由於這在預設情況下並不理想,當透過 http.sslBackend 配置了 schannel 後端時,Git 預設會告知 cURL 不要使用該憑證包,除非 http.schannelUseSSLCAInfo 覆蓋此行為。

http.pinnedPubkey

https 服務的公鑰。它可以是 PEM 或 DER 編碼公鑰檔案的檔案名稱,也可以是以 sha256// 開頭,後跟公鑰的 base64 編碼 sha256 雜湊的字串。另參見 libcurl CURLOPT_PINNEDPUBLICKEY。如果設定此選項但 cURL 不支援,git 將以錯誤退出。

http.sslTry

透過常規 FTP 協定連線時,嘗試使用 AUTH SSL/TLS 和加密資料傳輸。如果 FTP 伺服器因安全原因要求這樣做,或者您希望在遠端 FTP 伺服器支援時始終安全連線,則可能需要這樣做。預設值為 false,因為它可能會在配置錯誤的伺服器上引發憑證驗證錯誤。

http.maxRequests

同時啟動的 HTTP 請求數量。可由 GIT_HTTP_MAX_REQUESTS 環境變數覆蓋。預設值為 5。

http.minSessions

在請求之間保留的 curl 會話數量(跨槽位計算)。在呼叫 http_cleanup() 之前,它們不會以 curl_easy_cleanup() 結束。如果未定義 USE_CURL_MULTI,此值將被限制為 1。預設值為 1。

http.postBuffer

智慧 HTTP 傳輸在將資料 POST 到遠端系統時所使用的緩衝區最大位元組大小。對於大於此緩衝區大小的請求,使用 HTTP/1.1 和 Transfer-Encoding: chunked,以避免在本地建立巨大的封裝檔。預設值為 1 MiB,這足以滿足大多數請求。

請注意,提高此限制僅對停用分塊傳輸編碼有效,因此應僅在遠端伺服器或代理僅支援 HTTP/1.0 或不符合 HTTP 標準時使用。通常,提高此限制對於大多數推送問題並非有效的解決方案,但會顯著增加記憶體消耗,因為即使對於小推送,也會分配整個緩衝區。

http.lowSpeedLimit
http.lowSpeedTime

如果 HTTP 傳輸速度(以每秒位元組數計)低於 http.lowSpeedLimit 的時間長於 http.lowSpeedTime 秒,則傳輸將被中止。可由 GIT_HTTP_LOW_SPEED_LIMITGIT_HTTP_LOW_SPEED_TIME 環境變數覆蓋。

http.keepAliveIdle

指定在傳送 TCP keepalive 探測(如果 OS 支援)之前,在閒置連線上等待的秒數。如果未設定,則使用 curl 的預設值。可由 GIT_HTTP_KEEPALIVE_IDLE 環境變數覆蓋。

http.keepAliveInterval

指定 TCP keepalive 探測之間等待的秒數(如果 OS 支援)。如果未設定,則使用 curl 的預設值。可由 GIT_HTTP_KEEPALIVE_INTERVAL 環境變數覆蓋。

http.keepAliveCount

指定在放棄並終止連線之前發送多少個 TCP keepalive 探測(如果 OS 支援)。如果未設定,則使用 curl 的預設值。可由 GIT_HTTP_KEEPALIVE_COUNT 環境變數覆蓋。

http.retryAfter

當伺服器返回 HTTP 429(請求過多)且沒有 Retry-After 標頭時,預設的重試等待秒數。預設值為 0(立即重試)。當存在 Retry-After 標頭時,其值優先於此設定;然而,自動使用伺服器提供的 Retry-After 標頭需要 libcurl 7.66.0 或更高版本。在舊版本上,請手動配置此設定以控制重試延遲。可由 GIT_HTTP_RETRY_AFTER 環境變數覆寫。另請參閱 http.maxRetrieshttp.maxRetryTime

http.maxRetries

接收到 HTTP 429(請求過多)回應後的最大重試次數。設為 0(預設值)以停用重試。可由 GIT_HTTP_MAX_RETRIES 環境變數覆寫。另請參閱 http.retryAfterhttp.maxRetryTime

http.maxRetryTime

處理 HTTP 429(請求過多)回應時,單次重試嘗試的最大等待秒數。如果伺服器請求延遲(透過 Retry-After 標頭),或者如果 http.retryAfter 設定的值超過此最大值,Git 將立即失敗而不是等待。預設為 300 秒(5 分鐘)。可由 GIT_HTTP_MAX_RETRY_TIME 環境變數覆寫。另請參閱 http.retryAfterhttp.maxRetries

http.noEPSV

一個布林值,用於停用 curl 使用 EPSV FTP 指令。這對於某些不支援 EPSV 模式的「拙劣」FTP 伺服器很有幫助。可由 GIT_CURL_FTP_NO_EPSV 環境變數覆寫。預設為 false(curl 將使用 EPSV)。

http.userAgent

提供給 HTTP 伺服器的 HTTP USER_AGENT 字串。預設值代表 Git 用戶端的版本,例如 git/1.7.1。此選項允許您將此值覆寫為更常見的值,例如 Mozilla/4.0。例如,如果您透過防火牆連線,而該防火牆限制 HTTP 連線僅能使用一組常見的 USER_AGENT 字串(但不包含像 git/1.7.1 這類字串),這可能是必要的。可由 GIT_HTTP_USER_AGENT 環境變數覆寫。

http.followRedirects

Git 是否應該遵循 HTTP 重新導向。如果設為 true,Git 將透明地遵循伺服器遇到的任何重新導向。如果設為 false,Git 將把所有重新導向視為錯誤。如果設為 initial,Git 將僅針對遠端的初始請求遵循重新導向,但不會針對後續的跟進 HTTP 請求。由於 Git 使用重新導向後的 URL 作為後續請求的基礎,這通常已足夠。預設值為 initial

http.<url>.*

上述任何 http.* 選項都可以選擇性地應用於某些 URL。為了讓設定鍵與 URL 匹配,設定鍵的每個元素會依以下順序與 URL 的對應元素進行比較:

  1. Scheme(例如 https://example.com/ 中的 https)。此欄位必須在設定鍵和 URL 之間完全匹配。

  2. 主機/網域名稱(例如 https://example.com/ 中的 example.com)。此欄位必須在設定鍵和 URL 之間匹配。可以在主機名稱中指定 * 來匹配該層級的所有子網域。例如,https://*.example.com/ 將匹配 https://foo.example.com/,但不會匹配 https://foo.bar.example.com/

  3. 連接埠號(例如 http://example.com:8080/ 中的 8080)。此欄位必須在設定鍵和 URL 之間完全匹配。在匹配前,省略的連接埠號會自動轉換為該 scheme 的正確預設值。

  4. 路徑(例如 https://example.com/repo.git 中的 repo.git)。設定鍵的路徑欄位必須與 URL 的路徑欄位完全匹配,或是作為斜線分隔路徑元素的前綴。這意味著路徑為 foo/ 的設定鍵可以匹配 URL 路徑 foo/bar。前綴只能在斜線(/)邊界上匹配。較長的匹配優先(因此路徑為 foo/bar 的設定鍵比僅有路徑 foo/ 的設定鍵更能匹配 URL 路徑 foo/bar)。

  5. 使用者名稱(例如 https://user@example.com/repo.git 中的 user)。如果設定鍵具有使用者名稱,則必須與 URL 中的使用者名稱完全匹配。如果設定鍵沒有使用者名稱,該設定鍵將匹配具有任何使用者名稱(包括無使用者名稱)的 URL,但優先順序低於具有使用者名稱的設定鍵。

上述清單按優先順序遞減排序;匹配設定鍵路徑的 URL 優於匹配其使用者名稱的 URL。例如,如果 URL 是 https://user@example.com/foo/bar,則設定鍵匹配 https://example.com/foo 的優先順序高於設定鍵匹配 https://user@example.com

所有 URL 在嘗試任何匹配之前都會經過正規化(如果嵌入在 URL 中,密碼部分總是會被忽略以進行匹配),以便拼寫方式不同但等效的 URL 能夠正確匹配。環境變數設定總是會覆寫任何匹配。與之匹配的 URL 是直接提供給 Git 指令的 URL。這意味著因重新導向而訪問的任何 URL 不參與匹配。

i18n.commitEncoding

提交訊息儲存時的字元編碼;Git 本身不關心編碼,但當從電子郵件匯入提交,或在 gitk 圖形化歷史瀏覽器中(以及未來可能在其他地方或在其他介面中)時,此資訊是必要的。請參閱例如 git-mailinfo[1]。預設為 utf-8

i18n.logOutputEncoding

執行 git log 及相關指令時,提交訊息被轉換成的字元編碼。

imap.folder

放置郵件的資料夾,通常是 Drafts 資料夾。例如:INBOX.DraftsINBOX/Drafts[Gmail]/Drafts。必須指定要與之互動的 IMAP 資料夾;當未提供 --folder 選項時,此配置變數的值將用作後備預設值。

imap.tunnel

用於建立通往 IMAP 伺服器通道的指令,指令將透過該通道傳輸,而不是使用與伺服器的直接網路連線。當未設定 imap.host 時,此為必需項目。

imap.host

標識伺服器的 URL。非安全連線請使用 imap:// 前綴,安全連線請使用 imaps:// 前綴。當設定了 imap.tunnel 時,此設定會被忽略,否則為必需。

imap.user

登入伺服器時使用的使用者名稱。

imap.pass

登入伺服器時使用的密碼。

imap.port

要連線至伺服器的整數連接埠號。imap:// 主機預設為 143,imaps:// 主機預設為 993。當設定了 imap.tunnel 時會被忽略。

imap.sslverify

一個布林值,用於啟用/停用對 SSL/TLS 連線所使用的伺服器憑證進行驗證。預設值為 true。當設定了 imap.tunnel 時會被忽略。

imap.preformattedHTML

一個布林值,用於啟用/停用傳送修補檔 (patch) 時使用 HTML 編碼。以 HTML 編碼的修補檔將會被 <pre> 標籤包圍,並具有 text/html 的內容類型。具有諷刺意味的是,啟用此選項會導致 Thunderbird 將修補檔作為 plain/text, format=fixed 的電子郵件傳送。預設值為 false

imap.authMethod

指定用於驗證 IMAP 伺服器的驗證方法。如果 Git 是在編譯時帶有 NO_CURL 選項,或者您的 curl 版本早於 7.34.0,或者您以 --no-curl 選項執行 git-imap-send,則唯一支援的方法是 PLAINCRAM-MD5OAUTHBEARERXOAUTH2。如果未設定此項,則 git imap-send 會使用基本的 IMAP 純文字 LOGIN 指令。

include.path
includeIf.<condition>.path

用於包含其他設定檔的特殊變數。請參閱主 git-config[1] 文件中的「CONFIGURATION FILE」章節,特別是「Includes」和「Conditional Includes」小節。

index.recordEndOfIndexEntries

指定索引檔是否應包含「索引條目結尾 (End Of Index Entry)」區段。這會減少多處理器機器上的索引載入時間,但在使用舊於 2.20 的 Git 版本讀取索引時,會產生「ignoring EOIE extension」的訊息。如果已明確啟用 index.threads,則預設為 true,否則為 false

index.recordOffsetTable

指定索引檔是否應包含「索引條目偏移表 (Index Entry Offset Table)」區段。這會減少多處理器機器上的索引載入時間,但在使用舊於 2.20 的 Git 版本讀取索引時,會產生「ignoring IEOT extension」的訊息。如果已明確啟用 index.threads,則預設為 true,否則為 false

index.sparse

啟用時,使用稀疏目錄 (sparse-directory) 條目寫入索引。除非同時啟用 core.sparseCheckoutcore.sparseCheckoutCone,否則此設定無效。預設為 false

index.threads

指定載入索引時要建立的執行緒數量。這旨在減少多處理器機器上的索引載入時間。指定 0 或 true 將導致 Git 自動偵測 CPU 數量並相應設定執行緒數量。指定 1 或 false 將停用多執行緒。預設為 true

index.version

指定初始化新索引檔時的版本。這不會影響現有的儲存庫。如果啟用了 feature.manyFiles,則預設值為 4。

index.skipHash

啟用時,不要計算索引檔的結尾雜湊值。這會加速操作索引的 Git 指令,例如 git addgit commitgit status。不儲存校驗和,而是寫入一組值為零的結尾位元組,表示已跳過計算。

如果您啟用 index.skipHash,則舊於 2.13.0 的 Git 用戶端將拒絕解析索引,且舊於 2.40.0 的 Git 用戶端在執行 git fsck 時會報告錯誤。

init.templateDir

指定複製範本的目錄。(請參閱 git-init[1] 的「TEMPLATE DIRECTORY」章節。)

init.defaultBranch

允許覆寫預設分支名稱,例如在初始化新版本庫時。

init.defaultObjectFormat

允許為新版本庫覆寫預設物件格式。請參閱 git-init[1] 中的 --object-format=。命令列選項和 GIT_DEFAULT_HASH 環境變數的優先級皆高於此設定。

init.defaultRefFormat

允許為新版本庫覆寫預設參照(ref)儲存格式。請參閱 git-init[1] 中的 --ref-format=。命令列選項和 GIT_DEFAULT_REF_FORMAT 環境變數的優先級皆高於此設定。

init.defaultSubmodulePathConfig

一個布林值,指定 git initgit clone 是否應自動將 extensions.submodulePathConfig 設定為 true。這允許所有新版本庫自動使用子模組路徑擴充功能。未設定時預設為 false

instaweb.browser

指定用於在 gitweb 中瀏覽工作儲存庫的程式。請參閱 git-instaweb[1]

instaweb.httpd

在工作儲存庫上啟動 gitweb 的 HTTP 常駐程式命令列。請參閱 git-instaweb[1]

instaweb.local

如果為 true,則由 git-instaweb[1] 啟動的網頁伺服器將綁定到本機 IP (127.0.0.1)。

instaweb.modulePath

git-instaweb[1] 使用的預設模組路徑,用以取代 /usr/lib/apache2/modules。僅在 httpd 為 Apache 時使用。

instaweb.port

要綁定 gitweb httpd 的連接埠號。請參閱 git-instaweb[1]

interactive.singleKey

當設為 true 時,允許使用者在互動式指令中使用單一按鍵(即無需按下 Enter 鍵)提供單字元輸入。這目前用於 git-add[1]git-checkout[1]git-restore[1]git-commit[1]git-reset[1]git-stash[1]--patch 模式。

interactive.diffFilter

當互動式指令(例如 git add --patch)顯示彩色差異時,git 會透過此設定變數定義的 shell 指令來處理差異。指令可以進一步標記差異以供人類閱讀,前提是它保留與原始差異中各行的一對一對應關係。預設為停用(無過濾)。

log.abbrevCommit

如果 true,使 git-log[1]git-show[1]git-whatchanged[1] 預設採用 --abbrev-commit。您可以使用 --no-abbrev-commit 覆寫此選項。

log.date

log 指令設定預設的日期時間模式。設定 log.date 的值類似於使用 git log--date 選項。詳情請參閱 git-log[1]

如果格式設為 "auto:foo" 且正在使用分頁器,則日期格式將使用 "foo" 格式。否則,將使用 "default"。

log.decorate

列印 log 指令所顯示的任何提交的參照名稱 (ref names)。可能的值有:

short

不列印參照名稱前綴 refs/heads/refs/tags/refs/remotes/

full

列印完整的參照名稱(包括前綴)。

auto

如果輸出到終端機,參照名稱會顯示為好像給定了 short 一樣,否則不顯示任何參照名稱。

這與 git log--decorate 選項相同。

log.initialDecorationSet

預設情況下,git log 僅顯示某些已知參照命名空間的修飾。如果指定 all,則顯示所有參照作為修飾。

log.excludeDecoration

從 log 修飾中排除指定的模式。這類似於 --decorate-refs-exclude 指令列選項,但設定選項可以被 --decorate-refs 選項覆寫。

log.diffMerges

設定指定 --diff-merges=on 時使用的差異格式,詳情請參閱 git-log[1] 中的 --diff-merges。預設為 separate

log.follow

如果 true,當給定單一 <path> 時,git log 的行為就像使用了 --follow 選項一樣。這具有與 --follow 相同的限制,即它不能用於追蹤多個檔案,且在非線性歷史記錄上效果不佳。

log.graphColors

用於在 git log --graph 中繪製歷史線條的顏色列表,以逗號分隔。

log.showRoot

如果為 true,初始提交將顯示為一個巨大的創建事件。這相當於與空樹進行比較。通常隱藏根提交的工具(如 git-log[1]git-whatchanged[1])現在將顯示它。預設為 True。

log.showSignature

如果為 true,使 git-log[1]git-show[1]git-whatchanged[1] 預設採用 --show-signature

log.mailmap

如果為 true,使 git-log[1]git-show[1]git-whatchanged[1] 預設採用 --use-mailmap,否則採用 --no-use-mailmap。預設為 True。

lsrefs.unborn

可以是 "advertise"(預設值)、"allow" 或 "ignore"。如果為 "advertise",伺服器將回應客戶端發送的 "unborn"(如 gitprotocol-v2[5] 中所述),並在協定 v2 功能通告期間通告對此功能的支援。"allow" 與 "advertise" 相同,只是伺服器不會通告對此功能的支援;這對於無法原子化更新的負載平衡伺服器(例如)非常有用,因為管理員可以設定 "allow",然後在一段延遲後設定 "advertise"。

mailinfo.scissors

如果為 true,使 git-mailinfo[1](以及隨之的 git-am[1])預設行為就好像在指令列上提供了 --scissors 選項一樣。啟用後,此功能會移除剪刀線(即主要由 ">8"、"8<" 和 "-" 組成的線)之前訊息正文中的所有內容。

mailmap.file

增強 mailmap 檔案的位置。位於儲存庫根目錄的預設 mailmap 會先被載入,然後是此變數指向的 mailmap 檔案。mailmap 檔案的位置可以在儲存庫子目錄中,也可以在儲存庫之外。請參閱 git-shortlog[1]git-blame[1]

mailmap.blob

類似於 mailmap.file,但將值視為儲存庫中 blob 的參照。如果同時給定 mailmap.filemailmap.blob,兩者都會被解析,mailmap.file 中的條目優先。在裸 (bare) 儲存庫中,預設為 HEAD:.mailmap。在非裸儲存庫中,預設為空。

maintenance.auto

此布林設定選項控制某些指令在完成正常工作後是否執行 git maintenance run --auto。預設為 true。

maintenance.autoDetach

許多 Git 指令在將資料寫入儲存庫後會觸發自動維護。此布林設定選項控制此自動維護應在前台發生,還是維護程序應分離並繼續在背景執行。

如果未設定,則使用 gc.autoDetach 的值作為備選。如果兩者都未設定,則預設為 true,意味著維護程序將會分離。

maintenance.strategy

此字串設定選項提供了一種指定幾種建議的儲存庫維護策略之一的方法。這會影響 git maintenance run 期間執行哪些任務(前提是沒有提供 --task=<task> 引數)。此設定會影響手動維護、自動維護以及排程維護。執行的任務可能會根據維護類型而有所不同。

可以透過設定 maintenance.<task>.enabledmaintenance.<task>.schedule 來進一步調整維護策略。如果設定了這些值,將使用這些值來取代 maintenance.strategy 提供的預設值。

可能的策略有:

  • none:此策略意味著完全不執行任何任務。這是排程維護的預設策略。

  • gc:此策略執行 gc 任務。

  • geometric:此策略執行封裝檔的幾何重包 (geometric repacking) 並使輔助資料結構保持最新。此策略會讓 reflog 中的資料過期,並移除無法再定位的工作樹。當幾何重包策略決定執行「全部合一」重包時,該策略會為所有不可達物件產生一個 cruft 封裝。已經屬於 cruft 封裝的物件將會過期。

    此重包策略完全取代了 gc 策略,建議用於大型儲存庫。這是手動維護的預設策略。

  • incremental:此設定針對執行不會刪除任何資料的小型維護活動進行最佳化。這不會排程 gc 任務,但會每小時執行 prefetchcommit-graph 任務,每天執行 loose-objectsincremental-repack 任務,每週執行 pack-refs 任務。手動儲存庫維護會使用 gc 任務。

maintenance.<task>.enabled

此布林設定選項控制當沒有為 git maintenance run 指定 --task 選項時,是否執行名稱為 <task> 的維護任務。如果存在 --task 選項,則會忽略這些設定值。預設情況下,只有 maintenance.gc.enabled 為 true。

maintenance.<task>.schedule

此設定選項控制給定的 <task> 是否在 git maintenance run --schedule=<frequency> 指令期間執行。該值必須是 "hourly"(每小時)、"daily"(每天)或 "weekly"(每週)之一。

maintenance.commit-graph.auto

此整數設定選項控制作為 git maintenance run --auto 的一部分,commit-graph 任務執行的頻率。如果為零,則 commit-graph 任務將不會隨 --auto 選項執行。負值將強制任務每次執行。否則,正值意味著當不在 commit-graph 檔案中的可達提交數量至少為 maintenance.commit-graph.auto 的值時,指令應該執行。預設值為 100。

maintenance.loose-objects.auto

此整數設定選項控制作為 git maintenance run --auto 的一部分,loose-objects 任務執行的頻率。如果為零,則 loose-objects 任務將不會隨 --auto 選項執行。負值將強制任務每次執行。否則,正值意味著當鬆散物件的數量至少為 maintenance.loose-objects.auto 的值時,指令應該執行。預設值為 100。

maintenance.loose-objects.batchSize

此整數設定選項控制在 loose-objects 任務期間寫入封裝檔的鬆散物件最大數量。預設為五萬。使用值 0 表示無限制。

maintenance.incremental-repack.auto

此整數設定選項控制作為 git maintenance run --auto 的一部分,incremental-repack 任務執行的頻率。如果為零,則 incremental-repack 任務將不會隨 --auto 選項執行。負值將強制任務每次執行。否則,正值意味著當不在 multi-pack-index 中的封裝檔數量至少為 maintenance.incremental-repack.auto 的值時,指令應該執行。預設值為 10。

maintenance.geometric-repack.auto

此整數設定選項控制作為 git maintenance run --auto 的一部分,geometric-repack 任務執行的頻率。如果為零,則 geometric-repack 任務將不會隨 --auto 選項執行。負值將強制任務每次執行。否則,正值意味著當有封裝檔需要合併以保持幾何級數時,或者當有至少這麼多將被寫入新封裝檔的鬆散物件時,指令應該執行。預設值為 100。

maintenance.geometric-repack.splitFactor

此整數設定選項控制用於幾何序列的因子。有關詳細資訊,請參閱 git-repack[1] 中的 --geometric= 選項。預設為 2

maintenance.reflog-expire.auto

此整數設定選項控制作為 git maintenance run --auto 的一部分,reflog-expire 任務執行的頻率。如果為零,則 reflog-expire 任務將不會隨 --auto 選項執行。負值將強制任務每次執行。否則,正值意味著當 "HEAD" reflog 中過期的 reflog 條目數量至少為 maintenance.loose-objects.auto 的值時,指令應該執行。預設值為 100。

maintenance.rerere-gc.auto

此整數設定選項控制作為 git maintenance run --auto 的一部分,rerere-gc 任務執行的頻率。如果為零,則 rerere-gc 任務將不會隨 --auto 選項執行。負值將強制任務每次執行。否則,任何正值都意味著當 "rr-cache" 目錄存在且至少有一個條目時(無論該條目是否過期),指令就會執行。此啟發式方法將來可能會改進。預設值為 1。

maintenance.worktree-prune.auto

此整數設定選項控制作為 git maintenance run --auto 的一部分,worktree-prune 任務執行的頻率。如果為零,則 worktree-prune 任務將不會隨 --auto 選項執行。負值將強制任務每次執行。否則,正值意味著當可修剪的工作樹數量超過該值時,指令應該執行。預設值為 1。

man.viewer

指定可用於以 man 格式顯示說明的程式。請參閱 git-help[1]

man.<tool>.cmd

指定用於呼叫指定 man 檢視器的指令。指定的指令會在 shell 中執行,並將 man 頁面作為引數傳遞。(請參閱 git-help[1]。)

man.<tool>.path

覆寫可用於以 man 格式顯示說明的指定工具的路徑。請參閱 git-help[1]

merge.conflictStyle

指定合併時衝突區塊寫入工作樹檔案的樣式。預設值為 "merge",它顯示一個 <<<<<<< 衝突標記、一側所做的變更、一個 ======= 標記、另一側所做的變更,然後是一個 >>>>>>> 標記。另一種樣式 "diff3" 在 ======= 標記之前增加了一個 ||||||| 標記和原始文字。"merge" 樣式傾向於產生比 diff3 更小的衝突區域,這既是因為排除了原始文字,也因為當兩側的一組行匹配時,它們會直接從衝突區域中取出。另一種樣式 "zdiff3" 類似於 diff3,但當匹配行出現在衝突區域開頭或結尾附近時,會從衝突區域中移除這些兩側匹配的行。

merge.defaultToUpstream

如果呼叫 merge 時沒有任何提交引數,則使用在遠端追蹤分支中儲存的最後觀察值,合併為目前分支設定的上游分支。會查詢命名 branch.<current-branch>.remote 所指定遠端分支的 branch.<current branch>.merge 值,然後透過 remote.<remote>.fetch 將它們映射到對應的遠端追蹤分支,並合併這些追蹤分支的尖端。預設為 true。

merge.ff

預設情況下,當合併作為目前提交的後代提交時,Git 不會建立額外的合併提交。相反地,目前分支的尖端會快轉 (fast-forwarded)。當設為 false 時,此變數告知 Git 在這種情況下建立一個額外的合併提交(相當於在指令列上提供 --no-ff 選項)。當設為 only 時,僅允許此類快轉合併(相當於在指令列上提供 --ff-only 選項)。

merge.verifySignatures

如果為 true,這相當於 --verify-signatures 指令列選項。詳情請參閱 git-merge[1]

merge.branchdesc

除了分支名稱外,還要在日誌訊息中加入與其相關聯的分支描述文字。預設為 false。

merge.log

除了分支名稱外,還要在日誌訊息中加入最多指定數量的、來自實際被合併提交的一行說明。預設為 false,而 true 是 20 的同義詞。

merge.suppressDest

透過向此多值設定變數新增與整合分支名稱匹配的 glob,為合併到這些整合分支而計算的預設合併訊息將在其標題中省略 "into <分支名稱>"。

值為空的元素可用於清除從先前設定條目累積的 glob 清單。未定義 merge.suppressDest 變數時,為了向後相容,會使用預設值 master

merge.renameLimit

合併期間在重新命名檢測的詳盡部分中要考慮的檔案數量。如果未指定,預設為 diff.renameLimit 的值。如果未指定 merge.renameLimit 且未指定 diff.renameLimit,目前預設為 7000。如果關閉了重新命名檢測,此設定無效。

merge.renames

Git 是否檢測重新命名。如果設為 false,則停用重新命名檢測。如果設為 true,則啟用基本重新命名檢測。預設為 diff.renames 的值。

merge.directoryRenames

Git 是否檢測目錄重新命名,這會影響在歷史記錄的一側新增至目錄的新檔案,而在歷史記錄的另一側該目錄被重新命名時,合併時會發生什麼。可能的值有:

false

目錄重新命名檢測已停用,意味著此類新檔案將留在舊目錄中。

true

目錄重新命名檢測已啟用,意味著此類新檔案將被移動到新目錄中。

conflict

將為此類路徑報告衝突。

如果 merge.renamesfalse,則 merge.directoryRenames 會被忽略並視為 false。預設為 conflict

merge.renormalize

告知 Git 儲存庫中檔案的規範表示形式隨時間而改變(例如,較早的提交記錄著使用 CRLF 行結尾的文字檔案,但較近的提交使用 LF 行結尾)。在此類儲存庫中,對於需要三向內容合併的每個檔案,Git 可以在執行合併之前將提交中記錄的資料轉換為規範形式,以減少不必要的衝突。有關更多資訊,請參閱 gitattributes[5] 中的「Merging branches with differing checkin/checkout attributes」章節。

merge.stat

合併結束時,在 ORIG_HEAD 和合併結果之間列印什麼內容(如果有的話)。可能的值有:

false

什麼都不顯示。

true

顯示 git diff --diffstat --summary ORIG_HEAD

compact

顯示 git diff --compact-summary ORIG_HEAD

但任何無法識別的值(例如未來版本 Git 新增的值)都會被視為 true,而不是觸發錯誤。預設為 true

merge.autoStash

當設為 true 時,在作業開始前自動建立一個臨時暫存條目,並在作業結束後應用它。這意味著您可以在髒工作樹上執行 merge。但是,請小心使用:成功合併後最終應用暫存可能會導致非微小的衝突。此選項可以由 git-merge[1]--no-autostash--autostash 選項覆寫。預設為 false

merge.tool

控制 git-mergetool[1] 使用哪個合併工具。下面的清單顯示了有效的內建值。任何其他值都會被視為自訂合併工具,並要求定義對應的 mergetool.<tool>.cmd 變數。

merge.guitool

當指定 -g/--gui 旗標時,控制 git-mergetool[1] 使用哪個合併工具。下面的清單顯示了有效的內建值。任何其他值都會被視為自訂合併工具,並要求定義對應的 mergetool.<guitool>.cmd 變數。

  • araxis

  • bc

  • codecompare

  • deltawalker

  • diffmerge

  • diffuse

  • ecmerge

  • emerge

  • examdiff

  • guiffy

  • gvimdiff

  • kdiff3

  • meld

  • nvimdiff

  • opendiff

  • p4merge

  • smerge

  • tkdiff

  • tortoisemerge

  • vimdiff

  • vscode

  • winmerge

  • xxdiff

merge.verbosity

控制遞迴合併策略顯示的輸出量。等級 0 除了檢測到衝突時的最終錯誤訊息外,不輸出任何內容。等級 1 僅輸出衝突,等級 2 輸出衝突和檔案變更。等級 5 及以上輸出除錯資訊。預設為等級 2。可由 GIT_MERGE_VERBOSITY 環境變數覆寫。

merge.<driver>.name

為自訂低階合併驅動程式定義人類可讀的名稱。詳情請參閱 gitattributes[5]

merge.<driver>.driver

定義實作自訂低階合併驅動程式的指令。詳情請參閱 gitattributes[5]

merge.<driver>.recursive

命名在執行共同祖先之間的內部合併時要使用的低階合併驅動程式。詳情請參閱 gitattributes[5]

mergetool.<tool>.path

覆寫給定工具的路徑。如果您的工具不在 $PATH 中,這很有用。

mergetool.<tool>.cmd

指定用於呼叫指定合併工具的指令。指定的指令會在 shell 中執行,並提供以下變數:BASE 是包含待合併檔案共同基礎的臨時檔案名稱(如果有的話);LOCAL 是包含目前分支上檔案內容的臨時檔案名稱;REMOTE 是包含來自待合併分支之檔案內容的臨時檔案名稱;MERGED 包含合併工具應寫入成功合併結果的檔案名稱。

mergetool.<tool>.hideResolved

允許使用者為特定工具覆寫全域 mergetool.hideResolved 值。完整說明請參閱 mergetool.hideResolved

mergetool.<tool>.trustExitCode

對於自訂合併指令,指定是否可以使用合併指令的退出代碼來確定合併是否成功。如果未設為 true,則會檢查合併目標檔案的時間戳記,如果檔案已更新,則假定合併成功;否則,提示使用者指示合併的成功與否。

mergetool.meld.hasOutput

舊版本的 meld 不支援 --output 選項。Git 將嘗試透過檢查 meld --help 的輸出,來檢測 meld 是否支援 --output。配置 mergetool.meld.hasOutput 將使 Git 跳過這些檢查並改用配置的值。將 mergetool.meld.hasOutput 設為 true 告訴 Git 無條件使用 --output 選項,而 false 則避免使用 --output

mergetool.meld.useAutoMerge

當給定 --auto-merge 時,meld 會自動合併所有無衝突的部分,突出顯示衝突的部分,並等待使用者的決定。將 mergetool.meld.useAutoMerge 設為 true 告訴 Git 無條件將 --auto-merge 選項用於 meld。將此值設為 auto 可讓 git 檢測是否支援 --auto-merge,並僅在可用時使用 --auto-merge。值 false 完全避免使用 --auto-merge,且是預設值。

mergetool.<variant>.layout

為 vimdiff 的 <variant> 配置分割視窗佈局,此為 vimdiffnvimdiffgvimdiff 中的任何一個。當使用 --tool=<variant>(如果 merge.tool 配置為 <variant>,則無需 --tool)啟動 git mergetool 時,Git 將查詢 mergetool.<variant>.layout 來確定工具的佈局。如果變體特定的配置不可用,則以 vimdiff 的佈局作為備選。如果該佈局也不可用,則使用具有 4 個視窗的預設佈局。要配置佈局,請參閱 git-mergetool[1] 中的 BACKEND SPECIFIC HINTS 章節。

mergetool.hideResolved

在合併期間,Git 會自動解決盡可能多的衝突,並寫入包含圍繞任何無法解決衝突之衝突標記的 $MERGED 檔案;$LOCAL$REMOTE 通常是 Git 衝突解決前檔案的版本。此旗標會導致 $LOCAL$REMOTE 被覆寫,以便僅將未解決的衝突呈現給合併工具。可透過 mergetool.<tool>.hideResolved 設定變數按工具進行配置。預設為 false

mergetool.keepBackup

執行合併後,帶有衝突標記的原始檔案可以儲存為具有 .orig 副檔名的檔案。如果將此變數設為 false,則不會保留此檔案。預設為 true(即保留備份檔案)。

mergetool.keepTemporaries

呼叫自訂合併工具時,Git 使用一組臨時檔案傳遞給該工具。如果工具傳回錯誤且此變數設為 true,則會保留這些臨時檔案;否則,它們將在工具退出後移除。預設為 false

mergetool.writeToTemp

Git 預設在工作樹中寫入衝突檔案的臨時 BASELOCALREMOTE 版本。當設為 true 時,Git 將嘗試為這些檔案使用臨時目錄。預設為 false

mergetool.prompt

在每次呼叫合併解決程式之前進行提示。

mergetool.guiDefault

設為 true 以預設使用 merge.guitool(相當於指定 --gui 引數),或設為 auto 根據 DISPLAY 環境變數值的存在來選擇 merge.guitoolmerge.tool。預設為 false,必須顯式提供 --gui 引數才能使用 merge.guitool

notes.mergeStrategy

解決註記 (notes) 衝突時預設選擇的合併策略。必須是 manualourstheirsunioncat_sort_uniq 其中之一。預設為 manual。有關各個策略的更多資訊,請參閱 git-notes[1] 的 "NOTES MERGE STRATEGIES" 章節。

此設定可透過向 git-notes[1] 傳遞 --strategy 選項來覆寫。

notes.<name>.mergeStrategy

執行合併註記至 refs/notes/<name> 時選擇的合併策略。這會覆寫更一般的 notes.mergeStrategy。有關可用策略的更多資訊,請參閱 git-notes[1] 中的 "NOTES MERGE STRATEGIES" 章節。

notes.displayRef

使用 git log 系列命令顯示提交訊息時,除了 core.notesRefGIT_NOTES_REF 設定的預設值外,還要從哪個(或哪些,如果是 glob 或指定多次)參照讀取註記。

此設定可用 GIT_NOTES_DISPLAY_REF 環境變數覆寫,該變數必須是以冒號分隔的參照或 glob 清單。

對於不存在的參照將發出警告,但如果不匹配任何參照的 glob 則會被忽略。

此設定可透過 git-log[1] 系列命令的 --no-notes 選項,或是這些命令所接受的 --notes=<ref> 選項來停用。

core.notesRef 的有效值(可能被 GIT_NOTES_REF 覆寫)也會隱含地加入到要顯示的參照清單中。

notes.rewrite.<command>

當使用 <command>(目前為 amendrebase)重寫提交時,若此變數為 false,則 Git 不會將註記從原始提交複製到重寫後的提交。預設為 true。另請參閱下方的 notes.rewriteRef

此設定可用 GIT_NOTES_REWRITE_REF 環境變數覆寫,該變數必須是以冒號分隔的參照或 glob 清單。

notes.rewriteMode

在重寫期間複製註記時(參見 notes.rewrite.<command> 選項),決定當目標提交已有名稱時該如何處理。必須是 overwriteconcatenatecat_sort_uniqignore 之一。預設為 concatenate

此設定可用 GIT_NOTES_REWRITE_MODE 環境變數覆寫。

notes.rewriteRef

在重寫期間複製註記時,指定應複製其註記的(全名)參照。可以是 glob,在這種情況下將複製所有匹配參照中的註記。您也可以多次指定此配置。

沒有預設值;您必須配置此變數才能啟用註記重寫。將其設定為 refs/notes/commits 以啟用預設提交註記的重寫。

可用 GIT_NOTES_REWRITE_REF 環境變數覆寫。其格式的進一步說明請參見上方的 notes.rewrite.<command>

pack.window

當指令列上未給定視窗大小時,git-pack-objects[1] 使用的視窗大小。預設為 10。

pack.depth

當指令列上未給定最大深度時,git-pack-objects[1] 使用的最大增量深度。預設為 50。最大值為 4095。

pack.windowMemory

當指令列上未給定限制時,git-pack-objects[1] 中的每個執行緒用於封裝視窗記憶體的最大記憶體大小。該值可以後綴 "k"、"m" 或 "g"。當未配置(或顯式設為 0)時,將沒有限制。

pack.compression

一個整數 -1..9,表示封裝檔中物件的壓縮等級。-1 是 zlib 預設值。0 表示無壓縮,1..9 是各種速度/大小權衡,9 最慢。如果未設定,預設為 core.compression。如果該項也未設定,則預設為 -1,即 zlib 預設值,這是一個「速度與壓縮之間的預設折衷(目前相當於等級 6)。」

請注意,變更壓縮等級不會自動重新壓縮所有現有物件。您可以透過將 -F 選項傳遞給 git-repack[1] 來強制重新壓縮。

pack.allowPackReuse

當為 true 或 "single",且啟用可達性點陣圖時,pack-objects 將嘗試逐字發送點陣圖封裝檔的部分。當為 "multi",且可用多封裝可達性點陣圖時,pack-objects 將嘗試發送 MIDX 中所有封裝的部分。

如果僅提供單一封裝點陣圖,且 pack.allowPackReuse 設為 "multi",則僅重複使用點陣圖封裝檔的部分。這可以減少記憶體和 CPU 使用率來服務抓取 (fetch),但可能會導致發送稍大的封裝檔。預設為 true。

pack.island

配置一組增量孤島 (delta islands) 的擴充正規表示式。詳情請參閱 git-pack-objects[1] 中的「DELTA ISLANDS」。

pack.islandCore

指定一個孤島名稱,該孤島的物件將優先被封裝。這會在封裝前端建立一種偽封裝,以便指定孤島中的物件希望能夠更快地複製到任何應該服務於請求這些物件之使用者的封裝中。實際上,這意味著指定的孤島應該對應於儲存庫中最常被複製的內容。另請參閱 git-pack-objects[1] 中的「DELTA ISLANDS」。

pack.deltaCacheSize

在寫入封裝檔之前,git-pack-objects[1] 中用於快取增量資料的最大記憶體(以位元組為單位)。此快取用於透過在找到所有物件的最佳匹配後,無需重新計算最終增量結果來加速寫入物件階段。然而,在記憶體緊張的機器上重新封裝大型儲存庫可能會受到此快取的嚴重影響,特別是如果此快取將系統推向交換空間 (swapping)。值 0 表示無限制。可以使用 1 位元組的最小大小來虛擬地停用此快取。預設為 256 MiB。

pack.deltaCacheLimit

git-pack-objects[1] 中快取的增量最大大小。此快取用於透過在找到所有物件的最佳匹配後,無需重新計算最終增量結果來加速寫入物件階段。預設為 1000。最大值為 65535。

pack.threads

指定搜尋最佳增量匹配時要建立的執行緒數量。這要求 git-pack-objects[1] 使用 pthreads 編譯,否則此選項將被忽略並發出警告。這旨在減少多處理器機器上的封裝時間。然而,增量搜尋視窗所需的記憶體總量會乘以執行緒數量。指定 0 將導致 Git 自動偵測 CPU 數量並相應設定執行緒數量。

pack.indexVersion

指定預設封裝索引版本。有效值為 1(Git 1.5.2 之前版本使用的舊封裝索引)和 2(新封裝索引,具備大於 4 GB 封裝的能力,以及對損壞封裝重新封裝的適當保護)。版本 2 是預設值。請注意,無論對應封裝大於 2 GB,版本 2 都會被強制執行,且此設定選項會被忽略。

如果您有無法理解版本 2 *.idx 檔案的舊版 Git,透過非原生協定(例如 "http")進行 clone 或 fetch,會複製對方側的 *.pack 檔案和對應的 *.idx 檔案,這可能會讓您得到一個無法用較舊版本 Git 存取的儲存庫。然而,如果 *.pack 檔案小於 2 GB,您可以使用 *.pack 檔案上的 git-index-pack[1] 來重新產生 *.idx 檔案。

pack.packSizeLimit

封裝的最大大小。此設定僅影響重新封裝時封裝到檔案的過程,即 git:// 協定不受影響。它可以被 git-repack[1]--max-pack-size 選項覆寫。達到此限制會導致建立多個封裝檔。

請注意,此選項很少有用,可能會導致更大的磁碟總大小(因為 Git 不會儲存封裝之間的增量),以及更差的執行時效能(多個封裝內的物件查詢比單一封裝慢,且諸如可達性點陣圖之類的最佳化無法處理多個封裝)。

如果您需要積極使用較小的封裝檔執行 Git(例如,因為您的檔案系統不支援大檔案),此選項可能會有所幫助。但如果您的目標是透過支援有限大小的媒體(例如,無法儲存整個儲存庫的可移除媒體)傳輸封裝檔,您最好建立一個單一的大封裝檔,然後使用通用的多卷存檔工具(例如 Unix split)進行分割。

允許的最小大小限制為 1 MiB。預設為無限制。支援常見的 kmg 單位後綴。

pack.useBitmaps

當為 true 時,git 在封裝到 stdout 時(例如,在 fetch 的伺服器端)將使用封裝點陣圖(如果可用)。預設為 true。除非您正在對封裝點陣圖進行除錯,否則通常不需要將其關閉。

pack.useBitmapBoundaryTraversal

當為 true 時,Git 將使用實驗性演算法來計算帶有點陣圖的可達性查詢。不是為所有被否定的尖端建立完整的點陣圖然後再對它們執行 OR 運算,而是將帶有現有點陣圖的被否定尖端視為相加(即如果它們存在則將它們 OR 到結果中,否則忽略它們),並改為在邊界處建立一個點陣圖。

使用此演算法時,由於沒有開啟屬於某些 UNINTERESTING 提交的樹,Git 可能會包含過多的物件。這種不精確性與非點陣圖遍歷演算法相符。

在許多情況下,這可以比精確演算法提供更快的速度,特別是在查詢的否定側點陣圖覆蓋率較差時。

pack.useSparse

當為 true 時,當存在 --revs 選項時,git 將預設在 git pack-objects 中使用 --sparse 選項。此演算法僅遍歷出現在引入新物件之路徑中的樹。在計算要傳送小變更的封裝時,這可以帶來顯著的效能提升。然而,如果包含的提交包含某些類型的直接重新命名,封裝檔中可能會新增額外的物件。預設為 true

pack.usePathWalk

git pack-objects 程序預設啟用 --path-walk 選項。詳細資訊請參閱 git-pack-objects[1]

pack.preferBitmapTips

指定參照階層(例如 "refs/heads/");可以多次給定以指定多個階層。當選擇哪些提交將接收點陣圖時,更喜歡位於包含在任何已配置階層中之參照尖端的提交。

請注意,將此配置設為 refs/foo/ 並不意味著 refs/foo/barrefs/foo/baz 尖端的提交一定會被選擇。這是因為點陣圖的提交是從一系列可變長度的視窗中選擇的。

如果在視窗中看到任何作為此配置任何值之後綴之參照尖端的提交,則它會立即被優先考慮,勝過該視窗中的任何其他提交。

pack.writeBitmaps (deprecated)

這是 repack.writeBitmaps 的已棄用同義詞。

pack.writeBitmapHashCache

當為 true 時,git 將在點陣圖索引中包含一個「雜湊快取 (hash cache)」區段(如果已寫入)。此快取可用於為 git 的增量啟發式方法提供回饋,可能導致點陣圖和非點陣圖物件之間更好的增量(例如,當在較舊的點陣圖封裝與自上次 gc 以來已推送的物件之間服務抓取時)。缺點是它會消耗每個物件 4 位元組的磁碟空間。預設為 true。

寫入多封裝可達性點陣圖時,不會計算新的名稱雜湊 (namehashes);相反地,寫入新點陣圖時,儲存在現有點陣圖中的任何名稱雜湊都會被排列到其適當的位置。

pack.writeBitmapLookupTable

當為 true 時,Git 將在點陣圖索引中包含一個「查詢表 (lookup table)」區段(如果已寫入)。此表格用於盡可能延後載入個別點陣圖。這對於具有相對較大點陣圖索引的儲存庫可能是有益的。預設為 false。

pack.readReverseIndex

當為 true 時,git 將讀取任何可能可用的 .rev 檔案(請參閱:gitformat-pack[5])。當為 false 時,反向索引將從頭開始產生並儲存在記憶體中。預設為 true。

pack.writeReverseIndex

當為 true 時,除了 git-fast-import[1] 和大量入庫機制之外,git 將為其寫入的每個新封裝檔寫入對應的 .rev 檔案(請參閱:gitformat-pack[5])。預設為 true。

pager.<cmd>

如果值為布林值,則在寫入 tty 時開啟或關閉特定 Git 子指令輸出的分頁。否則,使用 pager.<cmd> 值指定的頁面瀏覽器為該子指令開啟分頁。如果在指令列上指定了 --paginate--no-pager,則其優先權高於此選項。若要停用所有指令的分頁,請將 core.pagerGIT_PAGER 設為 cat

pretty.<name>

--pretty= 格式字串的別名,如 git-log[1] 中所指定。在此處定義的任何別名都可以像內建的 pretty 格式一樣使用。例如,執行 git config pretty.changelog "format:* %H %s" 會導致呼叫 git log --pretty=changelog 等同於執行 git log "--pretty=format:* %H %s"。請注意,與內建格式同名的別名將被靜默忽略。

promisor.quiet

如果設為 "true",在為部分複製(partial clone)擷取額外物件時,會自動採取 --quiet 選項。

promisor.advertise

如果設為 "true",伺服器將使用 "promisor-remote" 功能(請參閱 gitprotocol-v2[5])來廣播其正在使用的 promisor 遠端倉儲(如果有的話)。預設值為 "false",表示不廣播 "promisor-remote" 功能。

promisor.sendFields

以逗號或空格分隔的額外遠端相關欄位名稱列表。當伺服器使用 "promisor-remote" 功能廣播其 promisor 遠端倉儲時(請參閱 gitprotocol-v2[5]),會傳送這些欄位名稱及其設定檔中對應的欄位值。目前僅支援 "partialCloneFilter" 和 "token" 欄位名稱。

partialCloneFilter

包含該遠端倉儲所使用的部分複製篩選器。

token

包含該遠端倉儲的驗證權杖(authentication token)。

當某個欄位名稱位於此列表中,且伺服器上設有對應的 "remote.foo.<field-name>" 設定變數且值非空時,在廣播 "foo" 這個 promisor 遠端倉儲時,就會一併傳送該欄位名稱與值。

除非 "promisor.advertise" 設定變數設為 "true",否則此列表無效。無論此設定為何,"name" 和 "url" 欄位永遠會被廣播。

promisor.acceptFromServer

如果設為 "all",用戶端將接受伺服器透過 "promisor-remote" 功能廣播的所有 promisor 遠端倉儲。如果設為 "knownName",用戶端將僅接受與用戶端已設定名稱相同且由伺服器廣播的 promisor 遠端倉儲。這不太安全,但可用於公司環境中,前提是伺服器和用戶端皆受信任,不會隨意更改名稱和網址。如果設為 "knownUrl",用戶端將僅接受名稱與網址皆與用戶端已設定之 promisor 遠端倉儲相符的項目。這比 "all" 或 "knownName" 更安全,因此若可行,應優先使用此選項。預設值為 "none",表示不接受伺服器廣播的任何 promisor 遠端倉儲。接受 promisor 遠端倉儲即表示用戶端同意伺服器在回應用戶端的 "fetch" 和 "clone" 請求時,可省略那些能從此 promisor 遠端倉儲延遲擷取的物件。名稱與網址的比較區分大小寫。請參閱 gitprotocol-v2[5]

promisor.checkFields

以逗號或空格分隔的額外遠端相關欄位名稱列表。用戶端在接受 promisor 遠端倉儲前,會檢查伺服器傳輸的這些欄位值是否與其自身設定中的欄位值一致。目前僅支援 "partialCloneFilter" 和 "token" 欄位名稱。

若針對某個廣播的 promisor 遠端倉儲(例如 "foo")檢查其中一個欄位名稱(例如 "token"),必須滿足以下三個條件,該欄位的檢查才會通過:

  1. 必須設定對應的本地設定(例如 remote.foo.token)。

  2. 伺服器必須廣播該遠端倉儲 "foo" 的 "token" 欄位。

  3. 本地設定的 remote.foo.token 值必須與伺服器廣播的 "token" 欄位值完全相符。

    如果 promisor.checkFields 中列出的任何欄位名稱未滿足上述任一條件,該廣播的遠端倉儲 "foo" 將被拒絕。

    對於 "partialCloneFilter" 欄位,這讓用戶端能確保伺服器的篩選器符合本地預期,從而防止篩選行為不一致。對於 "token" 欄位,可用於驗證驗證憑證是否符合預期值。

    欄位值比較時區分大小寫。

    "name" 和 "url" 欄位會根據 promisor.acceptFromServer 政策自動進行檢查,不受此設定影響。

    欄位名稱與值應由伺服器透過 promisor.sendFields 設定變數,經由 "promisor-remote" 功能進行傳遞。只有在 promisor.acceptFromServer 未設為 "None" 時,才會檢查這些欄位。若設為 "None",此設定變數無效。請參閱 gitprotocol-v2[5]

promisor.storeFields

以逗號或空格分隔的額外遠端相關欄位名稱列表。如果用戶端接受了廣播的遠端倉儲,用戶端將會把從遠端廣播中取得的這些欄位值存入其設定檔,並重新載入遠端設定。目前僅支援 "partialCloneFilter" 和 "token" 欄位名稱。

例如,若伺服器為遠端倉儲 "foo" 廣播了 "partialCloneFilter=blob:limit=20k",且該遠端倉儲被接受,則 "blob:limit=20k" 將會被存入 remote.foo.partialCloneFilter 設定變數中。

如果從廣播遠端倉儲取得的新欄位值與用戶端該遠端倉儲現有的欄位值相同,則不會對用戶端設定進行變更。

當儲存新值時,標準錯誤輸出會顯示一則訊息以通知使用者。

請注意,基於安全考量,如果該遠端倉儲尚未在用戶端配置,則不會儲存任何內容。在任何情況下,都不會建立新的遠端倉儲,也不會儲存任何網址。

在儲存部分複製篩選器之前,會先解析以檢查其有效性。若無效,將發出警告且不予儲存。

在儲存權杖之前,會先檢查其是否包含控制字元。若檢查失敗,將發出警告且不予儲存。

protocol.allow

若已設定,則為所有未明確指定政策(protocol.<name>.allow)的協定提供使用者自訂的預設政策。若未設定,已知安全協定 (http, https, git, ssh) 的預設政策為 always,已知危險協定 (ext) 的預設政策為 never,其他所有協定(包括 file)的預設政策則為 user。支援的政策:

  • always - 永遠允許使用該協定。

  • never - 永遠禁止使用該協定。

  • user - 僅在 GIT_PROTOCOL_FROM_USER 未設定或設為 1 時才允許使用。當您希望使用者直接使用該協定,但不希望它被那些無需使用者輸入即可執行 clone/fetch/push 指令的指令(例如遞迴子模組初始化)所使用時,應採用此政策。

protocol.<name>.allow

設定 clone/fetch/push 指令使用 <name> 協定時採用的政策。可用政策請參閱上述 protocol.allow

Git 目前使用的協定名稱有:

  • file:任何本地檔案路徑(包括 file:// 網址或本地路徑)。

  • git:透過直接 TCP 連線(或已設定的代理)的匿名 git 協定。

  • ssh:透過 ssh 的 git(包括 host:path 語法、ssh:// 等)。

  • http:透過 http 的 git,包括 "smart http" 和 "dumb http"。請注意,這 *不* 包含 https;若要同時設定兩者,必須分開設定。

  • 任何外部輔助程式都以其協定命名(例如,使用 hg 來允許 git-remote-hg 輔助程式)。

protocol.version

若已設定,用戶端會嘗試以指定的協定版本與伺服器通訊。若伺服器不支援,則會退回至版本 0。若未設定,預設為 2。支援的版本:

  • 0 - 原始的傳輸協定。

  • 1 - 在伺服器初始回應中包含版本字串的原始傳輸協定。

  • 2 - 傳輸協定版本 2,請參閱 gitprotocol-v2[5]

pull.ff

預設情況下,當合併一個屬於當前提交之後代的提交時,Git 不會建立額外的合併提交,而是將當前分支的尖端進行快轉(fast-forward)。當設為 false 時,此變數告知 Git 在此情況下建立一個額外的合併提交(相當於在命令列使用 --no-ff 選項)。當設為 only 時,僅允許進行快轉合併(相當於在命令列使用 --ff-only 選項)。此設定在 pull 時會覆寫 merge.ff

pull.rebase

當設為 true 時,執行 "git pull" 會在已擷取的分支之上變基(rebase)分支,而不是合併預設遠端預設分支。關於各分支的個別設定,請參閱 "branch.<name>.rebase"。

當值為 merges (或 m) 時,會將 --rebase-merges 選項傳遞給 git rebase,以便將本地合併提交包含在變基操作中(詳情請參閱 git-rebase[1])。

當值為 interactive (或 i) 時,會以互動模式執行變基。

注意:這可能是一個危險的操作;除非您理解其影響,否則請使用(詳情請參見 git-rebase[1])。

pull.octopus

一次 pull 多個分支時使用的預設合併策略。

pull.autoStash

當設為 true 時,在作業開始前自動建立一個臨時的 stash 記錄本地變更,並在作業完成後還原。當您的 "git pull" 執行變基(而非合併)時,這會很方便,因為與合併不同(合併 pull 可以容忍不干擾合併的本地變更),變基 pull 拒絕在有任何本地變更時執行。

如果已設定 pull.autostash(無論是 true 或 false),merge.autostashrebase.autostash 將被忽略。若完全未設定 pull.autostash,則會根據 pull.rebase 的值來使用 merge.autostashrebase.autostash。可透過命令列選項 --[no-]autostash 覆寫。

pull.twohead

pull 單一分支時使用的預設合併策略。

push.autoSetupRemote

如果設為 true,則在當前分支沒有上游追蹤的情況下執行預設 push 時,假設使用了 --set-upstream;此選項適用於 push.defaultsimpleupstreamcurrent 的情況。若您希望新分支預設推送到預設遠端倉儲(行為類似 push.default=current)且同時設定上游追蹤,此選項非常實用。此選項最適合 simple 中央式工作流程,即所有分支預期在遠端倉儲都有相同名稱的情況。

push.default

定義若未指定引用規格(refspec,無論是從命令列、設定檔或其他來源)時,git push 應採取的動作。不同的值適用於特定的工作流程;例如,在純中央式工作流程(即擷取來源與推送目的地相同)中,upstream 通常是您需要的。可用的值如下:

nothing

除非指定了引用規格,否則不推送任何內容(回報錯誤)。這主要是為了避免因誤操作而設計,要求必須明確指定。

current

推送當前分支以更新接收端具有相同名稱的分支。適用於中央式與非中央式工作流程。

upstream

將當前分支推送到通常會整合其變更的分支(即 @{upstream})。此模式僅在您推送到通常 pull 的同一個倉儲時才有意義(即中央式工作流程)。

tracking

這是 upstream 的棄用同義詞。

simple

將當前分支推送到遠端同名分支。

如果您採用中央式工作流程(推送到您 pull 的同一個倉儲,通常是 origin),則需要設定一個同名的上游分支。

此模式自 Git 2.0 起成為預設值,也是適合初學者的最安全選項。

matching

推送兩端同名的所有分支。這會讓您推送到的倉儲記憶即將推送的分支集(例如,如果您總是推送到那裡的 maintmaster 而沒有其他分支,則您推送到的倉儲將擁有這兩個分支,且您本地的 maintmaster 也會被推送過去)。

要有效使用此模式,您必須確保在執行 git push 之前,所有您打算推送出去的分支都已準備就緒,因為此模式的重點就是讓您能一次推送所有分支。如果您通常只完成一個分支的工作並推送結果,而其他分支尚未完成,則此模式不適合您。此外,此模式也不適合推送到共享的中央倉儲,因為其他人可能會在那裡添加新分支,或更新您無法控制的現有分支尖端。

這曾經是預設值,但自 Git 2.0 起不再是(simple 是新的預設值)。

push.followTags

如果設為 true,預設啟用 --follow-tags 選項。您可以在推送時透過指定 --no-follow-tags 來覆寫此設定。

push.gpgSign

可設為布林值或字串 if-asked。True 值會使所有推送動作都經過 GPG 簽署,如同向 git-push[1] 傳遞了 --signed。字串 if-asked 會在伺服器支援的情況下進行簽署,如同向 git push 傳遞了 --signed=if-asked。False 值可能會覆寫優先順序較低的設定檔中的值。明確的命令列旗標永遠會覆寫此設定選項。

push.pushOption

當命令列未給予 --push-option=<option> 引數時,git push 的行為如同每個此變數的 <option> 皆作為 --push-option=<option> 給出。

這是一個多值變數,且可以在高優先順序設定檔(例如倉儲中的 .git/config)中使用空值來清除從低優先順序設定檔(例如 $HOME/.gitconfig)繼承的值。

Example:

/etc/gitconfig
  push.pushoption = a
  push.pushoption = b

~/.gitconfig
  push.pushoption = c

repo/.git/config
  push.pushoption =
  push.pushoption = b

This will result in only b (a and c are cleared).
push.recurseSubmodules

可設為 checkon-demandonlyno,行為與 push --recurse-submodules 相同。若未設定,預設使用 no,除非已設定 submodule.recurse(在此情況下,true 值意味著 on-demand)。

push.useForceIfIncludes

如果設為 true,等同於在命令列對 git-push[1] 指定 --force-if-includes 選項。在推送時加入 --no-force-if-includes 將覆寫此設定。

push.negotiate

如果設為 true,則透過用戶端與伺服器嘗試尋找共同提交的談判回合,來嘗試減少傳送的封包檔案(packfile)大小。如果設為 false,Git 將僅依賴伺服器的引用廣播來尋找共同提交。

push.useBitmaps

如果設為 false,即使 pack.useBitmapstrue,也會停用 git push 使用點陣圖(bitmaps),而不影響其他 git 操作對點陣圖的使用。預設值為 true

rebase.backend

變基時使用的預設後端。可選值為 applymerge。未來若 merge 後端獲得了 apply 後端的所有剩餘功能,此設定可能會被棄用。

rebase.stat

是否顯示自上次變基以來,上游變更的 diffstat。預設為 false。

rebase.autoSquash

如果設為 true,互動模式下將預設啟用 git-rebase[1]--autosquash 選項。這可透過 --no-autosquash 選項覆寫。

rebase.autoStash

當設為 true 時,在作業開始前自動建立臨時的 stash 條目,並在作業結束後套用。這意味著您可以在髒污的工作目錄中執行變基。但請謹慎使用:變基成功後最終的 stash 套用可能會導致非顯而易見的衝突。此選項可透過 git-rebase[1]--no-autostash--autostash 選項覆寫。預設為 false。

rebase.updateRefs

如果設為 true,預設啟用 --update-refs 選項。

rebase.missingCommitsCheck

如果設為 "warn",git rebase -i 在刪除某些提交時(例如刪除了一行)會列印警告,但變基仍會繼續。如果設為 "error",則會列印上述警告並停止變基,此時可使用 git rebase --edit-todo 來修正錯誤。如果設為 "ignore",則不進行檢查。若要無警告或錯誤地捨棄提交,請在待辦清單中使用 drop 指令。預設為 "ignore"。

rebase.instructionFormat

一個格式字串,詳見 git-log[1],用於互動式變基期間的待辦清單。提交雜湊值會自動前置於該格式中。

rebase.abbreviateCommands

如果設為 true,git rebase 將在待辦清單中使用縮寫的指令名稱,例如:

	p deadbee The oneline of the commit
	p fa1afe1 The oneline of the next commit
	...

而不是:

	pick deadbee The oneline of the commit
	pick fa1afe1 The oneline of the next commit
	...

預設為 false。

rebase.rescheduleFailedExec

自動重新排程失敗的 exec 指令。這僅在互動模式下(或提供了 --exec 選項時)才有意義。這與指定 --reschedule-failed-exec 選項相同。

rebase.forkPoint

如果設為 false,預設設定 --no-fork-point 選項。

rebase.rebaseMerges

是否以及如何預設設定 --rebase-merges 選項。可以是 rebase-cousinsno-rebase-cousins 或布林值。設定為 true 或 no-rebase-cousins 等同於 --rebase-merges=no-rebase-cousins,設定為 rebase-cousins 等同於 --rebase-merges=rebase-cousins,設定為 false 等同於 --no-rebase-merges。在命令列傳遞 --rebase-merges(無論是否有引數)都會覆寫任何 rebase.rebaseMerges 設定。

rebase.maxLabelLength

從提交主題生成標籤名稱時,將名稱截斷至此長度。預設情況下,名稱會截斷至略小於 NAME_MAX(以允許對應的鬆散引用寫入如 .lock 檔案)。

receive.advertiseAtomic

預設情況下,git-receive-pack 會向其用戶端廣播原子推送(atomic push)功能。如果您不想廣播此功能,請將此變數設為 false。

receive.advertisePushOptions

當設為 true 時,git-receive-pack 會向其用戶端廣播推送選項(push options)功能。預設為 false。

receive.autogc

預設情況下,git-receive-pack 會在從 git-push 接收資料並更新引用後執行 "git maintenance run --auto"。您可以將此變數設為 false 來停止此行為。

receive.certNonceSeed

透過將此變數設為一個字串,git receive-pack 將接受 git push --signed,並使用此字串作為密鑰透過 HMAC 保護的 "nonce" 來進行驗證。

receive.certNonceSlop

git push --signed 傳送一個推送憑證,且其中包含的 "nonce" 是由在指定秒數內為同一個倉儲提供服務的 receive-pack 所發出時,將憑證中找到的 "nonce" 匯出至 hooks 的 GIT_PUSH_CERT_NONCE(而非 receive-pack 要求傳送端包含的內容)。這可能讓撰寫 pre-receivepost-receive 的檢查變得更容易。無需檢查紀錄 nonce 過期時間的 GIT_PUSH_CERT_NONCE_SLOP 環境變數來決定是否接受憑證,只需檢查 GIT_PUSH_CERT_NONCE_STATUS 是否為 OK

receive.fsckObjects

如果設為 true,git-receive-pack 將檢查所有接收到的物件。請參閱 transfer.fsckObjects 了解具體檢查內容。預設為 false。若未設定,則改用 transfer.fsckObjects 的值。

receive.fsck.<msg-id>

作用類似 fsck.<msg-id>,但由 git-receive-pack[1] 而非 git-fsck[1] 使用。詳情請參閱 fsck.<msg-id> 文件。

receive.fsck.skipList

作用類似 fsck.skipList,但由 git-receive-pack[1] 而非 git-fsck[1] 使用。詳情請參閱 fsck.skipList 文件。

receive.keepAlive

在從用戶端接收封包後,receive-pack 在處理封包時可能不會產生任何輸出(若指定了 --quiet),導致部分網路中斷 TCP 連線。設定此選項後,若 receive-pack 在此階段有 receive.keepAlive 秒未傳輸任何資料,它將發送一個簡短的 keepalive 封包。預設值為 5 秒;設為 0 可完全停用 keepalive。

receive.unpackLimit

如果推播中接收到的物件數量低於此限制,則物件會被解包為鬆散物件檔。然而,如果接收到的物件數量等於或超過此限制,則接收到的封包將在加入任何遺失的 delta 基底後儲存為封包。從推播中儲存封包可以讓推播操作更快完成,特別是在緩慢的檔案系統上。若未設定,則使用 transfer.unpackLimit 的值。

receive.maxInputSize

如果傳入的封包串流大小大於此限制,則 git-receive-pack 會報錯,而非接受該封包檔案。若未設定或設為 0,則大小無限制。

receive.denyDeletes

如果設為 true,git-receive-pack 將拒絕刪除引用的引用更新。使用此選項可防止透過推播進行此類引用刪除。

receive.denyDeleteCurrent

如果設為 true,git-receive-pack 將拒絕刪除非裸倉儲(non-bare repository)當前 checkout 分支的引用更新。

receive.denyCurrentBranch

如果設為 true 或 "refuse",git-receive-pack 將拒絕向非裸倉儲當前 checkout 的分支進行引用更新。此類推播具有潛在危險,因為它會導致 HEAD 與索引和工作樹不同步。如果設為 "warn",則將此類推播的警告列印到 stderr,但允許推播繼續。如果設為 false 或 "ignore",則允許此類推播而不顯示任何訊息。預設為 "refuse"。

另一個選項是 "updateInstead",它會在推送到當前分支時更新工作樹。此選項旨在當一方無法輕易透過互動式 ssh 存取時(例如即時網站,因此要求工作目錄必須是乾淨的)用於同步工作目錄。此模式在虛擬機內開發以在不同作業系統上測試和修復程式碼時也很有用。

預設情況下,若工作樹或索引與 HEAD 有任何差異,"updateInstead" 會拒絕推播,但可以使用 push-to-checkout hook 來客製化此行為。請參閱 githooks[5]

receive.denyNonFastForwards

如果設為 true,git-receive-pack 將拒絕非快轉(non-fast-forward)的引用更新。即使是強制推播,也可以透過此選項防止此類更新。此設定變數在初始化共享倉儲時會被設定。

receive.hideRefs

此變數與 transfer.hideRefs 相同,但僅適用於 receive-pack(因此影響推送,但不影響擷取)。任何嘗試透過 git push 更新或刪除隱藏引用的嘗試都會被拒絕。

receive.procReceiveRefs

這是一個多值變數,定義了用於匹配 receive-pack 中指令的引用首碼。匹配這些首碼的指令將由外部 hook "proc-receive" 執行,而非內部 execute_commands 函式。若未定義此變數,則不會使用 "proc-receive" hook,所有指令皆由內部 execute_commands 函式執行。

例如,若此變數設為 "refs/for",推送到如 "refs/for/master" 的引用將不會建立或更新名為 "refs/for/master" 的引用,而是透過執行 "proc-receive" hook 直接建立或更新提取請求(pull request)。

可在值的前面提供選擇性修飾符來過濾特定動作的指令:create (a)、modify (m)、delete (d)。修飾符中可包含 ! 以否定該引用首碼條目。例如:

git config --system --add receive.procReceiveRefs ad:refs/heads
git config --system --add receive.procReceiveRefs !:refs/heads
receive.updateServerInfo

如果設為 true,git-receive-pack 將在從 git-push 接收資料並更新引用後執行 git-update-server-info。

receive.shallowUpdate

如果設為 true,當新引用需要新的淺層根(shallow roots)時,可以更新 .git/shallow。否則這些引用將被拒絕。

reftable.blockSize

reftable 後端在寫入區塊時使用的位元組大小。區塊大小由寫入器決定,不必為 2 的冪。區塊大小必須大於倉儲中使用的最長引用名稱或日誌條目,因為引用不能跨越區塊。

建議使用對虛擬記憶體系統或檔案系統友善的 2 的冪(例如 4kB 或 8kB)。較大的大小(64kB)可以獲得更好的壓縮效果,但可能會增加讀取者在存取時的開銷。

最大區塊大小為 16777215 位元組 (15.99 MiB)。預設值為 4096 位元組 (4kB)。值為 0 將使用預設值。

reftable.restartInterval

建立重啟點(restart points)的間隔。reftable 後端在檔案建立時決定重啟點。每 16 個記錄可能更適合較小的區塊大小(4k 或 8k),每 64 個記錄適合較大的區塊大小(64k)。

更頻繁的重啟點會減少首碼壓縮並增加重啟表佔用的空間,這兩者都會增加檔案大小。

較不頻繁的重啟點會使首碼壓縮更有效,從而減少整體檔案大小,但會增加讀取者在二元搜尋步驟後遍歷更多記錄的代價。

每個區塊最多支援 65535 個重啟點。

預設值為每 16 個記錄建立一個重啟點。值為 0 將使用預設值。

reftable.indexObjects

reftable 後端是否應寫入物件區塊。物件區塊是物件識別碼到指向它們的引用的反向映射。

預設值為 true

reftable.geometricFactor

每當 reftable 後端將新表附加到堆疊時,它都會執行自動壓縮以確保只有少量的表。後端透過確保表相對於每個表的大小形成幾何數列來做到這一點。

預設情況下,幾何數列使用 2 作為係數,這意味著對於任何表,下一個最大的表必須至少大兩倍。支援的最大係數為 256。

reftable.lockTimeout

每當 reftable 後端將新表附加到堆疊時,它必須在更新中央 "tables.list" 檔案之前對其加鎖。此設定控制在另一個處理程序已經取得鎖定的情況下,該處理程序將等待多久以取得鎖定。值 0 表示完全不重試;-1 表示無限期嘗試。預設值為 100(即重試 100 毫秒)。

remote.pushDefault

預設要推送到的遠端倉儲。會覆寫所有分支的 branch.<name>.remote,並被特定分支的 branch.<name>.pushRemote 覆寫。

remote.<name>.url

遠端倉儲的 URL。請參閱 git-fetch[1]git-push[1]。已設定的遠端倉儲可以有多個 URL;在此情況下,第一個 URL 用於 fetch,所有 URL 皆用於 push(假設未定義 remote.<name>.pushurl)。將此鍵設為空字串會清除 URL 列表,讓您覆寫先前的設定。

remote.<name>.pushurl

遠端倉儲的 push URL。請參閱 git-push[1]。如果設定的遠端倉儲中存在 pushurl 選項,則會使用該選項來代替 remote.<name>.url 進行推送。已設定的遠端倉儲可以有多個 push URL;在此情況下,推送會同時傳送至所有這些 URL。將此鍵設為空字串會清除 URL 列表,讓您覆寫先前的設定。

remote.<name>.proxy

對於需要 curl 的遠端倉儲(http、https 和 ftp),該遠端倉儲使用的代理 URL。設為空字串可停用該遠端倉儲的代理。

remote.<name>.proxyAuthMethod

對於需要 curl 的遠端倉儲(http、https 和 ftp),用於對正在使用的代理進行身分驗證的方法(可能設定在 remote.<name>.proxy 中)。請參閱 http.proxyAuthMethod

remote.<name>.fetch

git-fetch[1] 的預設引用規格(refspec)集。請參閱 git-fetch[1]

remote.<name>.push

git-push[1] 的預設引用規格(refspec)集。請參閱 git-push[1]

remote.<name>.mirror

如果為 true,推送至此遠端倉儲時將自動表現得如同在命令列給予了 --mirror 選項。

remote.<name>.skipDefaultUpdate

remote.<name>.skipFetchAll 的棄用同義詞(如果兩者在設定檔中設有不同的值,將使用最後出現的值)。

remote.<name>.skipFetchAll

如果為 true,在使用 git-fetch[1]git-remote[1]update 子指令進行更新時,將會跳過此遠端倉儲,並在 git maintenance 的預擷取任務中被忽略。

remote.<name>.receivepack

推播時在遠端執行的預設程式。請參閱 git-push[1] 的 --receive-pack 選項。

remote.<name>.uploadpack

擷取(fetch)時在遠端執行的預設程式。請參閱 git-fetch-pack[1] 的 --upload-pack 選項。

remote.<name>.tagOpt

將此值設為 --no-tags 可在從遠端 <name> 擷取時停用自動標籤跟隨。設為 --tags 將從遠端 <name> 擷取所有標籤,即使它們無法從遠端分支尖端存取。直接將這些旗標傳遞給 git-fetch[1] 可以覆寫此設定。請參閱 git-fetch[1] 的 --tags 和 --no-tags 選項。

remote.<name>.vcs

將此設為 <vcs> 值將導致 Git 使用 git-remote-<vcs> 輔助程式與該遠端倉儲互動。

remote.<name>.prune

當設為 true 時,預設從此遠端倉儲擷取時,也會移除遠端上不再存在的任何遠端追蹤引用(如同在命令列給予了 --prune 選項)。會覆寫 fetch.prune 設定(若有)。

remote.<name>.pruneTags

當設為 true 時,如果透過 remote.<name>.prunefetch.prune--prune 啟用了修剪(pruning),則從該遠端倉儲擷取時,預設也會移除遠端上不再存在的任何本地標籤。會覆寫 fetch.pruneTags 設定(若有)。

另請參閱 remote.<name>.prune 以及 git-fetch[1] 的 PRUNING 章節。

remote.<name>.promisor

當設為 true 時,此遠端倉儲將用於擷取 promisor 物件。

remote.<name>.partialclonefilter

從此 promisor 遠端倉儲擷取時將套用的篩選器。變更或清除此值僅會影響新提交的擷取。若要為本地物件資料庫中已存在的提交擷取相關物件,請使用 git-fetch[1]--refetch 選項。

remote.<name>.serverOption

從此遠端倉儲擷取時使用的預設伺服器選項集。這些伺服器選項可由命令列引數 --server-option= 覆寫。

這是一個多值變數,且可以在高優先順序設定檔(例如倉儲中的 .git/config)中使用空值來清除從低優先順序設定檔(例如 $HOME/.gitconfig)繼承的值。

remote.<name>.followRemoteHEAD

git-fetch[1] 在使用設定的遠端引用規格擷取時,應如何處理對 remotes/<name>/HEAD 的更新。預設值為 "create",若遠端倉儲存在該分支,則會建立 remotes/<name>/HEAD,但不會在本地建立;這不會變動已存在的本地引用。設為 "warn" 將在遠端倉儲的值與本地不同時列印訊息;若沒有本地引用,則其行為類似 "create"。"warn" 的變體是 "warn-if-not-$branch",其行為與 "warn" 類似,但如果遠端上的 HEAD$branch,則會保持靜默。設為 "always" 將靜默更新 remotes/<name>/HEAD 為遠端上的值。最後,設為 "never" 將永遠不會變更或建立本地引用。

remotes.<group>

"git remote update <group>" 所擷取的遠端倉儲列表。請參閱 git-remote[1]

repack.useDeltaBaseOffset

預設情況下,git-repack[1] 建立的封包會使用 delta-base offset。如果您需要與 1.4.4 版本之前的 Git 分享倉儲(直接或透過 http 等啞協定),則需要將此選項設為 "false" 並重新打包。透過原生協定從舊版 Git 存取不受此選項影響。

repack.packKeptObjects

如果設為 true,使 git repack 的行為如同傳遞了 --pack-kept-objects。詳情請參閱 git-repack[1]。通常預設為 false,但若正在寫入點陣圖索引(透過 --write-bitmap-indexrepack.writeBitmaps),則預設為 true

repack.useDeltaIslands

如果設為 true,使 git repack 的行為如同傳遞了 --delta-islands。預設為 false

repack.writeBitmaps

當為 true 時,git 在將所有物件打包到磁碟時(例如執行 git repack -a)會寫入點陣圖索引。此索引可加速後續為 clone 和 fetch 所建立封包的 "counting objects" 階段,代價是部分磁碟空間和初始重新打包時的額外時間。如果建立多個封包檔案,此選項無效。在裸倉儲中預設為 true,否則為 false。

repack.updateServerInfo

如果設為 false,git-repack[1] 將不會執行 git-update-server-info[1]。預設為 true。當為 true 時,可被 git-repack[1]-n 選項覆寫。

repack.cruftWindow
repack.cruftWindowMemory
repack.cruftDepth
repack.cruftThreads

當產生 cruft 封包且命令列未提供相應參數時,由 git-pack-objects[1] 使用的參數。預設值與含義請參閱名稱類似的 pack.* 設定變數。

repack.midxMustContainCruft

當設為 true 時,當 git-repack[1]--write-midx 呼叫時,會無條件地將 cruft 封包(若有)包含在多封包索引(multi-pack index)中。當為 false 時,cruft 封包僅在必要時(例如可能需要形成具有 MIDX 點陣圖的連通性閉包時)才會包含在 MIDX 中。預設為 true。

rerere.autoUpdate

當設為 true 時,git-rerere 會在乾淨地解決衝突後,使用先前記錄的解決方案更新索引。預設為 false。

rerere.enabled

啟動已解決衝突的記錄,以便在再次遇到相同的衝突區段時能自動解決。預設情況下,如果 $GIT_DIR 下存在 rr-cache 目錄(例如之前在倉儲中使用過 "rerere"),則 git-rerere[1] 即為啟用狀態。

revert.reference

將此變數設為 true 可使 git revert 的行為如同給予了 --reference 選項。

safe.bareRepository

指定 Git 可操作的裸倉儲。目前支援的值有:

  • all:Git 可操作所有裸倉儲。這是預設值。

  • explicit:Git 僅能操作透過頂層 --git-dir 命令列選項或 GIT_DIR 環境變數(請參閱 git[1])指定的裸倉儲。

    如果您在工作流程中不使用裸倉儲,那麼將全域設定中的 safe.bareRepository 設為 explicit 可能有益。這將保護您免受涉及複製包含裸倉儲的倉儲並在該目錄內執行 Git 指令的攻擊。

    此設定僅在受保護的設定中受尊重(請參閱 SCOPES)。這防止了不受信任的倉儲篡改此值。

safe.directory

這些設定條目指定了即使所有者非當前使用者,也被視為安全的 Git 追蹤目錄。預設情況下,Git 甚至會拒絕解析由他人擁有之倉儲的 Git 設定,更不用說執行其 hooks,而此設定允許使用者指定例外情況,例如有意共享的倉儲(請參閱 git-init[1] 中的 --shared 選項)。

這是一個多值設定,即您可以透過 git config --add 新增多個目錄。要重置安全目錄列表(例如覆寫系統設定中指定的目錄),請新增一個值為空的 safe.directory 條目。

此設定僅在受保護的設定中受尊重(請參閱 SCOPES)。這防止了不受信任的倉儲篡改此值。

此設定的值會經過插值處理,即 ~/<path> 會展開為相對於家目錄的路徑,而 %(prefix)/<path> 會展開為相對於 Git(執行時期)首碼的路徑。

若要完全停用此安全檢查,請將 safe.directory 設為字串 *。這將允許所有倉儲如同列在 safe.directory 列表中一樣被對待。如果在系統設定中設有 safe.directory=* 且您想重新啟用此保護,請在列出您認為安全的倉儲之前,先用空值初始化您的列表。提供一個附加了 /* 的目錄將允許存取該指定目錄下的所有倉儲。

如前所述,Git 預設僅允許您存取自己(即執行 Git 的使用者)擁有的倉儲。然而,當 Git 在提供 sudo 的非 Windows 平台上以 root 身分執行時,git 會檢查 sudo 建立的 SUDO_UID 環境變數,並除了 root 的 id 外,還會允許存取作為其值記錄的 uid。這是為了簡化安裝過程中的常見序列 "make && sudo make install"。以 sudo 執行的 git 處理程序會以 root 身分執行,但 sudo 指令會匯出環境變數以記錄原始使用者的 id。如果這不是您想要的,且您希望 git 只信任由 root 擁有的倉儲,那麼您可以在呼叫 git 之前從 root 的環境中移除 SUDO_UID 變數。

sendemail.identity

設定識別。提供時,會導致 sendemail.<identity> 子區段中的值優先於 sendemail 區段中的值。預設識別為 sendemail.identity 的值。

sendemail.smtpEncryption

說明請參閱 git-send-email[1]。請注意,此設定不受 identity 機制影響。

sendemail.smtpSSLCertPath

ca-certificates 的路徑(目錄或單一檔案)。將其設為空字串可停用憑證驗證。

sendemail.smtpSSLClientCert

若伺服器要求,需提供的用戶端憑證檔案路徑。當伺服器設定為驗證用戶端憑證時,這是必需的。若該檔案中未包含對應的私鑰,則必須使用 sendemail.smtpSSLClientKey--smtp-ssl-client-key 選項來提供。

sendemail.smtpSSLClientKey

對應於用戶端憑證的用戶端私鑰檔案路徑。為避免設定錯誤,此設定必須與 sendemail.smtpSSLClientCert--smtp-ssl-client-cert 選項結合使用。如果用戶端金鑰包含在用戶端憑證中,則私鑰的選擇取決於憑證格式。更多細節請造訪 https://metacpan.org/pod/IO::Socket::SSL

sendemail.<identity>.*

下述 sendemail.* 參數的特定識別版本,當透過命令列或 sendemail.identity 選擇此識別時,它們的優先權高於前者。

sendemail.multiEdit

若為 true(預設),將啟動單一編輯器實例來編輯您需要編輯的檔案(使用 --annotate 時的修補程式,以及使用 --compose 時的摘要)。若為 false,檔案將依序編輯,每次都會啟動一個新的編輯器。

sendemail.confirm

設定傳送前是否確認的預設值。必須為 alwaysnevercccomposeauto 其中之一。這些值的含義請參閱 git-send-email[1] 文件中的 --confirm

sendemail.mailmap

若為 true,使 git-send-email[1] 假設 --mailmap,否則假設 --no-mailmap。預設為 False

sendemail.mailmap.file

特定於 git-send-email[1] 的增強 mailmap 檔案位置。預設的 mailmap 和 mailmap.file 會優先載入。因此,此檔案中的條目優先於預設 mailmap 位置中的條目。請參閱 gitmailmap[5]

sendemail.mailmap.blob

類似 sendemail.mailmap.file,但將值視為倉儲中 blob 的參考。sendemail.mailmap.file 中的條目優先於此處的條目。請參閱 gitmailmap[5]

sendemail.aliasesFile

為避免輸入長電子郵件地址,請將此指向一個或多個電子郵件別名檔案。您還必須提供 sendemail.aliasFileType

sendemail.aliasFileType

sendemail.aliasesFile 中指定檔案的格式。必須為 muttmailrcpineelmgnussendmail 其中之一。

每種格式的別名檔案外觀可參考同名電子郵件程式的文件。標準格式的差異和限制描述如下:

sendmail
  • 不支援引號別名和引號地址:包含 " 符號的行會被忽略。

  • 不支援重新導向至檔案 (/path/name) 或管線 (|command)。

  • 不支援檔案包含 (:include: /path/name)。

  • 對於任何明確不支援的建構,以及解析器無法識別的任何其他行,標準錯誤輸出會列印警告。

sendemail.annotate
sendemail.bcc
sendemail.cc
sendemail.ccCmd
sendemail.chainReplyTo
sendemail.envelopeSender
sendemail.from
sendemail.headerCmd
sendemail.signedOffByCc
sendemail.smtpPass
sendemail.suppressCc
sendemail.suppressFrom
sendemail.to
sendemail.toCmd
sendemail.smtpDomain
sendemail.smtpServer
sendemail.smtpServerPort
sendemail.smtpServerOption
sendemail.smtpUser
sendemail.imapSentFolder
sendemail.useImapOnly
sendemail.thread
sendemail.transferEncoding
sendemail.validate
sendemail.xmailer

這些設定變數皆提供 git-send-email[1] 命令列選項的預設值。詳情請參閱其說明文件。

sendemail.outlookidfix

若為 true,使 git-send-email[1] 假設 --outlook-id-fix;若為 false 則假設 --no-outlook-id-fix。若未指定,其行為將與未指定 --outlook-id-fix 時相同。

sendemail.signedOffCc (已棄用)

sendemail.signedOffByCc 的已棄用別名。

sendemail.smtpBatchSize

每個連線傳送的訊息數量,超過此數量後將重新登入。若值為 0 或未定義,則在單一連線中傳送所有訊息。另請參閱 git-send-email[1]--batch-size 選項。

sendemail.smtpReloginDelay

重新連線至 smtp 伺服器前等待的秒數。另請參閱 git-send-email[1]--relogin-delay 選項。

sendemail.forbidSendmailVariables

為避免常見的設定錯誤,若存在任何 sendmail 的設定選項,git-send-email[1] 將中止並發出警告。設定此變數可繞過此檢查。

sequence.editor

git rebase -i 用於編輯變基說明檔的文字編輯器。此值在使用時由 shell 解釋。它可被 GIT_SEQUENCE_EDITOR 環境變數覆寫。若未設定,則改用預設的提交訊息編輯器。

showBranch.default

git-show-branch[1] 的預設分支集合。請參閱 git-show-branch[1]

sparse.expectFilesOutsideOfPatterns

在使用稀疏檢出(sparse checkouts)時,通常不符合任何稀疏模式的檔案會在索引(index)中被標記為 SKIP_WORKTREE 位元,並從工作目錄中移除。因此,Git 通常會檢查帶有 SKIP_WORKTREE 位元的檔案是否實際上存在於工作目錄中(這與預期相反)。如果 Git 發現任何此類檔案,它會透過清除相關的 SKIP_WORKTREE 位元,將這些路徑標記為「存在」。此選項可用於告知 Git 這些「雖被略過但仍存在」的檔案是預期中的,並停止對其進行檢查。

預設值為 false,這允許 Git 自動從索引和工作目錄中檔案列表不同步的狀態中恢復。

如果您處於某種環境,其中有外部因素承擔了維護工作目錄檔案存在與否與稀疏模式一致性的責任,請將此設定為 true。例如,如果您有一個具備 Git 感知能力的虛擬檔案系統,該系統具有強大的機制,能根據存取模式保持工作目錄和稀疏模式的同步。

無論此設定為何,除非啟用了稀疏檢出,否則 Git 不會檢查「雖被略過但仍存在」的檔案,因此除非 core.sparseCheckouttrue,否則此設定項無效。

splitIndex.maxPercentChange

當使用分割索引(split index)功能時,此選項指定在寫入新的共享索引之前,分割索引中所含條目佔總條目(分割索引與共享索引之和)的百分比。該值應介於 0 到 100 之間。如果值為 0,則總是會寫入新的共享索引;如果為 100,則永不寫入新的共享索引。預設值為 20,因此如果分割索引中的條目數大於總條目數的 20%,就會寫入新的共享索引。請參閱 git-update-index[1]

splitIndex.sharedIndexExpire

當使用分割索引功能時,在建立新的共享索引檔案後,自此變數指定的時間以來未被修改過的共享索引檔案將被刪除。值 "now" 會立即過期所有條目,而 "never" 則完全禁止過期。預設值為 "2.weeks.ago"。請注意,每次根據共享索引檔案建立新的分割索引檔案或從中讀取時,該共享索引檔案都會被視為已修改(用於過期判斷)。請參閱 git-update-index[1]

ssh.variant

預設情況下,Git 會根據已設定的 SSH 指令(透過環境變數 GIT_SSHGIT_SSH_COMMAND 或設定項 core.sshCommand 設定)的基準名稱(basename)來決定要使用的命令列參數。如果無法識別基準名稱,Git 將嘗試透過首先使用 -G(列印設定)選項呼叫已設定的 SSH 指令來偵測對 OpenSSH 選項的支援,隨後會使用 OpenSSH 選項(如果成功),或者除了主機和遠端指令之外不使用任何選項(如果失敗)。

可以設定設定變數 ssh.variant 來覆蓋此偵測。有效值為 ssh(使用 OpenSSH 選項)、plinkputtytortoiseplinksimple(除了主機和遠端指令外無選項)。可以使用值 auto 明確請求預設的自動偵測。任何其他值都會被視為 ssh。此設定也可以透過環境變數 GIT_SSH_VARIANT 覆蓋。

目前針對每個變體使用的命令列參數如下

  • ssh - [-p port] [-4] [-6] [-o option] [username@]host command

  • simple - [username@]host command

  • plinkputty - [-P port] [-4] [-6] [username@]host command

  • tortoiseplink - [-P port] [-4] [-6] -batch [username@]host command

除了 simple 變體外,命令列參數可能會隨著 Git 加入新功能而改變。

stash.index

如果設定為 true,git stash applygit stash pop 的行為將如同提供了 --index 選項。預設為 false。請參閱 git-stash[1] 中的說明。

這也會影響透過諸如 git-merge[1]git-rebase[1]git-pull[1] 等指令的 --autostash 參數來呼叫 git-stash[1] 的情況。

stash.showIncludeUntracked

如果設定為 true,git stash show 指令將顯示儲存條目中的未追蹤檔案。預設為 false。請參閱 git-stash[1] 中關於 'show' 指令的說明。

stash.showPatch

如果設定為 true,不帶選項的 git stash show 指令將以補丁形式顯示儲存條目。預設為 false。請參閱 git-stash[1] 中關於 'show' 指令的說明。

stash.showStat

如果設定為 true,不帶選項的 git stash show 指令將顯示儲存條目的差異統計 (diffstat)。預設為 true。請參閱 git-stash[1] 中關於 'show' 指令的說明。

status.relativePaths

預設情況下,git-status[1] 顯示相對於當前目錄的路徑。將此變數設定為 false 則會顯示相對於儲存庫根目錄的路徑(這是 v1.5.4 之前 Git 的預設行為)。

status.short

設定為 true 可在 git-status[1] 中預設啟用 --short。選項 --no-short 的優先級高於此變數。

status.branch

設定為 true 可在 git-status[1] 中預設啟用 --branch。選項 --no-branch 的優先級高於此變數。

status.aheadBehind

git-status[1] 的非 porcelain 狀態格式中,設定為 true 可預設啟用 --ahead-behind,設定為 false 則啟用 --no-ahead-behind。預設為 true。

status.compareBranches

git-status[1] 中使用的分支比較說明符的空格分隔列表。目前僅支援 @{upstream}@{push}。它們會被解析為當前分支的 branch@{upstream}branch@{push}

如果未設定,預設行為等同於 @{upstream},即與已設定的上游追蹤分支進行比較。

條目將按照它們在設定中出現的順序顯示。解析為相同參考的重複條目在首次出現後將被抑制,因此 @{push} @{upstream} @{push} 最多顯示兩次比較。當 @{upstream}@{push} 解析為相同的遠端追蹤分支時,僅顯示一次比較。

範例

[status]
	compareBranches = @{upstream} @{push}

這將顯示與當前分支的已設定上游和推送追蹤分支兩者的比較。

status.displayCommentPrefix

如果設定為 true,git-status[1] 將在每一行輸出前插入一個註解字首(以 core.commentChar 開頭,即預設的 #)。這是 git-status[1] 在 Git 1.8.4 及更早版本中的行為。預設為 false。

status.renameLimit

git-status[1]git-commit[1] 中執行重新命名偵測時要考慮的檔案數量。預設值為 diff.renameLimit 的值。

status.renames

Git 是否以及如何偵測 git-status[1]git-commit[1] 中的重新命名。如果設定為 "false",則停用重新命名偵測。如果設定為 "true",則啟用基本重新命名偵測。如果設定為 "copies" 或 "copy",Git 也會偵測複製。預設值為 diff.renames 的值。

status.showStash

如果設定為 true,git-status[1] 將顯示當前已儲存的條目數量。預設為 false。

status.showUntrackedFiles

預設情況下,git-status[1]git-commit[1] 會顯示目前未被 Git 追蹤的檔案。僅包含未追蹤檔案的目錄將僅以目錄名稱顯示。顯示未追蹤檔案意味著 Git 需要對整個儲存庫中的所有檔案進行 lstat() 操作,這在某些系統上可能很慢。因此,此變數控制指令顯示未追蹤檔案的方式。可能的值為:

  • no - 不顯示未追蹤檔案。

  • normal - 顯示未追蹤的檔案和目錄。

  • all - 也顯示未追蹤目錄中的個別檔案。

如果未指定此變數,預設為 normal。布林值 true 的所有常見寫法都被視為 normalfalse 被視為 no。此變數可透過 git-status[1]git-commit[1] 的 -u|--untracked-files 選項覆蓋。

status.submoduleSummary

預設為 false。如果將其設定為非零數字或 true(等於 -1 或無限數量),則會啟用子模組摘要,並顯示已修改子模組的提交摘要(請參閱 git-submodule[1] 的 --summary-limit 選項)。請注意,當 diff.ignoreSubmodules 設定為 all,或者僅針對那些 submodule.<name>.ignore=all 的子模組時,所有子模組的摘要輸出指令將被抑制。唯一的例外是 status 和 commit 會顯示暫存的子模組變更。若要同時查看已忽略子模組的摘要,您可以使用 --ignore-submodules=dirty 命令列選項,或使用 git submodule summary 指令,該指令顯示相似的輸出但不會遵循這些設定。

submodule.<name>.url

子模組的 URL。此變數透過 git submodule init 從 .gitmodules 檔案複製到 git 設定檔中。使用者可以在透過 git submodule update 取得子模組之前更改設定的 URL。如果未設定 submodule.<name>.active 或 submodule.active,此變數的存在將作為後備,用於指示 Git 指令是否對該子模組感興趣。詳情請參閱 git-submodule[1]gitmodules[5]

submodule.<name>.update

git submodule update 更新子模組所使用的方法,這是唯一受影響的指令,諸如 git checkout --recurse-submodules 等指令不受影響。它存在是出於歷史原因,當時 git submodule 是與子模組互動的唯一指令;submodule.activepull.rebase 等設定更具針對性。它由 git submodule initgitmodules[5] 檔案填入。請參閱 git-submodule[1] 中關於 update 指令的說明。

submodule.<name>.branch

子模組的遠端分支名稱,由 git submodule update --remote 使用。設定此選項可覆蓋 .gitmodules 檔案中的值。詳情請參閱 git-submodule[1]gitmodules[5]

submodule.<name>.fetchRecurseSubmodules

此選項可用於控制此子模組的遞迴抓取 (recursive fetching)。它可以使用 "git fetch" 和 "git pull" 的 --[no-]recurse-submodules 命令列選項來覆蓋。此設定將覆蓋 gitmodules[5] 檔案中的設定。

submodule.<name>.ignore

定義 "git status" 和 diff 系列指令在何種情況下將子模組顯示為已修改。當設定為 "all" 時,絕不會將子模組視為已修改。儘管如此,它仍然可以使用 --force 選項暫存,並會在 status 的輸出中顯示。當設定為 "dirty" 時,將忽略子模組工作目錄的所有變更,僅考慮子模組 HEAD 與超級專案中記錄的提交之間的差異。"untracked" 還會讓工作目錄中包含已修改追蹤檔案的子模組顯示出來。當設定為 "none"(預設值)時,如果子模組工作目錄中有未追蹤的檔案,它也會將其顯示為已變更。此設定會覆蓋為該子模組在 .gitmodules 中所做的任何設定,這兩個設定都可以透過使用 "--ignore-submodules" 選項在命令列上進行覆蓋。git submodule 指令不受此設定影響。

submodule.<name>.active

布林值,指示 Git 指令是否對該子模組感興趣。此設定選項的優先級高於 submodule.active 設定選項。詳情請參閱 gitsubmodules[7]

submodule.<name>.gitdir

這會為子模組 <name> 設定 gitdir 路徑。當啟用了 extensions.submodulePathConfig 時,此設定才會被尊重,否則無效。啟用後,此設定將成為子模組 gitdir 路徑的唯一事實來源,如果缺失,Git 將報錯。詳情請參閱 git-config[1]

submodule.active

一個重複欄位,包含用於比對子模組路徑的 pathspec,以確定 Git 指令是否對該子模組感興趣。詳情請參閱 gitsubmodules[7]

submodule.recurse

一個布林值,指示指令是否應預設啟用 --recurse-submodules 選項。預設為 false。

當設定為 true 時,可以透過 --no-recurse-submodules 選項停用。請注意,某些缺乏此選項的 Git 指令可能會呼叫上述受 submodule.recurse 影響的指令;例如 git remote update 會呼叫 git fetch,但沒有 --no-recurse-submodules 選項。對於這些指令,一種解決方法是使用 git -c submodule.recurse=0 暫時更改設定值。

以下清單顯示了接受 --recurse-submodules 的指令,以及它們是否受此設定支援。

  • checkoutfetchgreppullpushread-treeresetrestoreswitch 皆支援。

  • clonels-files 不支援。

  • branch 僅在啟用 submodule.propagateBranches 時支援。

submodule.propagateBranches

[實驗性] 一個布林值,在使用 --recurse-submodulessubmodule.recurse=true 時啟用分支支援。啟用此項將允許某些指令接受 --recurse-submodules,並且某些已經接受 --recurse-submodules 的指令現在將考慮分支。預設為 false。

submodule.fetchJobs

指定同時抓取/複製多少個子模組。正整數允許並行抓取該數量的子模組。值 0 將提供合理的預設值。如果未設定,預設為 1。

submodule.alternateLocation

指定複製子模組時如何取得 alternates。可能的值為 nosuperproject。預設假設為 no,這不會加入參考。當值設定為 superproject 時,要複製的子模組會計算相對於超級專案 alternate 的 alternates 位置。

submodule.alternateErrorStrategy

指定如何處理透過 submodule.alternateLocation 計算出的子模組 alternates 錯誤。可能的值為 ignoreinfodie。預設為 die。請注意,如果設定為 ignoreinfo,且計算出的 alternate 發生錯誤,複製將如同未指定 alternate 一樣繼續進行。

tag.forceSignAnnotated

一個布林值,指定建立的註釋標籤(annotated tags)是否應進行 GPG 簽署。如果在命令列上指定了 --annotate,它的優先級高於此選項。

tag.sort

此變數控制 git-tag[1] 顯示標籤時的排序順序。如果未提供 --sort=<value> 選項,將使用此變數的值作為預設值。

tag.gpgSign

一個布林值,指定是否所有標籤都應進行 GPG 簽署。在自動化指令碼中執行時使用此選項可能導致大量標籤被簽署。因此,使用代理程式(agent)來避免多次輸入 GPG 通用短語是很方便的。請注意,此選項不會影響由 -u <keyid>--local-user=<keyid> 選項啟用的標籤簽署行為。

tar.umask

此變數可用於限制 tar 封存條目的權限位元。預設值為 0002,這會關閉全域寫入權限。特殊值 "user" 表示將改用封存使用者的 umask。請參閱 umask(2) 和 git-archive[1]

Trace2 設定僅從系統和全域設定檔中讀取;儲存庫本機和工作樹設定檔以及 -c 命令列參數不受尊重。

trace2.normalTarget

此變數控制一般目標目的地。它可以被 GIT_TRACE2 環境變數覆蓋。下表顯示了可能的值。

trace2.perfTarget

此變數控制效能目標目的地。它可以被 GIT_TRACE2_PERF 環境變數覆蓋。下表顯示了可能的值。

trace2.eventTarget

此變數控制事件目標目的地。它可以被 GIT_TRACE2_EVENT 環境變數覆蓋。下表顯示了可能的值。

  • 0false - 停用目標。

  • 1true - 寫入到 STDERR

  • [2-9] - 寫入到已開啟的檔案描述符。

  • <absolute-pathname> - 以附加模式寫入檔案。如果目標已存在且為目錄,追蹤記錄將寫入該目錄下的檔案中(每個處理序一個檔案)。

  • af_unix:[<socket-type>:]<absolute-pathname> - 寫入到 Unix Domain Socket(在支援該功能的平台上)。通訊端類型可以是 streamdgram;如果省略,Git 將嘗試兩者。

trace2.normalBrief

布林值。當為 true 時,timefilenameline 欄位將從一般輸出中省略。可被 GIT_TRACE2_BRIEF 環境變數覆蓋。預設為 false。

trace2.perfBrief

布林值。當為 true 時,timefilenameline 欄位將從 PERF 輸出中省略。可被 GIT_TRACE2_PERF_BRIEF 環境變數覆蓋。預設為 false。

trace2.eventBrief

布林值。當為 true 時,timefilenameline 欄位將從事件輸出中省略。可被 GIT_TRACE2_EVENT_BRIEF 環境變數覆蓋。預設為 false。

trace2.eventNesting

整數。指定事件輸出中巢狀區域的所需深度。超過此值的區域將被省略。可被 GIT_TRACE2_EVENT_NESTING 環境變數覆蓋。預設為 2。

trace2.configParams

以逗號分隔的「重要」設定項模式清單,應記錄在 trace2 輸出中。例如,core.*,remote.*.url 將導致 trace2 輸出包含列出每個已設定遠端位置的事件。可被 GIT_TRACE2_CONFIG_PARAMS 環境變數覆蓋。預設為未設定。

trace2.envVars

以逗號分隔的「重要」環境變數清單,應記錄在 trace2 輸出中。例如,GIT_HTTP_USER_AGENT,GIT_CONFIG 將導致 trace2 輸出包含列出 HTTP 使用者代理程式覆蓋項和 Git 設定檔位置的事件(假設有設定)。可被 GIT_TRACE2_ENV_VARS 環境變數覆蓋。預設為未設定。

trace2.destinationDebug

布林值。當為 true 時,如果無法開啟追蹤目標目的地進行寫入,Git 將列印錯誤訊息。預設情況下,這些錯誤會被抑制,並且追蹤會被靜默停用。可被 GIT_TRACE2_DST_DEBUG 環境變數覆蓋。

trace2.maxFiles

整數。在將追蹤檔案寫入目標目錄時,如果寫入會超過此數量,則不再寫入額外的追蹤檔案。改為寫入一個 sentinel 檔案,該檔案將封鎖對此目錄的進一步追蹤。預設為 0,這會停用此檢查。

trailer.separators

此選項告知哪些字元被視為結尾分隔符。預設情況下,僅 : 被識別為結尾分隔符,除非為了與其他 git 指令相容,在命令列上總是接受 =

此選項給出的第一個字元將作為未在該結尾的設定中指定其他分隔符時使用的預設字元。

例如,如果此選項的值為 %=$,則只有使用 <key><sep><value> 格式且 <sep> 包含 %=$ 後跟空格的行才會被視為結尾。而 % 將是使用的預設分隔符,因此預設情況下結尾將顯示為:<key>% <value>(鍵和值之間會出現一個百分號和一個空格)。

trailer.where

此選項告知新結尾將被加入到何處。

這可以是 end(預設值)、startafterbefore

如果是 end,則每個新結尾將出現在現有結尾的末尾。

如果是 start,則每個新結尾將出現在現有結尾的開頭,而不是末尾。

如果是 after,則每個新結尾將出現在最後一個具有相同 <key> 的結尾之後。

如果是 before,則每個新結尾將出現在第一個具有相同 <key> 的結尾之前。

trailer.ifexists

此選項可以選擇當輸入中已經存在至少一個具有相同 <key> 的結尾時要執行的操作。

此選項的有效值為:addIfDifferentNeighbor(預設值)、addIfDifferentaddreplacedoNothing

使用 addIfDifferentNeighbor,僅在加入新結尾的位置上方或下方沒有具有相同(<key>, <value>)對的結尾時,才會加入新結尾。

使用 addIfDifferent,僅在輸入中尚未存在具有相同(<key>, <value>)對的結尾時,才會加入新結尾。

使用 add,即使輸入中已存在一些具有相同(<key>, <value>)對的結尾,也會加入新結尾。

使用 replace,將刪除具有相同 <key> 的現有結尾,並加入新結尾。被刪除的結尾將是距離新結尾位置最近的(具有相同 <key>)那一個。

使用 doNothing,將不執行任何操作;也就是說,如果輸入中已經存在具有相同 <key> 的結尾,則不會加入新結尾。

trailer.ifmissing

此選項可以選擇當輸入中尚未存在具有相同 <key> 的結尾時要執行的操作。

此選項的有效值為:add(預設值)和 doNothing

使用 add,將加入一個新結尾。

使用 doNothing,將不執行任何操作。

trailer.<key-alias>.key

定義 <key-alias> 對應的 <key><key-alias> 必須是 <key> 的字首(不分大小寫)。例如,在 git config trailer.ack.key "Acked-by" 中,Acked-by<key>,而 ack<key-alias>。此設定允許在命令列上使用較短的 --trailer "ack:..." 呼叫,使用 "ack" <key-alias> 代替較長的 --trailer "Acked-by:..."

<key> 的末尾,可以出現一個分隔符,然後是一些空格字元。預設情況下,唯一有效的分隔符是 :,但這可以使用 trailer.separators 設定變數更改。

如果鍵中有分隔符,則在加入結尾時,它會覆蓋預設分隔符。

trailer.<key-alias>.where

此選項採用與 trailer.where 設定變數相同的值,它會針對具有指定 <key-alias> 的結尾,覆蓋該選項所指定的設定。

trailer.<key-alias>.ifexists

此選項採用與 trailer.ifexists 設定變數相同的值,它會針對具有指定 <key-alias> 的結尾,覆蓋該選項所指定的設定。

trailer.<key-alias>.ifmissing

此選項採用與 trailer.ifmissing 設定變數相同的值,它會針對具有指定 <key-alias> 的結尾,覆蓋該選項所指定的設定。

trailer.<key-alias>.command

已棄用,建議改用 trailer.<key-alias>.cmd。此選項的行為與 trailer.<key-alias>.cmd 相同,只是它不會傳遞任何內容作為指定指令的參數。相反,子字串 $ARG 的第一次出現會被替換為將作為參數傳遞的 <value>

請注意,使用者指令中的 $ARG 只會被替換一次,而且原始的 $ARG 替換方式並不安全。

當同一 <key-alias> 同時提供了 trailer.<key-alias>.cmdtrailer.<key-alias>.command 時,會使用 trailer.<key-alias>.cmd,而忽略 trailer.<key-alias>.command

trailer.<key-alias>.cmd

此選項可用於指定一個 Shell 指令,該指令將被呼叫一次以自動加入一個具有指定 <key-alias> 的結尾,隨後每次指定 --trailer <key-alias>=<value> 參數時,都會呼叫該指令來修改該選項會產生的結尾的 <value>

當指定指令第一次被呼叫以加入具有指定 <key-alias> 的結尾時,其行為就像在 git-interpret-trailers[1] 的開頭加入了一個特殊的 --trailer <key-alias>=<value> 參數,其中 <value> 取自指令的標準輸出,並刪除任何前導和尾隨空白。

如果命令列上也傳遞了一些 --trailer <key-alias>=<value> 參數,則對於每個具有相同 <key-alias> 的這類參數,該指令都會再次呼叫一次。而這些參數(如果有的話)中的 <value> 部分將作為第一個參數傳遞給該指令。透過這種方式,指令可以根據 --trailer <key-alias>=<value> 參數中傳遞的 <value> 來計算出一個 <value>

transfer.credentialsInUrl

已設定的 URL 可能包含明文憑證,格式為 <protocol>://<user>:<password>@<domain>/<path>。您可能希望警告或禁止使用此類設定(建議改用 git-credential[1])。這將用於 git-clone[1]git-fetch[1]git-push[1] 以及對已設定 URL 的任何其他直接使用。

請注意,這目前僅限於偵測 remote.<name>.url 設定中的憑證;它不會偵測 remote.<name>.pushurl 設定中的憑證。

您可能希望啟用此功能以防止無意中的憑證洩漏,例如因為:

  • 您執行 git 的作業系統或系統可能未提供方法或以其他方式允許您設定儲存使用者名稱和/或密碼的設定檔權限。

  • 即使提供了,將此類資料「靜態」儲存也可能以其他方式暴露您,例如備份程序可能會將資料複製到另一個系統。

  • Git 程式會將完整 URL 作為命令列參數傳遞給彼此,這意味著在允許其他使用者查看處理序清單的系統上,憑證將暴露給其他無特權的使用者。在 Linux 上,procfs(5) 中記錄的 "hidepid" 設定允許設定此行為。

    如果您不適用上述擔憂,那麼您可能不需要擔心因為在 git 的設定檔中儲存敏感資料而導致的憑證暴露。如果您確實想使用此功能,請將 transfer.credentialsInUrl 設定為以下值之一:

  • allow(預設):Git 將繼續其活動而不發出警告。

  • warn:Git 在解析包含明文憑證的 URL 時,會向 stderr 寫入警告訊息。

  • die:Git 在解析包含明文憑證的 URL 時,會向 stderr 寫入失敗訊息。

transfer.fsckObjects

當未設定 fetch.fsckObjectsreceive.fsckObjects 時,將改用此變數的值。預設為 false。

當設定時,如果出現損壞的物件或連結到不存在的物件,fetch 或 receive 將會中止。此外,還會檢查各種其他問題,包括遺留問題(請參閱 fsck.<msg-id>)以及潛在的安全問題,例如 .GIT 目錄的存在或惡意的 .gitmodules 檔案(詳情請參閱 v2.2.1 和 v2.17.1 的發行說明)。未來版本可能會加入其他健全性和安全檢查。

在接收端,fsckObjects 失敗將使這些物件無法存取,請參閱 git-receive-pack[1] 中的「QUARANTINE ENVIRONMENT」。在 fetch 端,損壞的物件將留在儲存庫中成為未被參考的物件。

由於 fetch.fsckObjects 實作的非隔離性質,不能依賴它像 receive.fsckObjects 那樣保持物件儲存區的乾淨。

物件在解壓縮時會被寫入物件儲存區,因此即使 "fetch" 失敗,也可能引入惡意物件,只是隨後的 "fetch" 成功了,因為只檢查新的傳入物件,而不是那些已經寫入物件儲存區的物件。不應依賴行為上的這種差異。在未來,此類物件也可能被「隔離」起來進行 fetch。

目前,偏執的使用者如果想要與 "push" 相同的保護,則需要找到某種方法來模擬隔離環境。例如,在內部鏡像的情況下,分兩步執行鏡像,先抓取不可信物件,然後對另一個內部儲存庫執行第二次 "push"(這將使用隔離),並讓內部用戶端使用此被推送到的儲存庫,或者封鎖內部 fetch,僅在執行完整 "fsck"(且在此期間沒有新的 fetch)後才允許它們。

transfer.hideRefs

receive-packupload-pack 用於決定從初始廣告中省略哪些參考的字串。使用多個定義來指定多個前置字串。位於此變數值中列出的階層下的參考會被排除,並且在回應 git pushgit fetch 時會被隱藏。請參閱 receive.hideRefsuploadpack.hideRefs 以取得程式特定的設定版本。

您也可以在參考名稱前包含 ! 以否定該條目,明確公開它,即使之前的條目將其標記為隱藏。如果您有多個 hideRefs 值,後面的條目會覆蓋前面的條目(且更特定的設定檔中的條目會覆蓋較不特定的條目)。

如果使用了名稱空間(namespace),則會在與 transfer.hiderefs 模式比對之前,從每個參考中剝離名稱空間前置字串。為了在剝離前比對參考,請在參考名稱前加入 ^。如果您組合 !^! 必須先指定。

例如,如果 transfer.hideRefs 中指定了 refs/heads/master 且當前名稱空間為 foo,則 refs/namespaces/foo/refs/heads/master 會從廣告中省略。如果設定了 uploadpack.allowRefInWantupload-pack 將在協定 v2 fetch 指令中將 want-ref refs/heads/master 視為 refs/namespaces/foo/refs/heads/master 不存在。另一方面,receive-pack 仍會廣告參考指向的物件 ID,而不提及名稱(所謂的 ".have" 行)。

即使您隱藏了參考,用戶端仍可能透過 gitnamespaces[7] 手冊頁「SECURITY」部分中描述的技術竊取目標物件;最好將私有資料保存在單獨的儲存庫中。

transfer.unpackLimit

當未設定 fetch.unpackLimitreceive.unpackLimit 時,將改用此變數的值。預設值為 100。

transfer.advertiseSID

布林值。當為 true 時,用戶端和伺服器處理序將向其遠端對應端廣告其唯一會話 ID。預設為 false。

transfer.bundleURI

當為 true 時,本地 git clone 指令將向遠端伺服器請求套件資訊(如果已廣告),並在透過 Git 協定繼續複製之前下載套件。預設為 false

transfer.advertiseObjectInfo

當為 true 時,object-info 功能由伺服器廣告。預設為 false。

uploadarchive.allowUnreachable

如果為 true,允許用戶端使用 git archive --remote 請求任何樹(tree),無論是否可從參考尖端(ref tips)存取。詳情請參閱 git-upload-archive[1] 「SECURITY」部分的討論。預設為 false

uploadpack.hideRefs

此變數與 transfer.hideRefs 相同,但僅適用於 upload-pack(因此僅影響 fetch,不影響 push)。嘗試 fetch 隱藏參考的 git fetch 將會失敗。另請參閱 uploadpack.allowTipSHA1InWant

uploadpack.allowTipSHA1InWant

uploadpack.hideRefs 生效時,允許 upload-pack 接受請求隱藏參考尖端物件的 fetch 請求(預設情況下,此類請求會被拒絕)。另請參閱 uploadpack.hideRefs。即使此設定為 false,用戶端仍可能透過 gitnamespaces[7] 手冊頁「SECURITY」部分中描述的技術竊取物件;最好將私有資料保存在單獨的儲存庫中。

uploadpack.allowReachableSHA1InWant

允許 upload-pack 接受請求任何可從任何參考尖端存取的物件的 fetch 請求。但是,請注意計算物件可存取性在計算上是昂貴的。預設為 false。即使此設定為 false,用戶端仍可能透過 gitnamespaces[7] 手冊頁「SECURITY」部分中描述的技術竊取物件;最好將私有資料保存在單獨的儲存庫中。

uploadpack.allowAnySHA1InWant

允許 upload-pack 接受請求任何物件的 fetch 請求。它隱含了 uploadpack.allowTipSHA1InWantuploadpack.allowReachableSHA1InWant。如果設定為 true,將啟用這兩者;如果設定為 false,將停用這兩者。預設未設定。

uploadpack.keepAlive

upload-pack 啟動了 pack-objects 後,在 pack-objects 準備封裝檔時可能會有一段靜默期。通常它會輸出進度資訊,但如果 fetch 使用了 --quietpack-objects 在封裝資料開始之前將完全不會輸出任何內容。某些用戶端和網路可能會認為伺服器已當機並放棄。此選項指示 upload-pack 每隔 uploadpack.keepAlive 秒發送一個空的 keepalive 封包。將此選項設定為 0 可完全停用 keepalive 封包。預設為 5 秒。

uploadpack.packObjectsHook

如果設定了此選項,當 upload-pack 執行 git pack-objects 為用戶端建立封裝檔時,它將改為執行此 Shell 指令。pack-objects 指令及其參數(包括開頭的 git pack-objects)將附加到該 Shell 指令之後。Hook 的 stdin 和 stdout 被處理為如同執行了 pack-objects 本身。也就是說,upload-pack 將把預計給 pack-objects 的輸入餵給該 Hook,並期待在 stdout 上得到一個完成的封裝檔。

請注意,此設定變數僅在受保護的設定中指定時才有效(請參閱 SCOPES)。這是防止從不受信任的儲存庫進行 fetch 的安全措施。

uploadpack.allowFilter

如果設定了此選項,upload-pack 將支援部分複製(partial clone)和部分抓取(partial fetch)物件過濾。

uploadpackfilter.allow

提供未指定物件過濾器的預設值(見下方的設定變數)。如果設定為 true,這也將啟用未來新增的所有過濾器。預設為 true

uploadpackfilter.<filter>.allow

明確允許或禁止與 <filter> 對應的物件過濾器,其中 <filter> 可以是以下之一:blob:noneblob:limitobject:typetreesparse:oidcombine。如果使用組合過濾器,必須同時允許 combine 和所有巢狀過濾器類型。預設值為 uploadpackfilter.allow

uploadpackfilter.tree.maxDepth

僅在 <n> 不超過 uploadpackfilter.tree.maxDepth 的值時,才允許 --filter=tree:<n>。如果已設定,這也隱含了 uploadpackfilter.tree.allow=true,除非已經設定了該設定變數。如果未設定,則無效。

uploadpack.allowRefInWant

如果設定了此選項,upload-pack 將支援協定版本 2 fetch 指令的 ref-in-want 功能。此功能旨在造福負載平衡的伺服器,由於複製延遲,它們對於其參考指向哪些 OID 可能沒有相同的看法。

url.<base>.insteadOf

任何以該值開頭的 URL 都將被重寫,改以 <base> 開頭。在某些站點提供大量儲存庫並使用多種存取方法,而某些使用者需要使用不同存取方法的情況下,此功能允許使用者指定任何等效 URL,並讓 Git 自動將 URL 重寫為適合特定使用者的最佳替代方案,即使對於該站點上從未見過的儲存庫也是如此。當多個 insteadOf 字串符合給定 URL 時,使用最長的匹配項。

請注意,任何協定限制都將套用於重寫後的 URL。如果重寫更改了 URL 以使用自訂協定或遠端助手,您可能需要調整 protocol.*.allow 設定以允許該請求。特別是,您期望用於子模組的協定必須設定為 always,而不是預設的 user。請參閱上述 protocol.allow 的說明。

url.<base>.pushInsteadOf

任何以該值開頭的 URL 將不被允許推送;相反,它將被重寫為以 <base> 開頭,並將推送到生成的 URL。在某些站點提供大量儲存庫並使用多種存取方法(其中一些不允許推送)的情況下,此功能允許使用者指定僅抓取 URL,並讓 Git 自動使用適當的 URL 進行推送,即使對於該站點上從未見過的儲存庫也是如此。當多個 pushInsteadOf 字串符合給定 URL 時,使用最長的匹配項。如果遠端有明確的 pushurl,Git 將忽略該遠端的此設定。

user.name
user.email
author.name
author.email
committer.name
committer.email

user.nameuser.email 變數決定提交物件中 authorcommitter 欄位的最終內容。如果您需要 authorcommitter 不同,可以設定 author.nameauthor.emailcommitter.namecommitter.email 變數。所有這些都可以被 GIT_AUTHOR_NAMEGIT_AUTHOR_EMAILGIT_COMMITTER_NAMEGIT_COMMITTER_EMAILEMAIL 環境變數覆蓋。

請注意,這些變數的 name 形式傳統上指代某種形式的個人姓名。請參閱 git-commit[1]git[1] 的環境變數部分以獲取關於這些設定的更多資訊,如果您在尋找身份驗證憑證,請參考 credential.username 選項。

user.useConfigOnly

指示 Git 避免嘗試猜測 user.emailuser.name 的預設值,而是僅從設定中檢索這些值。例如,如果您有多個電子郵件地址,並希望為每個儲存庫使用不同的地址,那麼在將此設定選項設定為全域設定中的 true(連同名稱)後,Git 會在新的複製儲存庫中進行新提交之前,提示您設定電子郵件。預設為 false

user.signingKey

如果 git-tag[1]git-commit[1] 在建立簽署標籤或提交時未自動選擇您想要的金鑰,您可以使用此變數覆蓋預設選擇。此選項會原封不動地傳遞給 gpg 的 --local-user 參數,因此您可以使用 gpg 支援的任何方法來指定金鑰。如果 gpg.format 設定為 ssh,這可以包含您的私有 SSH 金鑰路徑,或者在使用 ssh-agent 時包含公鑰路徑。或者,它可以直接包含以 key:: 為前置字串的公鑰(例如:"key::ssh-rsa XXXXXX identifier")。私鑰需要透過 ssh-agent 可用。如果未設定,Git 將呼叫 gpg.ssh.defaultKeyCommand(例如:"ssh-add -L")並嘗試使用第一個可用的金鑰。為了向後相容,以 "ssh-" 開頭的原始金鑰(例如 "ssh-rsa XXXXXX identifier")會被視為 "key::ssh-rsa XXXXXX identifier",但這種形式已棄用;請改用 key:: 形式。

versionsort.prereleaseSuffix (已棄用)

versionsort.suffix 的已棄用別名。如果已設定 versionsort.suffix,則此項將被忽略。

versionsort.suffix

即使在 git-tag[1] 中使用版本排序,具有相同基礎版本但不同字尾的標籤名稱仍會按字典順序排序,導致例如預發布標籤出現在主版本之後(例如 "1.0-rc1" 在 "1.0" 之後)。可以指定此變數來確定具有不同字尾的標籤的排序順序。

透過在此變數中指定單個字尾,任何包含該字尾的標籤名稱都將出現在相應的主發布之前。例如,如果變數設定為 "-rc",則所有 "1.0-rcX" 標籤都將出現在 "1.0" 之前。如果指定多次(每個字尾一次),則設定中字尾的順序將決定具有這些字尾的標籤名稱的排序順序。例如,如果 "-pre" 在設定中出現在 "-rc" 之前,則所有 "1.0-preX" 標籤都將列在所有 "1.0-rcX" 標籤之前。主發布標籤相對於具有各種字尾的標籤的位置可以透過在這些其他字尾中指定空字尾來確定。例如,如果字尾 "-rc"、""、"-ck" 和 "-bfs" 按此順序出現在設定中,則所有 "v4.8-rcX" 標籤優先列出,接著是 "v4.8",然後是 "v4.8-ckX",最後是 "v4.8-bfsX"。

如果多個字尾符合同一個標籤名稱,則該標籤名稱將根據在標籤名稱中最早位置開始的字尾進行排序。如果多個不同的符合字尾在該最早位置開始,則該標籤名稱將根據這些字尾中最長的一個進行排序。如果不同字尾位於多個設定檔中,它們之間的排序順序未定義。

web.browser

指定某些指令可能使用的網頁瀏覽器。目前僅 git-instaweb[1]git-help[1] 可能使用它。

worktree.guessRemote

如果未指定分支,且未使用 -b-B--detach,則 git worktree add 預設從 HEAD 建立一個新分支。如果 worktree.guessRemote 設定為 true,worktree add 會嘗試尋找名稱與新分支名稱唯一匹配的遠端追蹤分支。如果存在此類分支,它將被檢出並設定為新分支的「上游」。如果找不到此類匹配項,它將回退到從當前 HEAD 建立新分支。

worktree.useRelativePaths

使用相對路徑(當為 "true" 時)或絕對路徑(當為 "false" 時)連結工作樹。這對於可能在不同位置或環境之間移動儲存庫和工作樹的設定特別有用。預設為 "false"。

請注意,將 worktree.useRelativePaths 設定為 "true" 意味著啟用 extensions.relativeWorktrees 設定(請參閱 git-config[1]),從而使其與舊版本的 Git 不相容。

錯誤 (BUGS)

使用已棄用的 [section.subsection] 語法時,如果子區段以至少一個大寫字元給出,更改值將導致新增一個多行鍵,而不是變更。例如,當設定如下所示時:

  [section.subsection]
    key = value1

並且執行 git config section.Subsection.key value2 將導致:

  [section.subsection]
    key = value1
    key = value2

GIT

git[1] 套件的一部分