Git
英文 ▾ 主題 ▾ 最新版本 ▾ git-config 最後更新於 2.47.0

名稱

git-config - 取得與設定儲存庫或全域選項

概要

git config list [<file-option>] [<display-option>] [--includes]
git config get [<file-option>] [<display-option>] [--includes] [--all] [--regexp] [--value=<value>] [--fixed-value] [--default=<default>] <name>
git config set [<file-option>] [--type=<type>] [--all] [--value=<value>] [--fixed-value] <name> <value>
git config unset [<file-option>] [--all] [--value=<value>] [--fixed-value] <name> <value>
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-pattern(除非給定 --fixed-value 選項,否則它是一個擴展正規表示式)。只有符合模式的現有值會被更新或取消設定。如果您想要處理符合模式的行,只需在前面加上一個驚嘆號(另請參閱 範例),但請注意,這僅在未使用 --fixed-value 選項時才有效。

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

預設情況下,讀取時,會從系統、全域和儲存庫本機設定檔讀取值,並且可以使用選項 --system--global--local--worktree--file <filename> 來告知指令僅從該位置讀取(請參閱 檔案)。

寫入時,預設情況下,新值會寫入儲存庫本機設定檔,並且可以使用選項 --system--global--worktree--file <filename> 來告知指令寫入該位置(您可以說 --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 <config-file>

選項

--replace-all

預設行為是最多取代一行。這會取代符合鍵(以及可選的 value-pattern)的所有行。

--append

在不變更任何現有值的情況下,將新行新增至選項。這與在 set 中提供 --value=^$ 相同。

--comment <message>

在新行或修改行的末尾附加註解。

If _<message>_ begins with one or more whitespaces followed
by "#", it is used as-is.  If it begins with "#", a space is
prepended before it is used.  Otherwise, a string " # " (a
space followed by a hash followed by a space) is prepended
to it.  And the resulting string is placed immediately after
the value defined for the variable.  The _<message>_ must
not contain linefeed characters (no multi-line comments are
permitted).
--all

使用 get 時,傳回多值鍵的所有值。

--regexp

使用 get 時,將名稱解譯為正規表示式。正規表示式比對目前是區分大小寫的,並且針對鍵的正規化版本完成,其中區段和變數名稱會轉換為小寫,但子區段名稱則不會。

--url=<URL>

當給定一個由兩部分組成的 <name>,如 <section>.<key> 時,則傳回 <section>.<URL>.<key> 的值,其 <URL> 部分與給定的 URL 最佳比對(如果不存在此類鍵,則會使用 <section>.<key> 的值作為回退)。當只給定 <section> 作為名稱時,則對區段中的所有鍵執行此操作,並列出它們。如果找不到值,則傳回錯誤代碼 1。

--global

對於寫入選項:寫入全域 ~/.gitconfig 檔案,而不是儲存庫 .git/config,如果此檔案存在且 ~/.gitconfig 檔案不存在,則寫入 $XDG_CONFIG_HOME/git/config 檔案。

對於讀取選項:僅從全域 ~/.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] 中的「指定修訂版本」章節。

--fixed-value

當與 value-pattern 引數一起使用時,將 value-pattern 視為精確的字串,而不是正規表示式。這會將符合條件的名稱/值配對限制為僅限於值與 value-pattern 完全相等的情況。

--type <type>

git config 將確保任何輸入或輸出在給定的類型約束下都是有效的,並且會以 <type> 的正規形式正規化傳出的值。

有效的 <type> 包括

  • bool:將值正規化為 "true" 或 "false"。

  • int:將值正規化為簡單的十進位數字。可選的後綴 *k*、*m* 或 *g* 會導致值在輸入時分別乘以 1024、1048576 或 1073741824。

  • bool-or-int:根據上述的 boolint 正規化。

  • path:透過將開頭的 ~ 展開為 $HOME 的值,並將 ~user 展開為指定使用者的主目錄來正規化。此指定詞在設定值時沒有任何作用(但您可以使用命令列的 git config section.variable ~/ 來讓您的 shell 執行展開)。

  • expiry-date:透過將固定或相對的日期字串轉換為時間戳記來正規化。此指定詞在設定值時沒有任何作用。

  • color:在取得值時,透過轉換為 ANSI 顏色跳脫序列來正規化。在設定值時,會執行健全性檢查,以確保給定的值可以正規化為 ANSI 顏色,但會按原樣寫入。

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

用於選擇類型指定詞的歷史選項。建議改用 --type(請參閱上方)。

--no-type

取消設定先前設定的類型指定詞(如果先前有設定)。此選項要求 git config 不要正規化擷取的變數。如果沒有 --type=<type>--<type>,則 --no-type 不會有任何作用。

-z
--null

對於所有輸出值和/或金鑰的選項,始終以空字元(而不是換行符號)結束值。改用換行符號作為金鑰和值之間的分隔符號。這允許安全地剖析輸出,而不會因例如包含換行符號的值而混淆。

--name-only

僅輸出 listget 的組態變數名稱。

--show-origin

使用來源類型(檔案、標準輸入、blob、命令列)和實際來源(組態檔路徑、ref 或 blob id,如果適用)來擴充所有查詢的組態選項的輸出。

--show-scope

--show-origin 類似,它使用該值的範圍(工作樹、本機、全域、系統、命令)來擴充所有查詢的組態選項的輸出。

--get-colorbool <name> [<stdout-is-tty>]

尋找 <name>(例如 color.diff)的顏色設定,並輸出 "true" 或 "false"。<stdout-is-tty> 應為 "true" 或 "false",並且在組態顯示 "auto" 時會納入考量。如果缺少 <stdout-is-tty>,則會檢查命令本身的標準輸出,如果使用顏色,則會以狀態 0 結束,否則會以狀態 1 結束。當 name 的顏色設定未定義時,命令會使用 color.ui 作為回退。

--[no-]includes

在查閱值時,遵循組態檔中的 include.* 指示。當給定特定檔案時(例如,使用 --file--global 等)預設為 off,而當搜尋所有組態檔時則預設為 on

--default <value>

當使用 get 且找不到請求的變數時,行為如同 <value> 是指派給該變數的值。

已棄用的模式

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

git config <name>

已由 git config get <name> 取代。

git config <name> <value> [<value-pattern>]

已由 git config set [--value=<pattern>] <name> <value> 取代。

-l
--list

已由 git config list 取代。

--get <name> [<value-pattern>]

已由 git config get [--value=<pattern>] <name> 取代。

--get-all <name> [<value-pattern>]

已由 git config get [--value=<pattern>] --all <name> 取代。

--get-regexp <name-regexp>

已由 git config get --all --show-names --regexp <name-regexp> 取代。

--get-urlmatch <name> <URL>

已由 git config get --all --show-names --url=<URL> <name> 取代。

--get-color <name> [<default>]

已由 git config get --type=color [--default=<default>] <name> 取代。

--add <name> <value>

已由 git config set --append <name> <value> 取代。

--unset <name> [<value-pattern>]

已由 git config unset [--value=<pattern>] <name> 取代。

--unset-all <name> [<value-pattern>]

已由 git config unset [--value=<pattern>] --all <name> 取代。

--rename-section <old-name> <new-name>

已由 git config rename-section <old-name> <new-name> 取代。

--remove-section <name>

已由 git config remove-section <name> 取代。

-e
--edit

已由 git config edit 取代。

組態

pager.config 僅在列出組態時才有效,也就是說,當使用 listget 可能會傳回多個結果時。預設為使用分頁器。

檔案

預設情況下,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 指定組態範圍,來限制從哪些組態來源讀取或寫入。如需更多資訊,請參閱上方的 選項

範圍

每個組態來源都屬於一個組態範圍。範圍包括

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 選項

除了 command 之外,每個範圍都對應一個命令列選項:--system--global--local--worktree

讀取選項時,指定範圍只會從該範圍內的文件讀取選項。寫入選項時,指定範圍會寫入該範圍內的文件(而不是儲存庫特定的組態檔)。請參閱上方的 選項 以取得完整說明。

大多數組態選項無論定義在何種範圍都有效,但有些選項僅在特定範圍內有效。請參閱各選項的文件以了解完整詳細資訊。

受保護的組態

受保護的組態指的是 systemglobalcommand 範圍。基於安全性考量,某些選項只有在受保護的組態中指定時才會生效,否則會被忽略。

Git 將這些範圍視為由使用者或受信任的管理員所控制。這是因為控制這些範圍的攻擊者可以在不使用 Git 的情況下造成重大損害,因此假設使用者的環境會保護這些範圍免受攻擊者的侵害。

環境變數

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

如果沒有提供 --file 選項給 git config,則使用 GIT_CONFIG 給定的檔案,如同透過 --file 提供一樣。此變數對其他 Git 命令沒有影響,主要用於歷史相容性;通常沒有理由使用它來取代 --file 選項。

範例

給定一個類似這樣的 .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

假設的 proxy 命令條目實際上具有一個後綴,以辨別它們適用於哪個 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

如果你想要刪除多值變數 (如上面的 core.gitproxy) 的條目,則必須提供一個正規表示式,以精確匹配其中一行的值。

要查詢給定鍵的值,請執行以下操作

% git config get core.filemode

或者,要查詢多值變數

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

如果你想知道多值變數的所有值,請執行以下操作

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

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

% git config set --all core.gitproxy ssh

但是,如果你真的只想替換預設 proxy 的行,也就是沒有「for …​」後綴的行,請執行類似以下的操作

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

要實際匹配只帶有驚嘆號的值,你必須執行以下操作

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

要添加新的 proxy,而不變更任何現有的 proxy,請使用

% 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 的底層命令和瓷器命令都會使用組態變數。變數分為多個區段,其中變數本身的完整變數名稱是最後一個以點分隔的片段,而區段名稱是最後一個點之前的所有內容。變數名稱不區分大小寫,只允許字母數字字符和 -,並且必須以字母字符開頭。某些變數可能會出現多次;我們稱該變數為多值變數。

語法

語法相當靈活且寬鬆。空白字符(在此上下文中是指空格字符 (SP) 和水平制表符 (HT))大多被忽略。#; 字符會開始註解到行尾。空白行會被忽略。

檔案由區段和變數組成。區段以方括號中的區段名稱開始,並持續到下一個區段開始。區段名稱不區分大小寫。區段名稱中只允許字母數字字符、-.。每個變數都必須屬於某個區段,這表示在第一次設定變數之前必須有一個區段標頭。

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

	[section "subsection"]

子區段名稱區分大小寫,並且可以包含除換行符號和空位元組以外的任何字符。雙引號 " 和反斜線可以分別透過將其轉義為 \"\\ 來包含。反斜線後面的其他字符在讀取時會被丟棄;例如,\t 會被讀取為 t,而 \0 會被讀取為 0。區段標頭不能跨越多行。變數可以直接屬於區段或給定的子區段。如果你有 [section "subsection"],則可以有 [section],但你不需要這樣做。

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

所有其他行(以及區段標頭之後的剩餘行)都被識別為設定變數,形式為 name = value(或僅為 name,這是表示變數為布林值「true」的簡寫)。變數名稱不區分大小寫,只允許字母數字字符和 -,並且必須以字母字符開頭。

丟棄 name=value 周圍的空白字符。保留 value 內的內部空白字符。丟棄以 #; 開頭並延伸到行尾的註解。定義值的行可以透過在結尾處使用反斜線 (\) 來繼續到下一行;丟棄反斜線和行尾字符。

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

會識別以下轉義序列(除了 \"\\ 之外):\n 代表換行符號 (NL)、\t 代表水平制表符 (HT, TAB) 和 \b 代表退格鍵 (BS)。其他字符轉義序列(包括八進位轉義序列)無效。

包含

includeincludeIf 區段允許你從其他來源包含組態指令。這些區段的行為彼此相同,但 includeIf 區段可能會在其條件評估為 false 時被忽略;請參閱下方的「條件包含」。

你可以透過將特殊 include.path (或 includeIf.*.path) 變數設定為要包含的檔案名稱,從另一個檔案包含組態檔。該變數採用路徑名稱作為其值,並且需要進行波浪符號擴充。這些變數可以多次給定。

包含的檔案內容會立即插入,就像它們位於包含指令的位置一樣。如果變數的值是相對路徑,則該路徑會被視為相對於包含指令的組態檔。請參閱下方的範例。

條件包含

你可以透過將 includeIf.<condition>.path 變數設定為要包含的檔案名稱,從另一個檔案有條件地包含組態檔。

條件以一個關鍵字開始,後面接著一個冒號和一些資料,其格式和含義取決於關鍵字。支援的關鍵字如下:

gitdir

關鍵字 gitdir: 後面的資料會被用作 glob 模式。如果 .git 目錄的位置與模式相符,則符合包含條件。

.git 位置可能會自動偵測到,或是來自 $GIT_DIR 環境變數。如果儲存庫是透過 .git 檔案自動偵測到的(例如,來自子模組或連結的工作樹),則 .git 位置會是 .git 目錄所在的最終位置,而不是 .git 檔案所在的位置。

該模式可以包含標準的 globbing 通配符號和另外兩個,**//**,它們可以匹配多個路徑組件。請參閱 gitignore[5] 以了解詳細資訊。為方便起見

  • 如果模式以 ~/ 開頭,則 ~ 會被替換為環境變數 HOME 的內容。

  • 如果模式以 ./ 開頭,則會以包含目前組態檔的目錄取代。

  • 如果模式沒有以 ~/.// 開頭,則會自動在前面加上 **/。例如,模式 foo/bar 會變成 **/foo/bar,並且會匹配 /any/path/to/foo/bar

  • 如果模式以 / 結尾,則會自動加上 **。例如,模式 foo/ 會變成 foo/**。換句話說,它會匹配「foo」和內部的一切,遞迴地。

gitdir/i

這與 gitdir 相同,不同之處在於匹配是以不區分大小寫的方式完成的(例如,在不區分大小寫的檔案系統上)

onbranch

關鍵字 onbranch: 後面的資料會被視為一個帶有標準 globbing 萬用字元的模式,以及兩個額外的萬用字元 **//**,它們可以匹配多個路徑組成部分。如果我們在一個工作目錄中,而當前檢出的分支名稱與該模式匹配,則符合 include 條件。

如果模式以 / 結尾,則會自動添加 **。例如,模式 foo/ 會變成 foo/**。換句話說,它會匹配所有以 foo/ 開頭的分支。如果您的分支是階層式組織的,並且您希望將配置套用到該階層中的所有分支,這會很有用。

hasconfig:remote.*.url:

此關鍵字後面的資料會被視為一個帶有標準 globbing 萬用字元的模式,以及兩個額外的萬用字元 **//**,它們可以匹配多個組成部分。第一次看到此關鍵字時,將會掃描其餘的設定檔以尋找遠端 URL(不套用任何值)。如果存在至少一個與此模式匹配的遠端 URL,則符合 include 條件。

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

請注意,與其他 includeIf 條件不同,解析此條件依賴於在讀取條件時尚未知的資訊。一個典型的用例是此選項存在於系統級或全域級設定中,而遠端 URL 存在於本機級設定中;因此,需要預先掃描以解析此條件。為了避免潛在包含的檔案會影響這些檔案是否可能被包含的雞生蛋蛋生雞的問題,Git 會透過禁止這些檔案影響這些條件的解析來打破循環(因此,禁止它們宣告遠端 URL)。

至於此關鍵字的命名,它是為了與支援更多基於變數的 include 條件的命名方案向前相容,但目前 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

許多變數的值都被視為簡單的字串,但有些變數會採用特定類型的值,並且針對如何拼寫它們有相關規則。

boolean

當一個變數被說成採用布林值時,truefalse 可以接受許多同義詞;這些都是不區分大小寫的。

true

布林值 true 的文字包括 yesontrue1。此外,未定義 = <value> 的變數會被視為 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

變數

請注意,此列表並非詳盡無遺,也未必完整。對於特定於指令的變數,您可以在適當的手冊頁中找到更詳細的說明。

其他與 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 時顯示。

addIgnoredFile

當使用者嘗試將忽略的檔案新增到索引時顯示。

amWorkDir

git-am[1] 無法套用修補程式檔案時顯示,以告知使用者該檔案的位置。

ambiguousFetchRefspec

當多個遠端的提取參考規範對應到相同的遠端追蹤分支命名空間,並導致分支追蹤設定失敗時顯示。

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

當 hook 因為未設定為可執行而遭忽略時顯示。

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

當編輯 rebase todo 清單後發生錯誤時顯示。

refSyntax

當使用者提供不合法的參考名稱時顯示,以告知使用者參考語法文件。

resetNoRefresh

git-reset[1] 在重設後花費超過 2 秒來重新整理索引時顯示,以告知使用者他們可以使用 --no-refresh 選項。

resolveConflict

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

rmHints

git-rm[1] 的輸出失敗時顯示,以提供從目前狀態繼續操作的方向。

sequencerInUse

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

skippedCherryPicks

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

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

當使用者嘗試從無效的參考建立工作樹時顯示,以告知使用者如何改為建立新的未誕生分支。

alias.*

git[1] 命令包裝器的命令別名 - 例如,在定義 alias.last = 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 別名是包含多個命令(例如在管道中)、引用多個參數或無法處理末尾添加的位置參數的「單行」腳本,則應謹慎處理。例如:呼叫為 git cmd 1 2alias.cmd = "!echo $1 | grep $2" 將會執行為 *echo $1 | grep $2 1 2*,這不是您想要的。

    • 處理此問題的一個方便方法是在內嵌函數中撰寫腳本操作,然後使用命令列中的任何參數呼叫該函數。例如 `alias.cmd = "!c() { echo $1 | grep $2 ; }; c" 將正確執行先前的範例。

    • 設定 GIT_TRACE=1 可以協助您偵錯別名正在執行的命令。

am.keepcr

如果為 true,git-am 會以參數 --keep-cr 呼叫 git-mailsplit 來處理 mbox 格式的修補程式。在這種情況下,git-mailsplit 不會從以 \r\n 結尾的行中移除 \r。可以從命令列給定 --no-keep-cr 來覆寫。請參閱 git-am[1]git-mailsplit[1]

am.threeWay

預設情況下,如果修補程式無法乾淨地套用,git am 會失敗。當設定為 true 時,此設定會告知 git am 如果修補程式記錄其應套用的 blob 的身分,且我們本地有這些 blob 可用(等同於從命令列給定 --3way 選項),則退回到 3 向合併。預設為 false。請參閱 git-am[1]

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

參照儲存庫中的一個樹狀結構,從該結構讀取屬性,而不是從工作目錄中的 .gitattributes 檔案讀取。如果該值無法解析為有效的樹狀物件,則會改用空的樹狀結構。當使用 GIT_ATTR_SOURCE 環境變數或 --attr-source 命令列選項時,此組態變數無效。

注意
bitmapPseudoMerge.* 中的組態選項被視為「實驗性」功能,未來可能會變更或完全移除。有關偽合併點陣圖功能的詳細資訊,請參閱 gitpacking[7] 的「偽合併點陣圖」章節。
bitmapPseudoMerge.<名稱>.pattern

用於比對參考名稱的正規表示式。指向符合此模式的參考的提交(並符合以下標準,例如 bitmapPseudoMerge.<名稱>.sampleRatebitmapPseudoMerge.<名稱>.threshold)將會被考慮納入偽合併點陣圖。

提交會根據是否有任何指向特定提交的參考符合該模式(一個擴展的正規表示式)來分組到偽合併群組中。

在偽合併群組內,提交可能會根據模式中的捕獲群組進一步分組為子群組。這些子群組是透過將正規表示式中的任何捕獲群組串連起來,並在它們之間加上一個 _- _ 短破折號來形成的。

例如,如果模式是 refs/tags/,則所有標籤(如果符合以下標準)都會被視為同一個偽合併群組的候選。但是,如果模式是 refs/remotes/([0-9])+/tags/,則來自不同遠端的標籤會根據遠端編號分組到不同的偽合併群組中。

bitmapPseudoMerge.<名稱>.decay

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

將衰減率設定為 0 會導致所有群組的大小都相同。將衰減率設定為 1 會導致第 `n` 個群組的大小為初始群組大小的 `1/n`。衰減率的數值越高,連續群組的縮小速度越快。預設值為 1

如果所有群組的大小都相同,則包含較新提交的群組可能比早期群組的使用頻率低,因為指向較新提交的參考比指向舊提交的參考更可能經常更新。

bitmapPseudoMerge.<名稱>.sampleRate

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

bitmapPseudoMerge.<名稱>.threshold

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

bitmapPseudoMerge.<名稱>.maxMerges

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

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

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

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

bitmapPseudoMerge.<名稱>.stableThreshold

決定提交(如上所述,在參考提示中,但是即使穩定提交已被點陣圖覆蓋,仍然會被視為候選)成為穩定偽合併點陣圖候選的最小年齡。預設值為 1.month.ago

將此閾值設定為較小的值(例如,1.week.ago)會產生更多穩定的群組(這會產生一次性的產生費用),但這些群組可能會隨著時間的推移而過時。使用較大的值會產生相反的懲罰(較少的穩定群組,但更有用)。

bitmapPseudoMerge.<名稱>.stableSize

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

blame.blankBoundary

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

blame.coloring

這決定了要套用於 blame 輸出的顏色方案。它可以是 *repeatedLines*、*highlightRecent* 或 *none*,預設為 *none*。

blame.date

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

blame.showEmail

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

blame.showRoot

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 branch*、*git switch* 和 *git checkout* 設定新的分支,以便 git-pull[1] 可以適當地從起點分支合併。請注意,即使未設定此選項,也可以使用 --track--no-track 選項為每個分支選擇此行為。有效的設定如下:false — 不進行自動設定;true — 當起點是遠端追蹤分支時,會進行自動設定;always — 當起點是本機分支或遠端追蹤分支時,會進行自動設定;inherit — 如果起點具有追蹤組態,則會將其複製到新的分支;simple — 僅當起點是遠端追蹤分支且新分支的名稱與遠端分支相同時,才會進行自動設定。此選項預設為 true。

branch.autoSetupRebase

當使用 *git branch*、*git switch* 或 *git checkout* 建立追蹤另一個分支的新分支時,此變數會告訴 Git 設定 pull 以進行 rebase,而不是合併(請參閱「branch.<名稱>.rebase」)。當 never 時,永遠不會自動將 rebase 設定為 true。當 local 時,會將 rebase 設定為其他本機分支的追蹤分支為 true。當 remote 時,會將 rebase 設定為遠端追蹤分支的追蹤分支為 true。當 always 時,會將 rebase 設定為所有追蹤分支為 true。有關如何設定分支以追蹤另一個分支的詳細資訊,請參閱「branch.autoSetupMerge」。此選項預設為 never。

branch.sort

git-branch[1] 顯示分支時,此變數會控制分支的排序順序。如果未提供 "--sort=<值>" 選項,則會使用此變數的值作為預設值。如需有效值,請參閱 git-for-each-ref[1] 欄位名稱。

branch.<名稱>.remote

當在分支 <名稱> 上時,它會告訴 *git fetch* 和 *git push* 要從哪個遠端擷取或推送。推送到的遠端可能會被 remote.pushDefault 覆蓋(適用於所有分支)。當前分支推送到的遠端可能會進一步被 branch.<名稱>.pushRemote 覆蓋。如果未設定任何遠端,或者您不在任何分支上且儲存庫中定義了多個遠端,則擷取的預設值為 origin,推送的預設值為 remote.pushDefault。此外,. (句號)是當前的本機儲存庫(點儲存庫),請參閱下面 branch.<名稱>.merge 的最後一個注意事項。

branch.<名稱>.pushRemote

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

branch.<名稱>.merge

與 branch.<名稱>.remote 一起定義給定分支的上游分支。它會告訴 *git fetch*/*git pull*/*git rebase* 要合併哪個分支,並且還會影響 *git push*(請參閱 push.default)。當在分支 <名稱> 中時,它會告訴 *git fetch* 要在 FETCH_HEAD 中標記以進行合併的預設 refspec。該值的處理方式類似於 refspec 的遠端部分,並且必須符合從 "branch.<名稱>.remote" 給定的遠端擷取的 ref。合併資訊由 *git pull* 使用(它首先呼叫 *git fetch*)來查詢要合併的預設分支。如果沒有此選項,則 *git pull* 預設會合併擷取的第一個 refspec。指定多個值以取得章魚合併。如果您希望設定 *git pull*,以便它可以從本機儲存庫中的另一個分支合併到 <名稱> 中,您可以將 branch.<名稱>.merge 指向所需的分支,並對 branch.<名稱>.remote 使用相對路徑設定 . (句號)。

branch.<名稱>.mergeOptions

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

branch.<名稱>.rebase

當為 true 時,在執行 "git pull" 時,將分支 <名稱> 基於擷取的分支之上,而不是從預設遠端合併預設分支。有關以非分支特定的方式執行此操作,請參閱「pull.rebase」。

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

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

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

branch.<名稱>.description

分支描述,可以使用 git branch --edit-description 編輯。分支描述會自動加入 format-patch 封面信或 request-pull 摘要。

browser.<工具>.cmd

指定調用指定瀏覽器的命令。指定的命令會在 shell 中評估,並將 URL 作為參數傳遞。(請參閱 git-web--browse[1]。)

browser.<工具>.path

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

bundle.*

bundle.* 金鑰可能會出現在透過 git clone --bundle-uri 選項找到的套件清單檔案中。如果放置在儲存庫設定檔中,這些金鑰目前沒有任何作用,儘管未來會改變。詳情請參閱 套件 URI 設計文件

bundle.version

這個整數值會宣告套件清單使用的套件清單格式版本。目前,唯一接受的值是 1

bundle.mode

這個字串值應為 allany。此值描述是否需要所有宣告的套件才能完整了解套件化的資訊 (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 checkout <something>git switch <something> 將檢出另一個遠端的 <something> 分支時,git-switch[1]git-checkout[1] 使用此設定,而當 git worktree add 參考遠端分支時,git-worktree[1] 也會使用此設定。此設定未來可能會用於其他類似檢出的命令或功能。

checkout.guess

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

checkout.workers

更新工作樹時要使用的平行工作者數量。預設值為一,即循序執行。如果設定為小於一的值,Git 將使用與可用邏輯核心數量一樣多的工作者。此設定和 checkout.thresholdForParallelism 會影響所有執行檢出的命令。例如:檢出、複製、重設、稀疏檢出等。

注意:對於位於 SSD 或透過 NFS 的儲存庫,平行檢出通常可提供更好的效能。對於位於旋轉硬碟和/或核心數量較少的機器上的儲存庫,預設的循序檢出通常效能更好。儲存庫的大小和壓縮等級也可能會影響平行版本的效能。

checkout.thresholdForParallelism

當以少量的檔案執行平行檢出時,子程序產生和程序間通訊的成本可能會超過平行化的增益。此設定可讓您定義應嘗試平行檢出的最小檔案數。預設值為 100。

clean.requireForce

一個布林值,使 git-clean 拒絕刪除檔案,除非提供 -f。預設值為 true。

clone.defaultRemoteName

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

clone.rejectShallow

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

clone.filterSubmodules

如果提供了部分複製篩選器(請參閱 git-rev-list[1] 中的 --filter)且使用了 --recurse-submodules,也將篩選器套用至子模組。

color.advice

一個布林值,用於啟用/停用提示中的顏色(例如,當推送失敗時,請參閱 advice.* 以取得清單)。可以設定為 alwaysfalse(或 never)或 auto(或 true),在這種情況下,只有當錯誤輸出到終端機時才會使用顏色。如果未設定,則會使用 color.ui 的值(預設為 auto)。

color.advice.hint

為提示使用自訂顏色。

color.blame.highlightRecent

根據行的時間指定 git blame --color-by-age 的行註解顏色。

這個設定應該設定為以逗號分隔的顏色和日期設定清單,從顏色開始和結束,日期應從最舊到最新設定。如果行是在給定時間戳記之前引入的,則會使用指定的顏色為元資料著色,覆寫較舊的時間戳記顏色。

除了絕對時間戳記之外,相對時間戳記也可以使用,例如 2.weeks.ago 對於任何比 2 週前的時間都有效。

它的預設值為 blue,12 month ago,white,1 month ago,red,這會將一年以前的所有內容著色為藍色,一到一年之間的近期變更會保持白色,而最近一個月內引入的行會著色為紅色。

color.blame.repeatedLines

如果行註解與前一行來自相同的提交,則使用指定的顏色為 git blame --color-lines 的行註解著色。預設值為青色。

color.branch

一個布林值,用於啟用/停用 git-branch[1] 輸出的顏色。可以設定為 alwaysfalse(或 never)或 auto(或 true),在這種情況下,只有當輸出到終端機時才會使用顏色。如果未設定,則會使用 color.ui 的值(預設為 auto)。

color.branch.<slot>

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

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 (hunk 標頭)、func (hunk 標頭中的函式)、old (已移除的行)、new (新增的行)、commit (提交標頭)、whitespace (醒目提示空白錯誤)、oldMoved (已刪除的行)、newMoved (已新增的行)、oldMovedDimmedoldMovedAlternativeoldMovedAlternativeDimmednewMovedDimmednewMovedAlternative newMovedAlternativeDimmed (請參閱 git-diff[1]--color-moved<mode> 設定以了解詳細資訊)、contextDimmedoldDimmednewDimmedcontextBoldoldBoldnewBold (請參閱 git-range-diff[1] 以了解詳細資訊)。

color.decorate.<slot>

git log --decorate 輸出使用自訂顏色。<slot> 分別是本機分支、遠端追蹤分支、標籤、儲存和 HEAD 的 branchremoteBranchtagstashHEAD,以及已移植提交的 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 --interactive* 和 *git clean --interactive* 的輸出使用自訂顏色。<slot> 可以是 promptheaderhelperror,分別代表來自互動式命令的四種不同類型的正常輸出。

color.pager

一個布林值,指定 auto 顏色模式是否應將輸出傳送到分頁器時使用顏色。預設值為 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(顯示 *no branch* 警告的顏色,預設為紅色)、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

指定支援的命令是否應以欄輸出。此變數包含以空格或逗號分隔的符號清單

這些選項控制何時應啟用此功能(預設為 *never*)

always

永遠以欄顯示

never

永遠不以欄顯示

auto

如果輸出至終端,則以欄顯示

這些選項控制版面配置(預設為 *column*)。如果未指定 *always*、*never* 或 *auto*,則設定其中任何一項表示 *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] 以取得詳細資訊。當你總是希望在你的日誌訊息中保留以註解字元 # 開頭的行時,變更預設值可能會很有用,在這種情況下,你會執行 git config commit.cleanup whitespace (請注意,如果你這樣做,你必須自己移除提交日誌範本中以 # 開頭的說明行)。

commit.gpgSign

一個布林值,指定是否應使用 GPG 簽署所有提交。在執行例如 rebase 等操作時使用此選項可能會導致大量提交被簽署。使用代理程式可能很方便,可以避免多次輸入 GPG 密碼。

commit.status

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

commit.template

指定一個檔案的路徑名稱,作為新提交訊息的範本。

commit.verbose

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

commitGraph.generationVersion

指定在寫入或讀取提交圖形檔案時要使用的世代編號版本類型。如果指定版本 1,則不會寫入或讀取更正後的提交日期。預設值為 2。

commitGraph.maxNewFilters

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

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 使用,以在完成的指令列表中新增或移除指令。通常只會完成瓷器指令和少數其他選定的指令。您可以在此變數中加入更多指令,並以空格分隔。在指令前加上 - 將會從現有列表中移除該指令。

core.fileMode

告知 Git 是否要遵守工作目錄中檔案的可執行位元。

某些檔案系統會在檢出標記為可執行的檔案,或檢出可執行位元開啟的非可執行檔案時,遺失可執行位元。git-clone[1]git-init[1] 會偵測檔案系統是否正確處理可執行位元,並在必要時自動設定此變數。

但是,儲存庫可能位於可以正確處理檔案模式的檔案系統上,並且此變數在建立時設定為 true,但稍後可能會從另一個會遺失檔案模式的環境存取(例如,透過 CIFS 掛載匯出 ext4、使用適用於 Windows 或 Eclipse 的 Git 存取 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 分解。這在 Mac OS 與 Linux 或 Windows 之間共用儲存庫時很有用。(需要適用於 Windows 1.7.10 或更高版本的 Git,或 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])。

與基於掛勾的檔案系統監控器類似,內建的檔案系統監控器可以加速需要在具有許多檔案的工作目錄中重新整理 Git 索引的 Git 指令(例如 git status)。內建的監控器無需安裝和維護外部協力廠商工具。

內建的檔案系統監控器目前僅在有限的支援平台上提供。目前,這包括 Windows 和 MacOS。

Otherwise, this variable contains the pathname of the "fsmonitor"
hook command.

此掛勾指令用於識別自請求的日期/時間以來可能已變更的所有檔案。此資訊用於加速 Git,避免不必要地掃描未變更的檔案。

請參閱 githooks[5] 的 "fsmonitor-watchman" 章節。

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

core.fsmonitorHookVersion

設定叫用 "fsmonitor" 掛勾時要使用的協定版本。

目前有版本 1 和 2。如果未設定此選項,則會先嘗試版本 2,如果失敗,則會嘗試版本 1。版本 1 使用時間戳記作為輸入來判斷自該時間以來哪些檔案發生了變更,但是某些監控器(如 Watchman)在使用時間戳記時會出現競爭條件。版本 2 使用不透明的字串,以便監控器可以傳回可以用於判斷哪些檔案發生變更的資訊,而不會出現競爭條件。

core.trustctime

如果為 false,則會忽略索引和工作目錄之間的 ctime 差異;當 inode 變更時間經常由 Git 之外的項目修改時(檔案系統爬蟲和某些備份系統),這會很有用。請參閱 git-update-index[1]。預設為 True。

core.splitIndex

如果為 true,則會使用索引的分割索引功能。請參閱 git-update-index[1]。預設為 False。

core.untrackedCache

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

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 中「微」的八進位 \302\265)。如果此變數設定為 false,則不再認為高於 0x80 的位元組是「不常見」的。無論此變數的設定為何,雙引號、反斜線和控制字元都會始終逸出。簡單的空格字元不被認為是「不常見」的。許多指令可以使用 -z 選項完全逐字輸出路徑名稱。預設值為 true。

core.eol

設定工作目錄中,標記為文字檔案(透過設定 text 屬性,或是設定 text=auto 且 Git 自動偵測內容為文字)所使用的行尾符號類型。選項有 lfcrlfnative,其中 native 會使用平台原生的行尾符號。預設值為 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

如果 working-tree-encoding 屬性(請參閱 gitattributes[5])中使用,Git 會執行 UTF-8 來回檢查的編碼列表,以逗號和/或空白分隔。預設值為 SHIFT-JIS

如果為 false,符號連結會被檢出為包含連結文字的小型純文字檔案。git-update-index[1]git-add[1] 不會將記錄的類型變更為常規檔案。在不支援符號連結的檔案系統(如 FAT)上很有用。

預設值為 true,除非在建立儲存庫時,git-clone[1]git-init[1] 會探查並適當地將 core.symlinks 設定為 false。

core.gitProxy

當使用 Git 通訊協定擷取時,要執行的「Proxy 命令」(形式為 command host port),而不是建立與遠端伺服器的直接連線。如果變數值為 "COMMAND for DOMAIN" 格式,則該命令僅適用於以指定網域字串結尾的主機名稱。此變數可以設定多次,並按照給定的順序進行匹配;第一個匹配的項目獲勝。

可以被 GIT_PROXY_COMMAND 環境變數覆寫(它始終普遍適用,沒有特殊的 "for" 處理)。

特殊字串 none 可以用作 Proxy 命令,以指定給定的網域模式不使用任何 Proxy。這對於將防火牆內的伺服器排除在 Proxy 使用之外,同時對於外部網域預設為通用 Proxy 非常有用。

core.sshCommand

如果設定此變數,git fetchgit push 會在需要連線到遠端系統時使用指定的命令,而不是 ssh。該命令的形式與 GIT_SSH_COMMAND 環境變數相同,並且在設定環境變數時會被覆寫。

core.ignoreStat

如果為 true,Git 會避免使用 lstat() 呼叫來偵測檔案是否已變更,方法是為那些在索引和工作樹中都以相同方式更新的追蹤檔案設定「假設未變更」位元。

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

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

預設值為 False。

core.preferSymlinkRefs

對於 HEAD 和其他符號參考檔案,請使用符號連結,而不是預設的「symref」格式。有時需要這樣做才能使用預期 HEAD 為符號連結的舊腳本。

core.alternateRefsCommand

當從備用位置宣告可用的歷史提示時,請使用 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,則假定此儲存庫是的,並且沒有與其相關聯的工作目錄。如果這種情況發生,許多需要工作目錄的命令將被停用,例如 git-add[1]git-merge[1]

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

core.worktree

設定工作樹根目錄的路徑。如果設定了 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.logAllRefUpdates

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

此資訊可以用於確定「2 天前」分支的提示所指向的提交。

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

core.repositoryFormatVersion

識別儲存庫格式和佈局版本的內部變數。

core.sharedRepository

當為 group(或 true)時,該儲存庫可以在群組中的多個使用者之間共用(確保所有檔案和物件都可由群組寫入)。當為 all(或 worldeverybody)時,除了可由群組共用外,所有使用者都可以讀取該儲存庫。當為 umask(或 false)時,Git 將使用 umask(2) 回報的權限。當為 0xxx 時,其中 0xxx 是一個八進位數字,儲存庫中的檔案將具有此模式值。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,表示未打包物件的壓縮等級。-1 為 zlib 預設值。0 表示不壓縮,1 到 9 則為不同的速度/大小權衡,9 為最慢。如果未設定,則預設為 core.compression。如果 core.compression 也未設定,則預設為 1(最佳速度)。

core.packedGitWindowSize

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

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

支援常見的單位後綴 kmg

core.packedGitLimit

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

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

支援常見的單位後綴 kmg

core.deltaBaseCacheLimit

每個執行緒保留用於快取可能被多個差異化物件引用的基礎物件的最大位元組數。透過將整個解壓縮的基礎物件儲存在快取中,Git 能夠避免多次解壓縮和解壓縮頻繁使用的基礎物件。

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

支援常見的單位後綴 kmg

core.bigFileThreshold

被視為「大型」檔案的大小,如下所述,這會改變許多 git 命令的行為,以及這些檔案在儲存庫中的儲存方式。預設值為 512 MiB。支援常見的單位後綴 kmg

超過設定限制的檔案將會

  • 在封裝檔案中以壓縮方式儲存,而不嘗試差異壓縮。

    設定預設限制的主要考量是這個使用案例。有了它,大多數專案將對其原始程式碼和其他文字檔進行差異壓縮,但不會對較大的二進位媒體檔案進行差異壓縮。

    不進行差異壓縮儲存大型檔案可避免過多的記憶體使用,但會略微增加磁碟使用量。

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

  • 通常在寫入時會進行串流處理,這可以避免過多的記憶體使用,但會產生一些固定的開銷。使用此功能的命令包括 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 之外,Git 還會在該檔案中尋找屬性(請參閱 gitattributes[5])。路徑擴充的處理方式與 core.excludesFile 相同。其預設值為 $XDG_CONFIG_HOME/git/attributes。如果 $XDG_CONFIG_HOME 未設定或為空,則會改用 $HOME/.config/git/attributes

core.hooksPath

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

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

在您想要集中配置 Git hook,而不是在每個儲存庫基礎上配置它們,或者作為更靈活和集中的替代方案,以使用您已變更預設 hook 的 init.templateDir 時,此組態變數很有用。

core.editor

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

core.commentChar
core.commentString

諸如 committag 之類的命令,允許您編輯訊息,會將以此字元開頭的行視為註解,並在編輯器傳回後將其刪除(預設值為 #)。

如果設定為 "auto",git-commit 將會選擇一個字元,該字元不是現有提交訊息中任何行的起始字元。

請注意,這兩個變數是彼此的別名,在現代版本的 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(即,重試 100 毫秒)。

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 縮排的行視為錯誤(預設未啟用)。

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

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

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

  • cr-at-eol 將行尾的回車符視為行終止符的一部分,也就是說,如果此類回車符之前的字元不是空白,則使用它時,trailing-space 不會觸發(預設未啟用)。

  • tabwidth=<n> 指定一個 Tab 字元佔據多少個字元位置;這與 indent-with-non-tab 選項以及當 Git 修正 tab-in-indent 錯誤時有關。預設的 Tab 寬度為 8。允許的值為 1 到 63。

core.fsync

一個以逗號分隔的清單,列出當建立或修改儲存庫時,應該透過 core.fsyncMethod 強化的儲存庫元件。您可以使用 - 作為前綴來停用任何元件的強化。如果系統發生不乾淨的關機,未強化的項目可能會遺失。除非您有特殊需求,否則建議您將此選項留空,或選擇 committedaddedall 其中一個。

當遇到此設定時,元件集合會從平台預設值開始,移除已停用的元件,並新增其他元件。none 會重設狀態,因此平台預設值會被忽略。

空字串會將 fsync 設定重設為平台預設值。大多數平台上的預設值相當於 core.fsync=committed,-loose-object,具有良好的效能,但如果發生不乾淨的系統關機,可能會遺失最近的工作。

  • none 會清除已 fsync 的元件集合。

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

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

  • pack-metadata 會強化封裝檔案的位元圖和索引。

  • 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 和相關基本函式來強化儲存庫資料。

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

  • writeout-only 發出頁面快取寫回請求,但依賴於檔案系統和儲存硬體,新增至儲存庫的資料在系統崩潰時可能無法持久保存。這是 macOS 上的預設模式。

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

    目前 batch 模式僅適用於鬆散物件檔案。其他儲存庫資料會像指定 fsync 一樣持久保存。對於儲存在 HFS+ 或 APFS 檔案系統上的 macOS 儲存庫,以及儲存在 NTFS 或 ReFS 檔案系統上的 Windows 儲存庫,此模式預計與 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,以說明 Windows 版 Git 堅持使用其自己的 Perl 直譯器。

core.restrictinheritedhandles

僅限 Windows:覆寫衍生的處理序是否只繼承標準檔案控制代碼 (stdinstdoutstderr) 或所有控制代碼。可以是 autotruefalse。預設值為 auto,表示在 Windows 7 和更新版本上為 true,在較舊的 Windows 版本上為 false

core.createObject

您可以將此設定為 link,在這種情況下,會使用硬連結,然後刪除來源,以確保物件建立不會覆寫現有物件。

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

core.notesRef

在顯示提交訊息時,也會顯示儲存在指定參考中的註解。該參考必須是完整限定的。如果指定的參考不存在,這不是錯誤,而是表示不應列印任何註解。

此設定預設為 "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

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

core.sparseCheckout

啟用「稀疏簽出」功能。有關更多資訊,請參閱 git-sparse-checkout[1]

core.sparseCheckoutCone

啟用稀疏簽出功能的「錐形模式」。當稀疏簽出檔案包含一組有限的模式時,此模式可提供顯著的效能優勢。可以要求「非錐形模式」透過將此變數設定為 false 來允許指定更彈性的模式。有關更多資訊,請參閱 git-sparse-checkout[1]

core.abbrev

設定物件名稱縮寫到的長度。如果未指定或設定為「auto」,則會根據儲存庫中封裝物件的大概數量計算出適當的值,希望足以讓縮寫的物件名稱在一段時間內保持唯一性。如果設定為「no」,則不會進行任何縮寫,並以完整長度顯示物件名稱。最小長度為 4。

core.maxTreeDepth

Git 在走訪樹狀結構時願意遞迴的最大深度(例如,「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 的「路徑」元件是否重要。預設值為 false。有關更多資訊,請參閱 gitcredentials[7]

credential.username

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

credential.<url>.*

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

credentialCache.ignoreSIGHUP

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

credentialStore.lockTimeoutMS

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

diff.autoRefreshIndex

當使用 git diff 與工作樹檔案進行比較時,請勿將僅限 stat 的變更視為已變更。而是靜默執行 git update-index --refresh,以更新工作樹中內容與索引中內容相符的路徑的快取 stat 資訊。此選項預設為 true。請注意,這僅影響 git diff Porcelain,而不影響較低層級的 diff 命令,例如 git diff-files

diff.dirstat

一個以逗號分隔的 --dirstat 參數清單,指定 git-diff[1] 及其相關工具的 --dirstat 選項的預設行為。預設值可以在命令列上被覆寫(使用 --dirstat=<param1,param2,...>)。後備預設值(當 diff.dirstat 未變更時)為 changes,noncumulative,3。以下參數可用

changes

計算 dirstat 數字的方式是計算從來源移除或新增至目的地的行數。此方法會忽略檔案內純粹的程式碼移動量。換句話說,重新排列檔案中的行數不會像其他變更一樣被計數。這是未給定參數時的預設行為。

lines

通過執行常規的基於行的差異分析,並將已移除/新增的行數相加來計算 dirstat 數字。(對於二進制檔案,則改為計算 64 位元組的區塊,因為二進制檔案沒有行的自然概念)。相較於 changes 行為,這是一種成本更高的 --dirstat 行為,但它會將檔案內重新排列的行數視為與其他變更一樣重要。產生的輸出與您從其他 --*stat 選項獲得的輸出一致。

files

通過計算已變更的檔案數量來計算 dirstat 數字。在 dirstat 分析中,每個變更的檔案都以相同的權重計算。這是計算成本最低的 --dirstat 行為,因為它根本不需要查看檔案內容。

cumulative

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

<limit>

整數參數指定一個截止百分比(預設為 3%)。對變更貢獻小於此百分比的目錄不會顯示在輸出中。

範例:以下範例將計算變更的檔案,同時忽略變更檔案總量低於 10% 的目錄,並將子目錄的計數累加到父目錄:files,10,cumulative

diff.statNameWidth

限制 --stat 輸出中檔案名稱部分的寬度。如果設定,則適用於所有產生 --stat 輸出的命令,除了 format-patch。

diff.statGraphWidth

限制 --stat 輸出中圖形部分的寬度。如果設定,則適用於所有產生 --stat 輸出的命令,除了 format-patch。

diff.context

產生具有 <n> 行上下文的差異,而不是預設的 3 行。此值會被 -U 選項覆寫。

diff.interHunkContext

顯示差異區塊之間的上下文,最多顯示指定的行數,從而合併彼此接近的區塊。此值作為 --inter-hunk-context 命令列選項的預設值。

diff.external

如果設定此設定變數,則不會使用內部差異機制執行差異產生,而是使用給定的命令。可以使用 'GIT_EXTERNAL_DIFF' 環境變數覆寫。該命令的呼叫參數如 git[1] 中「git Diffs」所述。請注意:如果您只想在檔案的子集上使用外部差異程式,則可能需要改用 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 會停用 git commitgit status 通常會顯示的子模組摘要(當設定了 status.submoduleSummary 時),除非使用 --ignore-submodules 命令列選項覆寫。git submodule 命令不受此設定的影響。預設情況下,此設定為 untracked,以便忽略任何未追蹤的子模組。

diff.mnemonicPrefix

如果設定,git diff 會根據比較的內容使用與標準 "a/" 和 "b/" 不同的前綴對。當此配置生效時,反向差異輸出也會交換前綴的順序

git diff

比較(i)索引和(w)工作樹;

git diff HEAD

比較(c)提交和(w)工作樹;

git diff --cached

比較(c)提交和(i)索引;

git diff HEAD:file1 file2

比較(o)物件和(w)工作樹實體;

git diff --no-index a b

比較兩個非 git 物件(1)和(2)。

diff.noPrefix

如果設定,git diff 不會顯示任何來源或目的地前綴。

diff.srcPrefix

如果設定,git diff 會使用此來源前綴。預設為 "a/"。

diff.dstPrefix

如果設定,git diff 會使用此目的地前綴。預設為 "b/"。

diff.relative

如果設定為 truegit diff 不會顯示目錄外的變更,並顯示相對於目前目錄的路徑名稱。

diff.orderFile

指示如何對差異中的檔案排序的檔案。請參閱 git-diff[1]-O 選項以瞭解詳細資訊。如果 diff.orderFile 是相對路徑名稱,則會將其視為相對於工作樹的頂層。

diff.renameLimit

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

diff.renames

Git 是否以及如何偵測重新命名。如果設定為 "false",則會停用重新命名偵測。如果設定為 "true",則會啟用基本重新命名偵測。如果設定為 "copies" 或 "copy",Git 也會偵測複製。預設值為 true。請注意,這只會影響 git diff Porcelain,例如 git-diff[1]git-log[1],而不會影響較低層級的命令,例如 git-diff-files[1]

diff.suppressBlankEmpty

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

diff.submodule

指定如何顯示子模組差異的格式。"short" 格式僅顯示範圍開始和結束時的提交名稱。"log" 格式會像 git-submodule[1] summary 一樣列出範圍內的提交。"diff" 格式會顯示子模組已變更內容的內嵌差異。預設值為 "short"。

diff.wordRegex

一個 POSIX 擴展正規表示式,用於判斷在執行逐字差異計算時何為「字詞」。符合正規表示式的字元序列是「字詞」,所有其他字元都是**可忽略**的空白字元。

diff.<driver>.command

自訂差異驅動程式命令。請參閱 gitattributes[5] 以瞭解詳細資訊。

diff.<driver>.trustExitCode

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

diff.<driver>.xfuncname

差異驅動程式應使用以辨識區塊標頭的正規表示式。也可以使用內建模式。請參閱 gitattributes[5] 以瞭解詳細資訊。

diff.<driver>.binary

將此選項設定為 true,以使差異驅動程式將檔案視為二進制檔案。請參閱 gitattributes[5] 以瞭解詳細資訊。

diff.<driver>.textconv

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

diff.<driver>.wordRegex

差異驅動程式應使用以分割行中字詞的正規表示式。請參閱 gitattributes[5] 以瞭解詳細資訊。

diff.<driver>.cachetextconv

將此選項設定為 true,以使差異驅動程式快取文字轉換輸出。請參閱 gitattributes[5] 以瞭解詳細資訊。

  • araxis

  • bc

  • codecompare

  • deltawalker

  • diffmerge

  • diffuse

  • ecmerge

  • emerge

  • examdiff

  • guiffy

  • gvimdiff

  • kdiff3

  • kompare

  • meld

  • nvimdiff

  • opendiff

  • p4merge

  • smerge

  • tkdiff

  • vimdiff

  • vscode

  • winmerge

  • xxdiff

diff.indentHeuristic

將此選項設定為 false 以停用預設的啟發式方法,該方法會移動差異區塊邊界以使修補程式更易於閱讀。

diff.algorithm

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

defaultmyers

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

minimal

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

patience

在產生修補程式時使用「patience diff」演算法。

histogram

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

diff.wsErrorHighlight

在差異的 contextoldnew 行中突出顯示空格錯誤。多個值以逗號分隔,none 會重設先前的值,default 會將清單重設為 new,而 allold,new,context 的簡寫。空格錯誤會使用 color.diff.whitespace 著色。命令列選項 --ws-error-highlight=<kind> 會覆寫此設定。

diff.colorMoved

如果設定為有效的 <mode> 或 true 值,則差異中的移動行會以不同的顏色著色,有關有效模式的詳細資訊,請參閱 git-diff[1] 中的 --color-moved。如果僅設定為 true,則會使用預設顏色模式。如果設定為 false,則移動的行不會著色。

diff.colorMovedWS

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

diff.tool

控制 git-difftool[1] 使用的差異工具。此變數會覆寫 merge.tool 中設定的值。以下列表顯示了有效的內建值。任何其他值都會被視為自訂差異工具,並且需要定義對應的 difftool.<tool>.cmd 變數。

diff.guitool

當指定 -g/--gui 標誌時,控制 git-difftool[1] 使用的差異工具。此變數會覆寫 merge.guitool 中設定的值。以下列表顯示了有效的內建值。任何其他值都會被視為自訂差異工具,並且需要定義對應的 difftool.<guitool>.cmd 變數。

difftool.<tool>.cmd

指定調用指定的差異工具的命令。指定的命令會在 shell 中進行評估,並提供以下變數:LOCAL 設定為包含差異前映像內容的臨時檔名稱,而 REMOTE 設定為包含差異後映像內容的臨時檔名稱。

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

difftool.<tool>.path

覆寫給定工具的路徑。當您的工具不在 PATH 中時,這會很有用。

difftool.trustExitCode

如果調用的差異工具傳回非零的退出狀態,則退出 difftool。

有關更多詳細資訊,請參閱 git-difftool[1] 中的 --trust-exit-code 選項。

difftool.prompt

在每次調用差異工具之前提示。

difftool.guiDefault

設定為 true 以預設使用 diff.guitool(相當於指定 --gui 引數),或設定為 auto 以根據 DISPLAY 環境變數值的存在來選擇 diff.guitooldiff.tool。預設值為 false,其中必須明確提供 --gui 引數才能使用 diff.guitool

extensions.objectFormat

指定要使用的雜湊演算法。可接受的值為 sha1sha256。如果未指定,則假設為 sha1。除非 core.repositoryFormatVersion 為 1,否則指定此金鑰會產生錯誤。

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

extensions.compatObjectFormat

指定要使用的相容雜湊演算法。可接受的值為 sha1sha256。指定的值必須與 extensions.objectFormat 的值不同。這允許 Git 儲存庫之間的客戶端級互通性,這些儲存庫的 objectFormat 與此 compatObjectFormat 相符。特別是,當完全實作時,從其 objectFormat 與 compatObjectFormat 相符的儲存庫推送和提取。以及能夠使用以 compatObjectFormat 編碼的 oids 以及以 objectFormat 編碼的 oids 來在本機指定物件。

extensions.refStorage

指定要使用的 ref 儲存格式。可接受的值為

  • files,用於具有 packed-refs 的鬆散檔案。這是預設值。

  • reftable,用於 reftable 格式。此格式是實驗性的,其內部結構可能會變更。

除非 core.repositoryFormatVersion 為 1,否則指定此金鑰會產生錯誤。

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

extensions.worktreeConfig

如果啟用,則工作樹將從 $GIT_DIR/config.worktree 檔案以及 $GIT_COMMON_DIR/config 檔案載入設定。請注意,對於主要工作樹,$GIT_COMMON_DIR$GIT_DIR 相同,而其他工作樹的 $GIT_DIR 等於 $GIT_COMMON_DIR/worktrees/<id>/config.worktree 檔案中的設定將覆寫任何其他設定檔中的設定。

當啟用 extensions.worktreeConfig 時,如果存在,您必須小心地將某些值從通用設定檔移至主要工作樹的 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

    根據您對每個工作樹可自訂稀疏檢出設定的需求,調整 core.sparseCheckoutcore.sparseCheckoutCone 的位置也可能有所幫助。預設情況下,git sparse-checkout 內建功能會啟用 extensions.worktreeConfig,為每個工作樹指定這些設定值,並使用 $GIT_DIR/info/sparse-checkout 檔案來獨立指定每個工作樹的稀疏性。有關更多詳細資訊,請參閱 git-sparse-checkout[1]

    由於歷史原因,無論 core.repositoryFormatVersion 設定為何,都會遵循 extensions.worktreeConfig

fastimport.unpackLimit

如果 git-fast-import[1] 匯入的物件數量低於此限制,則物件將解壓縮為鬆散的物件檔案。但是,如果匯入的物件數量等於或超過此限制,則該包將儲存為一個包。從快速匯入中儲存該包可以使匯入操作更快完成,尤其是在緩慢的檔案系統上。如果未設定,則會改為使用 transfer.unpackLimit 的值。

feature.*

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

feature.experimental

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

  • fetch.negotiationAlgorithm=skipping 可以透過一次跳過更多提交,減少往返次數,來改善提取協商時間。

  • pack.useBitmapBoundaryTraversal=true 可以透過減少走訪的物件數量來改善點陣圖走訪時間。

  • pack.allowPackReuse=multi 可以透過重複使用來自多個包的物件,而不是僅重複使用一個包,來改善建立包所需的時間。

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 原生傳輸提取的物件數量低於此限制,則物件將解壓縮為鬆散的物件檔案。但是,如果接收的物件數量等於或超過此限制,則在新增任何遺失的增量基準後,接收的包將儲存為一個包。從推送中儲存包可以使推送操作更快完成,尤其是在緩慢的檔案系統上。如果未設定,則會改為使用 transfer.unpackLimit 的值。

fetch.prune

如果為 true,則 fetch 會自動表現得好像在命令列上給定 --prune 選項一樣。另請參閱 remote.<name>.prunegit-fetch[1] 的 PRUNING 章節。

fetch.pruneTags

如果為 true,則 fetch 會自動表現得好像在修剪時提供了 refs/tags/*:refs/tags/* refspec (如果尚未設定)。這允許設定此選項和 fetch.prune 以維持與上游參考的 1=1 對應。另請參閱 remote.<name>.pruneTagsgit-fetch[1] 的 PRUNING 章節。

fetch.all

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

fetch.output

控制 ref 更新狀態的列印方式。有效值為 fullcompact。預設值為 full。有關詳細資訊,請參閱 git-fetch[1] 中的 OUTPUT 章節。

fetch.negotiationAlgorithm

控制在與伺服器協商要傳送的封包檔案內容時,如何傳送關於本機儲存庫中提交的資訊。設定為 "consecutive" 以使用一個演算法,該演算法會逐一檢查連續的提交。設定為 "skipping" 以使用一個演算法,該演算法會跳過提交以加速收斂,但可能會導致封包檔案大於所需;或設定為 "noop" 以完全不傳送任何資訊,這幾乎肯定會導致封包檔案大於所需,但會跳過協商步驟。設定為 "default" 以覆寫先前所做的設定並使用預設行為。預設值通常為 "consecutive",但如果 feature.experimental 為 true,則預設值為 "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 命令之後寫入提交圖。使用 --split 選項,大多數執行將在現有的提交圖檔案之上建立一個非常小的提交圖檔案。有時,這些檔案會合併,並且寫入可能需要更長的時間。擁有更新的提交圖檔案有助於許多 Git 命令的效能,包括 git merge-basegit push -fgit log --graph。預設值為 false。

fetch.bundleURI

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

如果您修改此值,並且您的儲存庫具有 fetch.bundleCreationToken 值,請在從新的套件 URI 提取之前刪除該 fetch.bundleCreationToken 值。

fetch.bundleCreationToken

當使用 fetch.bundleURI 從使用 "creationToken" 啟發式的套件清單進行增量提取時,此組態值會儲存已下載套件的最大 creationToken 值。如果廣告的 creationToken 不嚴格大於此值,則此值用於防止將來下載套件。

建立權杖值由提供特定套件 URI 的提供者選擇。如果您修改 fetch.bundleURI 上的 URI,請務必在提取之前刪除 fetch.bundleCreationToken 值的值。

filter.<driver>.clean

用於在簽入時將工作樹檔案的內容轉換為 blob 的命令。有關詳細資訊,請參閱 gitattributes[5]

filter.<driver>.smudge

用於在簽出時將 blob 物件的內容轉換為工作樹檔案的命令。有關詳細資訊,請參閱 gitattributes[5]

format.attach

啟用 multipart/mixed 附件作為 format-patch 的預設值。該值也可以是雙引號字串,這將啟用附件作為預設值,並將該值設定為邊界。請參閱 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 用於確定封面信的哪些部分將使用分支描述填寫的預設模式。請參閱 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 命令的預設漂亮格式。請參閱 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.outputDirectory

設定一個自訂目錄以儲存結果檔案,而不是目前的工作目錄。將建立所有目錄元件。

format.filenameMaxLength

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

format.useAutoBase

一個布林值,可讓您預設啟用 format-patch 的 --base=auto 選項。也可以設定為 "whenAble",以允許在有適當的基本可用時啟用 --base=auto,但在其他情況下跳過新增基本資訊,而不會導致格式失效。

format.notes

提供 format-patch 的 --notes 選項的預設值。接受布林值或指定從何處取得註解的 ref。如果為 false,則 format-patch 預設為 --no-notes。如果為 true,則 format-patch 預設為 --notes。如果設定為非布林值,則 format-patch 預設為 --notes=<ref>,其中 ref 是非布林值。預設值為 false。

如果想要使用 ref refs/notes/true,請改用該文字。

可以多次指定此設定,以便包含多個註解 ref。在這種情況下,它的行為將與傳入的多個 --[no-]notes[=] 選項類似。也就是說,值為 true 將顯示預設註解,值為 <ref> 也將顯示來自該註解 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>,或者要複製或提取它,請設定 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 發出警告。

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

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 版之後,改用雜湊實作,因此現在沒有理由預先排序清單。

fsmonitor.allowRemote

依預設,fsmonitor 常駐程式拒絕使用網路掛載的儲存庫。將 fsmonitor.allowRemote 設定為 true 會覆寫此行為。僅在 core.fsmonitor 設定為 true 時才會生效。

fsmonitor.socketDir

這個 macOS 特定的選項 (如果已設定) 會指定建立用於 fsmonitor 常駐程式與各種 Git 命令之間通訊的 Unix 網域 socket 的目錄。該目錄必須位於原生的 macOS 檔案系統上。僅在 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 時,會保留所有大於此限制的非雜亂套件。這與 --keep-largest-pack 非常相似,只不過是保留所有符合臨界值的非雜亂套件,而不僅僅是最大的套件。預設值為零。支援常見的單位後綴 kmg

請注意,如果保留的套件數量超過 gc.autoPackLimit,則會忽略此組態變數,除了基本套件以外的所有套件都會重新打包。此後,套件數量應低於 gc.autoPackLimit,並且應再次遵循 gc.bigPackThreshold。

如果估計 git repack 平穩運行所需的記憶體量不可用,並且未設定 gc.bigPackThreshold,則也會排除最大的套件(這相當於使用 --keep-largest-pack 執行 git gc)。

gc.writeCommitGraph

如果為 true,則當執行 git-gc[1] 時,gc 會重寫 commit-graph 檔案。當使用 git gc --auto 時,如果需要 housekeeping,則會更新 commit-graph。預設值為 true。有關詳細資訊,請參閱 git-commit-graph[1]

gc.logExpiry

如果檔案 gc.log 存在,則 git gc --auto 會列印其內容並以狀態零結束,除非該檔案的時效超過 gc.logExpiry。預設值為 "1.day"。有關更多指定其值的方式,請參閱 gc.pruneExpire

gc.packRefs

在儲存庫中執行 git pack-refs 會導致 1.5.1.2 之前的 Git 版本無法透過 HTTP 等簡易傳輸方式複製。此變數決定 git gc 是否執行 git pack-refs。可以將其設定為 notbare 以在所有非裸儲存庫中啟用它,或者可以將其設定為布林值。預設值為 true

gc.cruftPacks

將無法連線到的物件儲存在雜亂套件中(請參閱 git-repack[1]),而不是作為鬆散物件。預設值為 true

gc.maxCruftSize

重新打包時限制新雜亂套件的大小。當除了 --max-cruft-size 之外還指定時,命令列選項優先。請參閱 git-repack[1]--max-cruft-size 選項。

gc.pruneExpire

當執行 git gc 時,它將呼叫 prune --expire 2.weeks.ago(如果使用 gc.cruftPacks--cruft 使用雜亂套件,則呼叫 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> 的 ref。

gc.reflogExpireUnreachable
gc.<pattern>.reflogExpireUnreachable

git reflog expire 會移除早於此時間且無法從目前提示連線到的 reflog 項目;預設值為 30 天。值 "now" 會立即過期所有項目,而 "never" 會完全禁止過期。中間使用 "<pattern>"(例如 "refs/stash"),該設定僅適用於符合 <pattern> 的 ref。

這些類型的項目通常是使用 git commit --amendgit rebase 的結果而建立的,並且是在發生修改或重新設定基底之前的提交。由於這些變更不屬於目前的專案,因此大多數使用者都希望盡快使其過期,這就是預設值比 gc.reflogExpire 更積極的原因。

gc.recentObjectsHook

當考慮是否要移除物件時(無論是在產生雜亂套件還是將無法連線到的物件儲存為鬆散物件時),請使用 shell 執行指定的命令。將其輸出解釋為 Git 會視為「最近」的物件 ID,無論其存在時間長短。透過將其 mtime 視為「現在」,無論其真實存在時間長短,輸出中提及的任何物件(及其子代)都將被保留。

輸出必須每行僅包含一個十六進位物件 ID,不得包含其他內容。儲存庫中找不到的物件會被忽略。支援多個 Hook,但所有 Hook 都必須成功結束,否則操作(產生雜亂套件或解壓縮無法連線到的物件)將會停止。

gc.repackFilter

重新打包時,請使用指定的篩選器將某些物件移到單獨的套件檔案中。請參閱 git-repack[1]--filter=<filter-spec> 選項。

gc.repackFilterTo

當重新打包和使用篩選器時,請參閱 gc.repackFilter,指定的路徑將被用來建立包含已篩選掉物件的 packfile。警告:指定的路徑應該是可存取的,例如使用 Git alternates 機制,否則儲存庫可能會被 Git 視為損毀,因為它可能無法存取該 packfile 中的物件。請參閱 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 簽章時,使用此自訂程式而不是在 $PATH 上找到的 "gpg"。該程式必須支援與 GPG 相同的命令列介面,也就是說,要驗證分離式簽章,會執行 "gpg --verify $signature - <$file",並且預期程式會以代碼 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 公鑰的檔案。該檔案包含一行或多行主體,後跟一個 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 金鑰的自動化程式產生。

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

自 OpensSSH 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 grep 於 git 儲存庫外部執行時,會回退到 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] 在執行擷取時應修剪遠端追蹤分支,則為「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 叫用「顯示歷史上下文」選單項目時,在 gitk[1] 中為選定提交顯示的歷史上下文半徑(以天為單位)。如果此變數設定為零,則會顯示整個歷史記錄。

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 子對話方塊中僅顯示未合併的分支。這對於類似於合併或變基的工具很有用,但不適用於 checkout 或 reset 之類的操作。

guitool.<name>.title

指定用於提示對話方塊的標題。預設值為工具名稱。

guitool.<name>.prompt

指定要在對話方塊頂部顯示的通用提示字串,在 argPromptrevPrompt 的子區段之前。預設值包含實際的命令。

help.browser

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

help.format

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

help.autoCorrect

如果 git 偵測到拼寫錯誤,並且可以識別出與錯誤類似的確切有效命令,則 git 會嘗試建議正確的命令,甚至自動執行建議。可能的配置值為

  • 0(預設值):顯示建議的命令。

  • 正數:在指定的分秒(0.1 秒)後執行建議的命令。

  • 「immediate」:立即執行建議的命令。

  • 「prompt」:顯示建議並提示確認以執行命令。

  • 「never」:不要執行或顯示任何建議的命令。

help.htmlPath

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

http.proxy

覆寫 HTTP Proxy,通常使用 http_proxyhttps_proxyall_proxy 環境變數進行配置(請參閱 curl(1))。除了 curl 所理解的語法之外,還可以指定一個具有使用者名稱但沒有密碼的 proxy 字串,在這種情況下,git 會嘗試以與其他憑證相同的方式獲取一個。有關更多資訊,請參閱 gitcredentials[7]。因此,語法為 [protocol://][user[:password]@]proxyhost[:port][/path]。這可以在每個遠端基礎上覆寫;請參閱 remote.<name>.proxy

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

http.proxyAuthMethod

設定用於驗證 HTTP Proxy 的方法。僅當配置的 proxy 字串包含使用者名稱部分(即,形式為 user@hostuser@host:port)時,此設定才會生效。這可以在每個遠端基礎上覆寫;請參閱 remote.<name>.proxyAuthMethod。兩者都可以由 GIT_HTTP_PROXY_AUTHMETHOD 環境變數覆寫。可能的值為

  • anyauth - 自動選擇合適的驗證方法。假設 proxy 以 407 狀態碼和一個或多個具有支援的驗證方法的 Proxy-authenticate 標頭回應未驗證的請求。這是預設值。

  • basic - HTTP 基本驗證

  • digest - HTTP 摘要驗證;這可防止密碼以明文傳輸到 proxy

  • negotiate - GSS-Negotiate 驗證(比較 curl(1) 的 --negotiate 選項)

  • ntlm - NTLM 驗證(比較 curl(1) 的 --ntlm 選項)

http.proxySSLCert

儲存用於驗證 HTTPS Proxy 的用戶端憑證的檔案路徑名稱。可以由 GIT_PROXY_SSL_CERT 環境變數覆寫。

http.proxySSLKey

儲存用於驗證 HTTPS Proxy 的私鑰的檔案路徑名稱。可以由 GIT_PROXY_SSL_KEY 環境變數覆寫。

http.proxySSLCertPasswordProtected

啟用 Git 的 proxy SSL 憑證密碼提示。否則,如果憑證或私鑰已加密,OpenSSL 會提示使用者,可能多次。可以由 GIT_PROXY_SSL_CERT_PASSWORD_PROTECTED 環境變數覆寫。

http.proxySSLCAInfo

包含憑證套件的檔案路徑名稱,該套件應用於在使用 HTTPS Proxy 時驗證 proxy。可以由 GIT_PROXY_SSL_CAINFO 環境變數覆寫。

http.emptyAuth

嘗試驗證而不尋找使用者名稱或密碼。這可以用於嘗試 GSS-Negotiate 驗證,而無需在 URL 中指定使用者名稱,因為 libcurl 通常需要使用者名稱才能進行驗證。

http.proactiveAuth

嘗試進行身份驗證,而無需先進行未經驗證的嘗試並接收 401 回應。這可以用於確保所有請求都經過身份驗證。如果 http.emptyAuth 設定為 true,則此值無效。

如果使用的憑證輔助程式指定了身份驗證方案(即透過 authtype 欄位),則將使用該值;如果在沒有方案的情況下提供了使用者名稱和密碼,則將使用基本身份驗證。選項的值決定了從輔助程式請求的方案。可能的值為

  • basic - 從輔助程式請求基本身份驗證。

  • auto - 允許輔助程式選擇適當的方案。

  • none - 停用主動身份驗證。

請注意,此設定應始終搭配 TLS 使用,否則如果選擇基本身份驗證,很容易意外洩露純文字憑證。

http.delegation

控制 GSSAPI 憑證委派。在 libcurl 7.21.7 版中,預設會停用委派。設定此參數以告知伺服器在使用者憑證方面允許委派哪些內容。與 GSS/kerberos 一起使用。可能的值為

  • none - 不允許任何委派。

  • policy - 僅當 Kerberos 服務票證中設定了 OK-AS-DELEGATE 標誌時才委派,這與領域政策有關。

  • 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

主機名稱解析資訊,libcurl 在傳送 HTTP 請求時會先使用此資訊。此資訊應採用以下格式之一

  • [+]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

啟用 Git 的 SSL 憑證密碼提示。否則,如果憑證或私密金鑰已加密,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.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 會話數(跨插槽計數)。它們不會隨著 curl_easy_cleanup() 結束,直到呼叫 http_cleanup() 為止。如果未定義 USE_CURL_MULTI,則此值將上限為 1。預設為 1。

http.postBuffer

智慧型 HTTP 傳輸將資料 POST 到遠端系統時所用緩衝區的最大大小(以位元組為單位)。對於大於此緩衝區大小的請求,會使用 HTTP/1.1 和 Transfer-Encoding: chunked,以避免在本機建立大型封裝檔案。預設值為 1 MiB,這對於大多數請求來說已足夠。

請注意,提高此限制僅對停用分塊傳輸編碼有效,因此僅應在遠端伺服器或 Proxy 僅支援 HTTP/1.0 或不符合 HTTP 標準時使用。一般來說,提高此值並不是解決大多數推送問題的有效方法,但可能會顯著增加記憶體消耗,因為即使對於小型推送也會配置整個緩衝區。

http.lowSpeedLimit, http.lowSpeedTime

如果 HTTP 傳輸速度(以每秒位元組為單位)低於 http.lowSpeedLimit 的時間超過 http.lowSpeedTime 秒,則會中止傳輸。可由 GIT_HTTP_LOW_SPEED_LIMITGIT_HTTP_LOW_SPEED_TIME 環境變數覆寫。

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. 協定(例如,httpshttps://example.com/ 中)。此欄位必須在設定金鑰和 URL 之間完全匹配。

  2. 主機/網域名稱(例如,example.comhttps://example.com/ 中)。此欄位必須在設定金鑰和 URL 之間匹配。可以指定 * 作為主機名稱的一部分,以匹配此層級的所有子網域。例如,https://*.example.com/ 將匹配 https://foo.example.com/,但不匹配 https://foo.bar.example.com/

  3. 連接埠號碼(例如,http://example.com:8080/ 中的 8080)。此欄位必須與設定金鑰和 URL 完全一致。省略的連接埠號碼會在比對前自動轉換為該協定的正確預設值。

  4. 路徑(例如,https://example.com/repo.git 中的 repo.git)。設定金鑰的路徑欄位必須與 URL 的路徑欄位完全一致,或是 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

要將郵件放入的資料夾,通常是草稿資料夾。例如:「INBOX.Drafts」、「INBOX/Drafts」或「[Gmail]/Drafts」。必要欄位。

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

用於在傳送修補程式時啟用/停用 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,則唯一支援的方法是 CRAM-MD5。如果未設定,則 git imap-send 會使用基本的 IMAP 純文字 LOGIN 命令。

include.path
includeIf.<condition>.path

用於包含其他設定檔的特殊變數。請參閱主要 git-config[1] 文件中的「設定檔」章節,特別是「包含」和「條件式包含」子章節。

index.recordEndOfIndexEntries

指定索引檔是否應包含「索引條目結尾」區段。這可以減少多處理器電腦上的索引載入時間,但在使用 2.20 之前的 Git 版本讀取索引時,會產生「忽略 EOIE 擴充功能」訊息。如果已明確啟用 index.threads,則預設值為 true,否則為 false

index.recordOffsetTable

指定索引檔是否應包含「索引條目偏移表」區段。這可以減少多處理器電腦上的索引載入時間,但在使用 2.20 之前的 Git 版本讀取索引時,會產生「忽略 IEOT 擴充功能」訊息。如果已明確啟用 index.threads,則預設值為 true,否則為 false

index.sparse

啟用時,使用稀疏目錄條目寫入索引。除非同時啟用 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] 的「範本目錄」章節。)

init.defaultBranch

允許覆寫預設分支名稱,例如在初始化新的儲存庫時。

init.defaultObjectFormat

允許覆寫新儲存庫的預設物件格式。請參閱 git-init[1] 中的 --object-format=。命令列選項和 GIT_DEFAULT_HASH 環境變數都優先於此設定。

init.defaultRefFormat

允許覆寫新儲存庫的預設參考儲存格式。請參閱 git-init[1] 中的 --ref-format=。命令列選項和 GIT_DEFAULT_REF_FORMAT 環境變數都優先於此設定。

instaweb.browser

指定將用於在 gitweb 中瀏覽您工作儲存庫的程式。請參閱 git-instaweb[1]

instaweb.httpd

要在您工作儲存庫上啟動 gitweb 的 HTTP 精靈命令列。請參閱 git-instaweb[1]

instaweb.local

如果為 true,git-instaweb[1] 啟動的 Web 伺服器將會繫結至本機 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 命令顯示的任何提交的參考名稱。如果指定 short,則不會印出參考名稱字首 refs/heads/refs/tags/refs/remotes/。如果指定 full,則會印出完整參考名稱(包括字首)。如果指定 auto,則如果輸出要傳送到終端機,則參考名稱會顯示為好像給定 short,否則不會顯示參考名稱。這與 git log--decorate 選項相同。

log.initialDecorationSet

依預設,git log 只顯示某些已知參考命名空間的裝飾。如果指定 all,則會顯示所有參考作為裝飾。

log.excludeDecoration

從記錄裝飾中排除指定的模式。這類似於 --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

一個增強的郵件映射檔案的位置。首先載入位於儲存庫根目錄的預設郵件映射檔案,然後載入此變數指向的郵件映射檔案。郵件映射檔案的位置可能在儲存庫的子目錄中,或在儲存庫本身之外的某個位置。請參閱 git-shortlog[1]git-blame[1]

mailmap.blob

類似於 mailmap.file,但將該值視為對儲存庫中 blob 的參考。如果同時給定 mailmap.filemailmap.blob,則會解析兩者,其中來自 mailmap.file 的條目具有優先權。在裸儲存庫中,預設值為 HEAD:.mailmap。在非裸儲存庫中,預設值為空。

maintenance.auto

此布林組態選項控制某些命令在完成正常工作後是否執行 git maintenance run --auto。預設值為 true。

maintenance.autoDetach

許多 Git 命令在將資料寫入儲存庫後會觸發自動維護。此布林組態選項控制此自動維護應在前台發生,還是維護程序應分離並在背景中繼續運行。

如果未設定,則使用 gc.autoDetach 的值作為後備。如果兩者都未設定,則預設值為 true,表示維護程序將會分離。

maintenance.strategy

此字串組態選項提供了一種方法來指定幾個建議的背景維護排程之一。這僅影響在 git maintenance run --schedule=X 命令期間執行哪些任務,前提是未提供任何 --task=<task> 引數。此外,如果設定了 maintenance.<task>.schedule 組態值,則會使用該值,而不是 maintenance.strategy 提供的值。可能的策略字串為

  • none:此預設設定表示在任何排程都不執行任何任務。

  • incremental:此設定最佳化以執行不刪除任何資料的小型維護活動。這不會排程 gc 任務,而是每小時執行 prefetchcommit-graph 任務,每天執行 loose-objectsincremental-repack 任務,以及每週執行 pack-refs 任務。

maintenance.<task>.enabled

此布林組態選項控制當未指定 --task 選項給 git maintenance run 時,是否執行名稱為 <task> 的維護任務。如果存在 --task 選項,則會忽略這些組態值。預設情況下,只有 maintenance.gc.enabled 為 true。

maintenance.<task>.schedule

此組態選項控制在 git maintenance run --schedule=<frequency> 命令期間是否執行給定的 <task>。該值必須是 "hourly"、"daily" 或 "weekly" 之一。

maintenance.commit-graph.auto

此整數組態選項控制應多久執行一次 commit-graph 任務,作為 git maintenance run --auto 的一部分。如果為零,則 commit-graph 任務不會使用 --auto 選項執行。負值將強制每次都執行該任務。否則,正值表示當不在 commit-graph 檔案中的可到達提交數量至少為 maintenance.commit-graph.auto 的值時,應執行該命令。預設值為 100。

maintenance.loose-objects.auto

此整數組態選項控制應多久執行一次 loose-objects 任務,作為 git maintenance run --auto 的一部分。如果為零,則 loose-objects 任務不會使用 --auto 選項執行。負值將強制每次都執行該任務。否則,正值表示當鬆散物件的數量至少為 maintenance.loose-objects.auto 的值時,應執行該命令。預設值為 100。

maintenance.incremental-repack.auto

此整數組態選項控制應多久執行一次 incremental-repack 任務,作為 git maintenance run --auto 的一部分。如果為零,則 incremental-repack 任務不會使用 --auto 選項執行。負值將強制每次都執行該任務。否則,正值表示當不在 multi-pack-index 中的 pack 檔案數量至少為 maintenance.incremental-repack.auto 的值時,應執行該命令。預設值為 10。

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

如果在沒有任何提交引數的情況下呼叫合併,則透過使用儲存在遠端追蹤分支中的最後觀察到的值,合併為目前分支設定的上游分支。諮詢 branch.<current branch>.merge 的值,這些值會命名由 branch.<current branch>.remote 命名的遠端分支,然後透過 remote.<remote>.fetch 將它們對應到其相對應的遠端追蹤分支,並合併這些追蹤分支的提示。預設值為 true。

merge.ff

預設情況下,當合併一個是目前提交的後代的提交時,Git 不會建立額外的合併提交。相反地,會快速向前推進目前分支的提示。當設定為 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 <branch name>"。

可以使用具有空值的元素來清除從先前組態條目累積的 glob 列表。當未定義 merge.suppressDest 變數時,為了向後相容,將使用預設值 master

merge.renameLimit

在合併期間,在重新命名偵測的詳盡部分中要考慮的檔案數量。如果未指定,則預設為 diff.renameLimit 的值。如果未指定 merge.renameLimit 和 diff.renameLimit,則目前預設為 7000。如果關閉了重新命名偵測,則此設定無效。

merge.renames

是否讓 Git 偵測重新命名。若設定為「false」,則停用重新命名偵測。若設定為「true」,則啟用基本重新命名偵測。預設值為 diff.renames 的值。

merge.directoryRenames

是否讓 Git 偵測目錄重新命名,這會影響在合併時,當歷史紀錄的一方將目錄重新命名,而另一方在該目錄中新增檔案時會發生的情況。如果 merge.directoryRenames 設定為「false」,則停用目錄重新命名偵測,表示這些新檔案將會留在舊目錄中。如果設定為「true」,則啟用目錄重新命名偵測,表示這些新檔案將會被移動到新目錄中。如果設定為「conflict」,則會針對這些路徑回報衝突。如果 merge.renames 為 false,則會忽略 merge.directoryRenames 並將其視為 false。預設值為「conflict」。

merge.renormalize

告知 Git 儲存庫中檔案的標準表示法已隨著時間改變 (例如,較早的提交記錄使用 CRLF 行尾符號的文字檔案,但最近的提交記錄使用 LF 行尾符號)。在這樣的儲存庫中,Git 可以在執行合併之前,將提交記錄中的資料轉換為標準格式,以減少不必要的衝突。如需更多資訊,請參閱 gitattributes[5] 中的「合併具有不同簽入/簽出屬性的分支」章節。

merge.stat

是否在合併結束時列印 ORIG_HEAD 和合併結果之間的 diffstat。預設值為 True。

merge.autoStash

設定為 true 時,會在操作開始前自動建立暫存的儲藏項目,並在操作結束後套用。這表示您可以在有髒工作樹的狀態下執行合併。但是,請謹慎使用:成功合併後最終套用儲藏項目可能會導致複雜的衝突。此選項可以被 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.<vimdiff variant>.layout

設定 vimdiff 的 <variant> 的分割視窗版面配置,其中 <variant> 可以是 vimdiffnvimdiffgvimdiff 的任何一個。使用 --tool=<variant> 啟動 git mergetool 時 (如果 merge.tool 設定為 <variant>,則不使用 --tool),Git 會查詢 mergetool.<variant>.layout 以判斷工具的版面配置。如果沒有特定變體的設定,則會使用 vimdiff 的設定作為後備。如果也沒有,則會使用具有 4 個視窗的預設版面配置。若要設定版面配置,請參閱 git-mergetool[1] 中的 BACKEND SPECIFIC HINTS 章節。

mergetool.hideResolved

在合併期間,Git 會自動解析盡可能多的衝突,並在無法解析的任何衝突周圍寫入包含衝突標記的 MERGED 檔案;LOCALREMOTE 通常代表來自 Git 衝突解析之前的文件版本。這個旗標會導致 LOCALREMOTE 被覆寫,以便只有未解決的衝突才會呈現給合併工具。可以使用 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」章節。

可以使用將 --strategy 選項傳遞給 git-notes[1] 來覆寫此設定。

notes.<name>.mergeStrategy

在將 notes 合併到 refs/notes/<name> 時選擇的合併策略。這會覆寫更通用的 "notes.mergeStrategy"。如需可用策略的詳細資訊,請參閱 git-notes[1] 中的「NOTES MERGE STRATEGIES」章節。

notes.displayRef

除了 core.notesRefGIT_NOTES_REF 設定的預設值之外,在顯示具有 git log 系列命令的提交訊息時,還要從哪個 ref (或 ref,如果是 glob 或多次指定) 讀取 notes。

此設定可以使用 GIT_NOTES_DISPLAY_REF 環境變數覆寫,該變數必須是以冒號分隔的 ref 或 glob 清單。

對於不存在的 ref,會發出警告,但會無聲地忽略不符合任何 ref 的 glob。

此設定可以使用 git log 系列命令的 --no-notes 選項停用,或者使用這些命令接受的 --notes=<ref> 選項停用。

"core.notesRef" 的有效值 (可能會被 GIT_NOTES_REF 覆寫) 也會隱式新增到要顯示的 ref 清單中。

notes.rewrite.<command>

當使用 <command> (目前為 amendrebase) 重寫提交時,如果此變數為 false,git 將不會把筆記從原始提交複製到重寫後的提交。預設值為 true。另請參閱下方的「notes.rewriteRef」。

此設定可使用 GIT_NOTES_REWRITE_REF 環境變數覆寫,該變數必須是以冒號分隔的 refs 或 glob 列表。

notes.rewriteMode

在重寫期間複製筆記時(請參閱「notes.rewrite.<command>」選項),決定如果目標提交已有名為的筆記時該怎麼做。必須是 overwriteconcatenatecat_sort_uniqignore 其中之一。預設值為 concatenate

此設定可使用 GIT_NOTES_REWRITE_MODE 環境變數覆寫。

notes.rewriteRef

在重寫期間複製筆記時,指定應複製其筆記的(完整合格)ref。可以是 glob,在這種情況下,將複製所有符合 ref 的筆記。您也可以多次指定此設定。

沒有預設值;您必須設定此變數才能啟用筆記重寫。將其設定為 refs/notes/commits 可啟用預設提交筆記的重寫。

可以使用 GIT_NOTES_REWRITE_REF 環境變數覆寫。有關其格式的進一步說明,請參閱上方的 notes.rewrite.<command>

pack.window

當命令行上未給定視窗大小時,git-pack-objects[1] 使用的視窗大小。預設值為 10。

pack.depth

當命令行上未給定最大深度時,git-pack-objects[1] 使用的最大 delta 深度。預設值為 50。最大值為 4095。

pack.windowMemory

當命令行上未給定限制時,git-pack-objects[1] 中每個執行緒用於 pack 視窗記憶體所消耗的最大記憶體大小。值可以加上後綴「k」、「m」或「g」。當未設定(或明確設定為 0)時,將沒有限制。

pack.compression

一個整數 -1..9,表示 pack 檔案中物件的壓縮級別。-1 為 zlib 預設值。0 表示不壓縮,而 1..9 是各種速度/大小權衡,9 為最慢。如果未設定,則預設為 core.compression。如果 core.compression 也未設定,則預設為 -1,即 zlib 預設值,這是「速度和壓縮之間的預設折衷(目前相當於級別 6)。」

請注意,更改壓縮級別不會自動重新壓縮所有現有物件。您可以將 -F 選項傳遞給 git-repack[1] 來強制重新壓縮。

pack.allowPackReuse

當為 true 或 "single" 且啟用可達性位圖時,pack-objects 將嘗試逐字發送位圖 packfile 的部分。當為 "multi" 且有多重 pack 可達性位圖可用時,pack-objects 將嘗試發送 MIDX 中所有 pack 的部分。

如果只有單一 pack 位圖可用,且 pack.allowPackReuse 設定為 "multi",則只重複使用位圖 packfile 的部分。這可以減少記憶體和 CPU 使用量來提供提取,但可能會導致發送稍微更大的 pack。預設值為 true。

pack.island

一個擴充的正規表示式,用於設定一組 delta 島。有關詳細資訊,請參閱 git-pack-objects[1] 中的「DELTA ISLANDS」。

pack.islandCore

指定一個島嶼名稱,該島嶼的物件會被優先打包。這會在一個 pack 的前面建立一種虛擬 pack,以便指定島嶼的物件希望可以更快地複製到應提供給請求這些物件的使用者的任何 pack 中。實際上,這表示指定的島嶼應對應於儲存庫中最常複製的內容。另請參閱 git-pack-objects[1] 中的「DELTA ISLANDS」。

pack.deltaCacheSize

在將 delta 寫入 pack 之前,git-pack-objects[1] 中用於快取 delta 的最大記憶體量(以位元組為單位)。此快取用於加速寫入物件階段,方法是不必在找到所有物件的最佳匹配後重新計算最終的 delta 結果。在記憶體不足的機器上重新打包大型儲存庫可能會受到嚴重影響,尤其是在此快取將系統推入交換的情況下。值 0 表示沒有限制。可以使用 1 個位元組的最小大小來實際上停用此快取。預設值為 256 MiB。

pack.deltaCacheLimit

git-pack-objects[1] 中快取的 delta 最大大小。此快取用於加速寫入物件階段,方法是不必在找到所有物件的最佳匹配後重新計算最終的 delta 結果。預設值為 1000。最大值為 65535。

pack.threads

指定在搜尋最佳 delta 匹配時要產生的執行緒數。這需要使用 pthreads 編譯 git-pack-objects[1],否則此選項將被忽略並發出警告。這旨在減少多處理器機器上的打包時間。但是,delta 搜尋視窗所需的記憶體量會乘以執行緒數。指定 0 將導致 Git 自動偵測 CPU 數量並相應地設定執行緒數。

pack.indexVersion

指定預設 pack 索引版本。有效值為 1,表示 Git 1.5.2 之前的版本使用的舊版 pack 索引;以及 2,表示新的 pack 索引,具有大於 4 GB 的 pack 的功能以及針對損壞 pack 的重新打包的適當保護。版本 2 是預設值。請注意,當對應的 pack 大於 2 GB 時,將強制執行版本 2,並忽略此組態選項。

如果您的舊版 Git 不了解版本 2 *.idx 檔案,則透過非原生協定(例如「http」)複製或提取將從另一側複製 *.pack 檔案和對應的 *.idx 檔案,可能會導致您的較舊版本的 Git 無法存取儲存庫。但是,如果 *.pack 檔案小於 2 GB,您可以使用 *.pack 檔案上的 git-index-pack[1] 來重新產生 *.idx 檔案。

pack.packSizeLimit

pack 的最大大小。此設定僅影響重新打包時寫入檔案的打包,也就是說,git:// 協定不受影響。它可以被 git-repack[1]--max-pack-size 選項覆寫。達到此限制會導致建立多個 packfile。

請注意,此選項很少有用,並且可能會導致更大的總磁碟大小(因為 Git 不會儲存 pack 之間的 delta)和更差的執行效能(在多個 pack 中尋找物件的速度比單一 pack 慢,而且可達性位圖等最佳化無法處理多個 pack)。

如果您需要使用較小的 packfile 主動執行 Git(例如,因為您的檔案系統不支援大型檔案),此選項可能會有所幫助。但是,如果您的目標是透過支援有限大小的媒體(例如,無法儲存整個儲存庫的可移除媒體)傳輸 packfile,您可能最好建立一個大型 packfile,並使用通用的多卷封存工具(例如,Unix split)分割它。

允許的最小大小限制為 1 MiB。預設值為無限制。支援常用的單位後綴 kmg

pack.useBitmaps

如果為 true,git 會在打包到 stdout 時(例如,在提取的伺服器端期間)使用 pack 位圖(如果可用)。預設值為 true。您通常不需要關閉此設定,除非您正在偵錯 pack 位圖。

pack.useBitmapBoundaryTraversal

如果為 true,Git 將使用實驗性演算法來計算帶有位圖的可達性查詢。與其為所有否定提示建立完整的位圖,然後將它們 OR 在一起,不如考慮將帶有現有位圖的否定提示視為可加成的(即,如果它們存在,則將它們 OR 到結果中,否則忽略它們),並在邊界處建立位圖。

使用此演算法時,由於沒有開啟屬於某些「不感興趣」提交的樹,Git 可能會包含過多的物件。這種不精確性與非位圖遍歷演算法相符。

在許多情況下,這可以提供比精確演算法更快的速度,尤其是在查詢的否定端位圖覆蓋率不佳時。

pack.useSparse

如果為 true,當存在 --revs 選項時,git 預設會在使用 git pack-objects 時使用 --sparse 選項。此演算法僅遍歷出現在引入新物件的路徑中的樹。當計算要發送小變更的 pack 時,這可以顯著提高效能。但是,如果包含的提交包含某些類型的直接重新命名,則可能會將額外的物件新增到 packfile。預設值為 true

pack.preferBitmapTips

在選擇哪些提交將接收位圖時,優先選擇此設定的任何值後綴的任何參考提示上的提交,而不是「選擇視窗」中的任何其他提交。

請注意,將此設定設定為 refs/foo 並不表示 refs/foo/barrefs/foo/baz 提示上的提交一定會被選中。這是因為提交是從一系列可變長度的視窗中選擇位圖的。

如果在視窗中看到此設定的任何值後綴的任何參考提示上的提交,則會立即優先於該視窗中的任何其他提交。

pack.writeBitmaps (已棄用)

這是 repack.writeBitmaps 的已棄用同義詞。

pack.writeBitmapHashCache

如果為 true,git 將在位圖索引中包含「雜湊快取」區段(如果已寫入)。此快取可用於提供 Git 的 delta 啟發式演算法,可能會導致在位圖和非位圖物件之間產生更好的 delta(例如,在舊的位圖 pack 和自上次 gc 以來推送的物件之間提供提取)。缺點是它會消耗每個物件 4 個位元組的磁碟空間。預設值為 true。

當寫入多個 pack 的可達性位元圖時,不會計算新的名稱雜湊值;而是將現有位元圖中儲存的任何名稱雜湊值,在寫入新的位元圖時,置換到它們適當的位置。

pack.writeBitmapLookupTable

如果為 true,Git 會在位元圖索引中包含「查閱表」區段 (如果有的話)。此表用於儘可能延後載入個別的位元圖。這對於具有相對較大位元圖索引的儲存庫可能很有益處。預設為 false。

pack.readReverseIndex

如果為 true,git 會讀取任何可用的 .rev 檔案 (請參閱:gitformat-pack[5])。如果為 false,則會從頭開始產生反向索引,並儲存在記憶體中。預設為 true。

pack.writeReverseIndex

如果為 true,git 會為它寫入的每個新 packfile 寫入對應的 .rev 檔案 (請參閱:gitformat-pack[5]),但在 git-fast-import[1] 和批量簽入機制中除外。預設為 true。

pager.<cmd>

如果值為布林值,則當寫入 tty 時,會開啟或關閉特定 Git 子命令輸出的分頁功能。否則,會使用 pager.<cmd> 的值指定的 pager,開啟該子命令的分頁功能。如果在命令列中指定 --paginate--no-pager,則會優先於此選項。若要停用所有命令的分頁功能,請將 core.pagerGIT_PAGER 設定為 cat

pretty.<name>

git-log[1] 中所指定的,--pretty= 格式字串的別名。此處定義的任何別名都可以像內建的 pretty 格式一樣使用。例如,執行 git config pretty.changelog "format:* %H %s" 會導致呼叫 git log --pretty=changelog 等同於執行 git log "--pretty=format:* %H %s"。請注意,與內建格式同名的別名將被靜默忽略。

promisor.quiet

如果設定為 "true",則在為部分複製提取其他物件時,假設使用 --quiet

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

設定要讓協定 <name> 與 clone/fetch/push 命令一起使用的策略。如需可用的策略,請參閱上方的 protocol.allow

git 目前使用的協定名稱為

  • file:任何基於本機檔案的路徑 (包括 file:// URL 或本機路徑)

  • git:透過直接 TCP 連線 (或設定的 Proxy) 的匿名 git 協定

  • ssh:透過 ssh 的 git (包括 host:path 語法、ssh:// 等)

  • http:透過 http 的 git,包括「智慧型 http」和「愚蠢型 http」。請注意,這不包括 https;如果您想要同時設定兩者,則必須個別設定。

  • 任何外部輔助程式都以其協定命名 (例如,使用 hg 來允許 git-remote-hg 輔助程式)

protocol.version

如果設定,用戶端會嘗試使用指定的協定版本與伺服器通訊。如果伺服器不支援該版本,則通訊會回到版本 0。如果未設定,則預設值為 2。支援的版本

  • 0 - 原始的線路協定。

  • 1 - 原始線路協定,並在伺服器的初始回應中新增了版本字串。

  • 2 - 線路協定版本 2,請參閱 gitprotocol-v2[5]

pull.ff

預設情況下,當合併一個為目前 commit 的後代的 commit 時,Git 不會建立額外的合併 commit。而是會快速轉送目前分支的尖端。如果設定為 false,則此變數會告知 Git 在這種情況下建立額外的合併 commit (相當於從命令列提供 --no-ff 選項)。如果設定為 only,則只允許這種快速轉送合併 (相當於從命令列提供 --ff-only 選項)。此設定會在提取時覆寫 merge.ff

pull.rebase

如果為 true,則會將分支變基到提取的分支之上,而不是在執行「git pull」時,合併預設遠端的預設分支。如需在每個分支的基礎上設定此選項,請參閱 "branch.<name>.rebase"。

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

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

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

pull.octopus

一次提取多個分支時要使用的預設合併策略。

pull.twohead

提取單一分支時要使用的預設合併策略。

push.autoSetupRemote

如果設定為 "true",則當目前分支沒有上游追蹤時,假設預設推送使用 --set-upstream;此選項會與 push.default 選項 *simple*、*upstream* 和 *current* 一起生效。如果您預設想要將新分支推送至預設遠端 (就像 *push.default=current* 的行為一樣),並且您也想要設定上游追蹤,則此選項很有用。最有可能從此選項受益的工作流程是 *simple* 中央工作流程,其中所有分支預期在遠端上都具有相同的名稱。

push.default

定義如果沒有提供 refspec (無論是來自命令列、組態或其他地方),git push 應採取的動作。不同的值非常適合特定的工作流程;例如,在純粹的中央工作流程中 (也就是提取來源等於推送目的地),upstream 可能就是您想要的。可能的值為

  • nothing - 除非提供 refspec,否則不推送任何內容 (錯誤退出)。這主要是為了讓使用者透過永遠明確來避免錯誤。

  • current - 推送目前分支以更新接收端上具有相同名稱的分支。適用於中央和非中央工作流程。

  • upstream - 將目前分支推送回其變更通常整合到目前分支中的分支 (稱為 @{upstream})。如果您是推送至您通常從中提取的相同儲存庫 (也就是中央工作流程),則此模式才適用。

  • tracking - 這是 upstream 的已淘汰同義字。

  • simple - 推送具有遠端上相同名稱的目前分支。

    如果您是在集中式工作流程上工作 (推送至您從中提取的相同儲存庫,通常是 origin),則您需要使用相同名稱設定上游分支。

    自 Git 2.0 起,此模式是預設值,並且是最適合初學者的安全選項。

  • matching - 推送兩端都具有相同名稱的所有分支。這會讓您推送到的儲存庫記住將要推送的分支集合 (例如,如果您總是推送 *maint* 和 *master* 到那裡,並且沒有其他分支,則您推送到的儲存庫將擁有這兩個分支,而您的本機 *maint* 和 *master* 將被推送到那裡)。

    若要有效地使用此模式,您必須確定在執行 *git push* 之前,您要推送的*所有*分支都已準備好推送,因為此模式的重點是要讓您一次推送所有分支。如果您通常只完成一個分支的工作並推送結果,而其他分支尚未完成,則此模式不適合您。而且,此模式不適合推送至共用的中央儲存庫,因為其他人可能會在那裡新增新分支,或在您控制之外更新現有分支的尖端。

    這以前是預設值,但自 Git 2.0 (simple 是新的預設值) 起,已不是預設值。

push.followTags

如果設定為 true,則預設啟用 --follow-tags 選項。您可以在推送時指定 --no-follow-tags 來覆寫此組態。

push.gpgSign

可以設定為布林值,或字串 *if-asked*。true 值會導致所有推送都使用 GPG 簽署,就像將 --signed 傳遞至 git-push[1] 一樣。字串 *if-asked* 會導致在伺服器支援的情況下,推送使用 GPG 簽署,就像將 --signed=if-asked 傳遞至 *git push* 一樣。false 值可能會覆寫較低優先順序的組態檔案中的值。明確的命令列旗標永遠會覆寫此組態選項。

push.pushOption

當未從命令列提供 --push-option=<option> 引數時,git push 的行為就像此變數的每個 <value> 都以 --push-option=<value> 提供一樣。

這是一個多值變數,並且可以在較高優先順序的組態檔案 (例如,儲存庫中的 .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

可以是 "check"、"on-demand"、"only" 或 "no",其行為與 "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 大小,在協商過程中,客戶端與伺服器嘗試找出共同的 commit。若為 "false",則 Git 將僅依賴伺服器的 ref 宣告來找出共同的 commit。

push.useBitmaps

若設定為 "false",即使 pack.useBitmaps 為 "true",也會停用 "git push" 的 bitmaps 使用,但不會阻止其他 git 操作使用 bitmaps。預設值為 true。

rebase.backend

用於變基的預設後端。可選的選項為 applymerge。未來,如果 merge 後端獲得 apply 後端的所有剩餘功能,此設定可能會變得不再使用。

rebase.stat

是否顯示自上次變基以來上游變更的 diffstat。預設為 False。

rebase.autoSquash

若設定為 true,預設為互動模式啟用 git-rebase[1]--autosquash 選項。此選項可以使用 --no-autosquash 選項覆蓋。

rebase.autoStash

若設定為 true,則在操作開始前自動建立一個臨時的 stash 條目,並在操作結束後套用它。這表示您可以在 dirty 的工作目錄上執行變基。然而,請謹慎使用:在成功的變基後,最終的 stash 套用可能會導致不小的衝突。此選項可以被 git-rebase[1]--no-autostash--autostash 選項覆蓋。預設值為 false。

rebase.updateRefs

若設定為 true,則預設啟用 --update-refs 選項。

rebase.missingCommitsCheck

若設定為 "warn",如果某些 commit 被移除(例如,刪除了一行),則 git rebase -i 將印出警告,但變基仍會繼續進行。若設定為 "error",則會印出先前的警告並停止變基,接著可以使用 git rebase --edit-todo 來修正錯誤。若設定為 "ignore",則不會進行任何檢查。若要在沒有警告或錯誤的情況下捨棄 commit,請在 todo 清單中使用 drop 命令。預設值為 "ignore"。

rebase.instructionFormat

一個格式字串,如 git-log[1] 中所指定的,用於互動式變基期間的 todo 清單。格式會自動將 commit hash 前置到格式中。

rebase.abbreviateCommands

若設定為 true,git rebase 將在 todo 清單中使用縮寫的命令名稱,產生類似這樣的結果:

	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

從 commit 主旨產生標籤名稱時,將名稱截斷至此長度。預設情況下,名稱會截斷為略小於 NAME_MAX (允許寫入對應鬆散 ref 的 .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 的資料並更新 ref 後執行 "git maintenance run --auto"。您可以將此變數設定為 false 來停止它。

receive.certNonceSeed

透過將此變數設定為字串,git receive-pack 將接受 git push --signed 並透過使用 HMAC 保護的 "nonce" 進行驗證,並將此字串作為金鑰。

receive.certNonceSlop

git push --signed 傳送的 push 憑證中的 "nonce" 是在數秒內由服務同一個儲存庫的 receive-pack 發出時,將憑證中的 "nonce" 匯出到 hooks 的 GIT_PUSH_CERT_NONCE 中 (而不是 receive-pack 要求傳送端包含的內容)。這可能可以讓在 pre-receivepost-receive 中編寫檢查更容易一些。他們只需要檢查 GIT_PUSH_CERT_NONCE_STATUS 是否為 OK,而無需檢查記錄 nonce 過時秒數的 GIT_PUSH_CERT_NONCE_SLOP 環境變數來決定是否要接受憑證。

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

從客戶端接收 pack 後,receive-pack 在處理 pack 時可能不會產生任何輸出(如果指定了 --quiet)。這會導致某些網路斷開 TCP 連線。設定此選項後,如果 receive-pack 在此階段的 receive.keepAlive 秒內沒有傳輸任何資料,它將傳送一個短的 keepalive 封包。預設值為 5 秒;設定為 0 可完全停用 keepalive。

receive.unpackLimit

如果 push 中接收到的物件數量低於此限制,則物件將解壓縮為鬆散的物件檔案。但是,如果接收到的物件數量等於或超過此限制,則接收到的 pack 將在添加任何缺少的增量基礎後儲存為 pack。從 push 儲存 pack 可以使 push 操作更快完成,尤其是在慢速檔案系統上。如果未設定,則改用 transfer.unpackLimit 的值。

receive.maxInputSize

如果傳入的 pack 資料流的大小大於此限制,則 git-receive-pack 將會產生錯誤,而不是接受 pack 檔案。如果未設定或設定為 0,則大小不受限制。

receive.denyDeletes

若設定為 true,git-receive-pack 將拒絕刪除 ref 的 ref 更新。使用此設定來防止透過 push 刪除 ref。

receive.denyDeleteCurrent

若設定為 true,git-receive-pack 將拒絕刪除非裸儲存庫的目前已結帳分支的 ref 更新。

receive.denyCurrentBranch

若設定為 true 或 "refuse",git-receive-pack 將拒絕更新非裸儲存庫的目前已結帳分支的 ref。這種 push 可能很危險,因為它會使 HEAD 與索引和工作目錄不同步。若設定為 "warn",則在這種 push 到 stderr 時列印警告,但允許 push 繼續。若設定為 false 或 "ignore",則允許這種 push,且不顯示訊息。預設值為 "refuse"。

另一個選項是 "updateInstead",如果在目前的 branch 中 push,則將更新工作目錄。此選項旨在同步工作目錄,當其中一端無法透過互動式 ssh 輕鬆存取時(例如,一個 live 網站,因此要求工作目錄必須乾淨)。當在 VM 內開發以在不同的作業系統上測試和修復程式碼時,此模式也很方便。

預設情況下,如果工作目錄或索引與 HEAD 有任何差異,則 "updateInstead" 將拒絕 push,但是可以使用 push-to-checkout hook 自訂此設定。請參閱 githooks[5]

receive.denyNonFastForwards

若設定為 true,git-receive-pack 將拒絕非快速轉發的 ref 更新。使用此設定來防止透過 push 進行此類更新,即使強制 push 也是如此。初始化共用儲存庫時會設定此組態變數。

receive.hideRefs

此變數與 transfer.hideRefs 相同,但僅適用於 receive-pack(因此會影響 push,但不影響 fetch)。嘗試透過 git push 更新或刪除隱藏的 ref 會被拒絕。

receive.procReceiveRefs

這是一個多值變數,定義 ref 前綴來匹配 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。

可以在值的開頭提供可選的修飾詞,以篩選特定動作的命令:建立 (a)、修改 (m)、刪除 (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,當新的參考需要新的淺層根時,可以更新 .git/shallow。否則,這些參考將會被拒絕。

reftable.blockSize

reftable 後端在寫入區塊時所使用的位元組大小。區塊大小由寫入器決定,不一定要是 2 的冪次方。區塊大小必須大於儲存庫中使用的最長參考名稱或日誌條目,因為參考不能跨越區塊。

建議使用虛擬記憶體系統或檔案系統友善的 2 的冪次方(例如 4kB 或 8kB)。較大的大小 (64kB) 可以產生更好的壓縮效果,但讀取器在存取時可能會增加成本。

最大區塊大小為 16777215 位元組 (15.99 MiB)。預設值為 4096 位元組 (4kB)。值為 0 將使用預設值。

reftable.restartInterval

建立重新啟動點的間隔。reftable 後端會在檔案建立時決定重新啟動點。對於較小的區塊大小 (4k 或 8k) 而言,每 16 個可能更適合,而對於較大的區塊大小 (64k) 而言,每 64 個可能更適合。

更頻繁的重新啟動點會降低前綴壓縮並增加重新啟動表格所消耗的空間,這兩者都會增加檔案大小。

較不頻繁的重新啟動點會使前綴壓縮更有效,從而減少整體檔案大小,但讀取器在二元搜尋步驟後走訪更多記錄時會增加懲罰。

每個區塊最多支援 65535 個重新啟動點。

預設值為每 16 筆記錄建立一個重新啟動點。值為 0 將使用預設值。

reftable.indexObjects

reftable 後端是否應寫入物件區塊。物件區塊是物件 ID 指向它們的參考的反向映射。

預設值為 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 用於推送(假設沒有定義 remote.<name>.pushurl)。將此鍵設定為空字串會清除 URL 清單,讓您可以覆寫先前的配置。

remote.<name>.pushurl

遠端儲存庫的推送 URL。請參閱 git-push[1]。如果配置的遠端存在 pushurl 選項,則會使用它來推送,而不是使用 remote.<name>.url。一個配置的遠端可以有多個推送 URL;在這種情況下,推送會發送到所有 URL。將此鍵設定為空字串會清除 URL 清單,讓您可以覆寫先前的配置。

remote.<name>.proxy

對於需要 curl (http、https 和 ftp) 的遠端,該遠端使用的 Proxy URL。設定為空字串可停用該遠端的 Proxy。

remote.<name>.proxyAuthMethod

對於需要 curl (http、https 和 ftp) 的遠端,用於針對正在使用的 Proxy 進行驗證的方法(可能設定在 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

提取時在遠端執行的預設程式。請參閱 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 一般啟用修剪)。覆寫 fetch.pruneTags 設定(如果有的話)。

另請參閱 remote.<name>.prunegit-fetch[1] 的修剪章節。

remote.<name>.promisor

如果設定為 true,則會使用此遠端來提取承諾物件。

remote.<name>.partialclonefilter

從此承諾遠端提取時將套用的篩選器。變更或清除此值只會影響新提交的提取。若要提取本機物件資料庫中已存在的提交的相關物件,請使用 git-fetch[1]--refetch 選項。

remotes.<group>

由 "git remote update <group>" 提取的遠端清單。請參閱 git-remote[1]

repack.useDeltaBaseOffset

依預設,git-repack[1] 會建立使用 delta-base 位移的套件。如果您需要與早於 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 repack -a 時),git 會寫入點陣圖索引。此索引可以加速後續為複製和提取建立的套件的「計算物件」階段,但會增加一些磁碟空間和初始重新封裝的額外時間。如果建立多個套件檔案,則不會有任何影響。在裸儲存庫中預設為 true,否則為 false。

repack.updateServerInfo

如果設定為 false,git-repack[1] 將不會執行 git-update-server-info[1]。預設值為 true。當 git-repack[1]-n 選項設定為 true 時,可以覆寫此選項。

repack.cruftWindow
repack.cruftWindowMemory
repack.cruftDepth
repack.cruftThreads

當產生 cruft 套件時 git-pack-objects[1] 使用的參數,並且命令列中未給定個別參數。請參閱類似命名的 pack.* 組態變數以了解預設值和意義。

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 設定,更不用說執行其鉤子,而此設定允許使用者指定例外情況,例如用於有意共享的儲存庫(請參閱 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.<身分> 子區段中的值優先於 sendemail 區段中的值。預設身分是 sendemail.identity 的值。

sendemail.smtpEncryption

請參閱 git-send-email[1] 以取得描述。請注意,此設定不受身分機制影響。

sendemail.smtpSSLCertPath

ca-certificates 的路徑(可以是目錄或單個檔案)。將其設定為空字串以停用憑證驗證。

sendemail.<身分>.*

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.file 會先載入。因此,此檔案中的項目會優先於預設郵件映射位置中的項目。請參閱 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.thread
sendemail.transferEncoding
sendemail.validate
sendemail.xmailer

這些設定變數都為 git-send-email[1] 命令列選項提供了預設值。有關詳細資訊,請參閱其文件。

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 用於編輯 rebase 指令檔案的文字編輯器。該值在使用時應由 shell 解釋。可以使用 GIT_SEQUENCE_EDITOR 環境變數覆寫它。如果未設定,則會改為使用預設的 commit 訊息編輯器。

showBranch.default

git-show-branch[1] 的預設分支集合。請參閱 git-show-branch[1]

sparse.expectFilesOutsideOfPatterns

通常在使用稀疏檢出時,不符合任何稀疏模式的檔案會在索引中標記為 SKIP_WORKTREE 位元,並且在工作樹中遺失。因此,Git 通常會檢查具有 SKIP_WORKTREE 位元的檔案實際上是否存在於工作樹中,這與預期相反。如果 Git 找到任何檔案,它會清除相關的 SKIP_WORKTREE 位元,將這些路徑標記為存在。可以使用此選項告知 Git,此類儘管被跳過但仍然存在的檔案是預期的,並停止檢查它們。

預設值為 false,這允許 Git 自動從索引和工作樹中檔案列表的同步問題中恢復。

如果您的環境中有外部因素可減輕 Git 在工作樹檔案存在與稀疏模式之間維護一致性的責任,請將此設定為 true。例如,如果您有一個能感知 Git 的虛擬檔案系統,該系統具有強大的機制,可根據存取模式保持工作樹和稀疏模式的更新。

無論此設定為何,除非啟用稀疏檢出,否則 Git 不會檢查是否存在已略過的檔案,因此,除非 core.sparseCheckouttrue,否則此設定選項無效。

splitIndex.maxPercentChange

當使用分割索引功能時,此設定指定分割索引可包含的條目百分比,相對於分割索引和共享索引中的總條目數,超過此百分比就會寫入新的共享索引。值應介於 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 設定) 來決定要使用的命令列引數。如果基本名稱無法辨識,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.showIncludeUntracked

如果設定為 true,git stash show 命令將會顯示儲藏條目的未追蹤檔案。預設值為 false。請參閱 git-stash[1]show 命令的描述。

stash.showPatch

如果設定為 true,沒有選項的 git stash show 命令將會以 patch 形式顯示儲藏條目。預設值為 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

設定為 true 以在 git-status[1] 的非 porcelain 狀態格式中預設啟用 --ahead-behind,設定為 false 以啟用 --no-ahead-behind。預設值為 true。

status.displayCommentPrefix

如果設定為 true,git-status[1] 會在每個輸出行的前面插入註解字首 (從 core.commentChar 開始,也就是預設的 #)。這是 Git 1.8.4 和更早版本中 git-status[1] 的行為。預設值為 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 的所有常用拼法都會被視為 normal,而 false 會被視為 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 config。使用者可以在透過 *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

此選項可用於控制此子模組的遞迴擷取。可以使用「git fetch」和「git pull」的 --[no-]recurse-submodules 命令列選項來覆寫它。此設定會覆寫 gitmodules[5] 檔案中的設定。

submodule.<name>.ignore

定義在何種情況下,「git status」和 diff 系列會將子模組顯示為已修改。當設定為「all」時,永遠不會被視為已修改 (但它仍會在已暫存時顯示在 status 和 commit 的輸出中),「dirty」會忽略子模組工作樹的所有變更,並且只考慮子模組的 HEAD 與超級專案中記錄的提交之間的差異。「untracked」還會讓工作樹中具有已修改追蹤檔案的子模組顯示出來。使用「none」(未設定此選項時的預設值) 也會顯示工作樹中具有未追蹤檔案的子模組為已變更。此設定會覆寫 .gitmodules 中針對此子模組所做的任何設定,這兩個設定都可以在命令列上使用「--ignore-submodules」選項來覆寫。*git submodule* 命令不受此設定的影響。

submodule.<name>.active

指示子模組是否是 git 命令重點的布林值。此組態選項的優先順序高於 submodule.active 組態選項。詳細資訊請參閱 gitsubmodules[7]

submodule.active

一個重複的欄位,其中包含用於比對子模組路徑以判斷子模組是否是 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 不受支援。

  • 只有在啟用 submodule.propagateBranches 時,branch 才受支援。

submodule.propagateBranches

[實驗性] 一個布林值,用於在使用 --recurse-submodulessubmodule.recurse=true 時啟用分支支援。啟用此選項將允許某些指令接受 --recurse-submodules,並且某些已接受 --recurse-submodules 的指令現在會考慮分支。預設值為 false。

submodule.fetchJobs

指定同時提取/複製的子模組數量。正整數表示允許平行提取的子模組數量上限。值為 0 將給出合理的預設值。如果未設定,則預設值為 1。

submodule.alternateLocation

指定在複製子模組時,子模組如何取得替代位置。可能的值為 nosuperproject。預設情況下,假設為 no,這不會新增任何參考。當值設定為 superproject 時,要複製的子模組會計算其相對於上層專案替代位置的替代位置。

submodule.alternateErrorStrategy

指定如何處理透過 submodule.alternateLocation 計算出的子模組替代位置的錯誤。可能的值為 ignoreinfodie。預設值為 die。請注意,如果設定為 ignoreinfo,並且計算出的替代位置有錯誤,則複製會像未指定任何替代位置一樣繼續進行。

tag.forceSignAnnotated

一個布林值,用於指定建立的附註標籤是否應使用 GPG 簽署。如果在命令列上指定了 --annotate,則它會優先於此選項。

tag.sort

此變數控制由 git-tag[1] 顯示時標籤的排序順序。如果未提供 "--sort=<value>" 選項,則將使用此變數的值作為預設值。

tag.gpgSign

一個布林值,用於指定是否應使用 GPG 簽署所有標籤。在自動化腳本中執行時使用此選項可能會導致大量標籤被簽署。因此,使用代理程式以避免多次輸入您的 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 DomainSocket(在支援它們的平台上)。Socket 類型可以是 streamdgram;如果省略,Git 將嘗試兩者。

trace2.normalBrief

布林值。當為 true 時,一般輸出會省略 timefilenameline 欄位。可能會被 GIT_TRACE2_BRIEF 環境變數覆寫。預設值為 false。

trace2.perfBrief

布林值。當為 true 時,PERF 輸出會省略 timefilenameline 欄位。可能會被 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

整數。當將追蹤檔案寫入到目標目錄時,如果寫入額外的追蹤會超出此檔案數量,則不要寫入額外的追蹤。而是寫入一個信號檔案,該檔案將阻止進一步追蹤到此目錄。預設值為 0,這會停用此檢查。

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:當解析包含純文字認證的 URL 時,Git 將向 stderr 寫入警告訊息。

  • die:當解析包含純文字認證的 URL 時,Git 將向 stderr 寫入失敗訊息。

transfer.fsckObjects

當未設定 fetch.fsckObjectsreceive.fsckObjects 時,將改用此變數的值。預設值為 false。

設定後,如果物件格式錯誤或連結到不存在的物件,提取或接收將中止。此外,還會檢查各種其他問題,包括舊版問題(請參閱 fsck.<msg-id>)和潛在的安全問題,例如存在 .GIT 目錄或惡意的 .gitmodules 檔案(詳細資訊請參閱 v2.2.1 和 v2.17.1 的發行說明)。未來版本可能會新增其他健全性和安全檢查。

在接收端,失敗的 fsckObjects 將使這些物件無法存取,請參閱 git-receive-pack[1] 中的「隔離環境」。在提取端,格式錯誤的物件將改為留在儲存庫中,不被參考。

由於 fetch.fsckObjects 實作的非隔離性質,它無法像 receive.fsckObjects 一樣被信賴來保持物件儲存區的乾淨。

由於物件是在解壓縮時寫入物件儲存區的,因此可能會出現這樣的情況,即使「提取」失敗,也可能會引入惡意的物件,只是隨後的「提取」成功,因為只會檢查新傳入的物件,而不是那些已寫入物件儲存區的物件。不應依賴行為上的差異。將來,這些物件也可能會為「提取」而隔離。

目前,偏執的人需要找到某種方法來模擬隔離環境,如果他們想要與「推送」相同的保護。例如,在內部鏡像的情況下,請分兩步驟進行鏡像,一步提取不受信任的物件,然後執行第二個「推送」(將使用隔離)到另一個內部儲存庫,並讓內部客戶端使用這個推送到的儲存庫,或禁止內部提取,並且僅在執行完整的「fsck」(並且在此期間沒有發生新的提取)後才允許它們。

transfer.hideRefs

字串,receive-packupload-pack 用來決定從它們的初始廣告中省略哪些 refs。使用多個定義來指定多個前綴字串。一個 ref 若位於此變數值所列出的階層之下,則會被排除,並且在回應 git pushgit fetch 時會被隱藏。請參閱 receive.hideRefsuploadpack.hideRefs 以了解此設定的程式特定版本。

您也可以在 ref 名稱前面加上 ! 來否定該條目,明確地公開它,即使較早的條目將其標記為隱藏。如果您有多個 hideRefs 值,則後面的條目會覆蓋前面的條目(並且更特定設定檔中的條目會覆蓋較不特定設定檔中的條目)。

如果正在使用命名空間,則會在將每個參考與 transfer.hiderefs 模式比對之前,先從每個參考中剝離命名空間前綴。為了在剝離之前比對 refs,請在 ref 名稱前面加上 ^。如果您結合 !^,則必須先指定 !

例如,如果在 transfer.hideRefs 中指定了 refs/heads/master,且目前的命名空間是 foo,則會從廣告中省略 refs/namespaces/foo/refs/heads/master。如果設定了 uploadpack.allowRefInWant,則 upload-pack 會在協定 v2 的 fetch 命令中,將 want-ref refs/heads/master 視為 refs/namespaces/foo/refs/heads/master 不存在。另一方面,receive-pack 仍然會宣傳 ref 指向的物件 ID,而不會提及它的名稱(所謂的 ".have" 行)。

即使您隱藏了 refs,客戶端仍然可以透過 gitnamespaces[7] 手冊頁的「安全性」章節中描述的技術來竊取目標物件;最好將私人資料保存在單獨的儲存庫中。

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 來請求任何樹狀結構,無論是否可從 ref tips 存取。有關更多詳細資訊,請參閱 git-upload-archive[1] 的「安全性」章節中的討論。預設值為 false

uploadpack.hideRefs

此變數與 transfer.hideRefs 相同,但僅適用於 upload-pack(因此僅影響擷取,而不影響推送)。嘗試透過 git fetch 擷取隱藏的 ref 會失敗。另請參閱 uploadpack.allowTipSHA1InWant

uploadpack.allowTipSHA1InWant

uploadpack.hideRefs 生效時,允許 upload-pack 接受要求隱藏 ref 尖端物件的擷取請求(預設情況下,會拒絕此類請求)。另請參閱 uploadpack.hideRefs。即使此值為 false,客戶端仍然可以透過 gitnamespaces[7] 手冊頁的「安全性」章節中描述的技術來竊取物件;最好將私人資料保存在單獨的儲存庫中。

uploadpack.allowReachableSHA1InWant

允許 upload-pack 接受要求可從任何 ref tip 存取的物件的擷取請求。但是,請注意,計算物件可存取性在計算上是耗費資源的。預設值為 false。即使此值為 false,客戶端仍然可以透過 gitnamespaces[7] 手冊頁的「安全性」章節中描述的技術來竊取物件;最好將私人資料保存在單獨的儲存庫中。

uploadpack.allowAnySHA1InWant

允許 upload-pack 接受要求任何物件的擷取請求。預設值為 false

uploadpack.keepAlive

upload-pack 啟動 pack-objects 時,在 pack-objects 準備封裝時可能會有一段靜止期。通常它會輸出進度資訊,但是如果對擷取使用了 --quiet,則 pack-objects 在封裝資料開始之前將完全不輸出任何內容。某些客戶端和網路可能會認為伺服器已掛起並放棄。設定此選項會指示 upload-packuploadpack.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)。這是一種防止從不受信任的儲存庫中擷取的安全措施。

uploadpack.allowFilter

如果設定了此選項,則 upload-pack 將支援部分複製和部分擷取物件篩選。

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 功能。此功能旨在讓負載平衡伺服器受益,因為負載平衡伺服器可能由於複寫延遲而對其 refs 指向的 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 形式通常是指某種形式的個人姓名。有關這些設定以及 credential.username 選項的更多資訊(如果您正在尋找驗證憑證),請參閱 git-commit[1]git[1] 的環境變數章節。

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 建立新分支。

錯誤

使用已棄用的 [section.subsection] 語法時,如果子章節至少包含一個大寫字元,則變更值將導致新增多行金鑰而不是變更。例如,當設定檔看起來像

  [section.subsection]
    key = value1

並且執行 git config section.Subsection.key value2 將導致

  [section.subsection]
    key = value1
    key = value2

GIT

屬於 git[1] 套件的一部分

scroll-to-top