簡體中文 ▾ 主題 ▾ 最新版本 ▾ git-config 最後更新於 2.50.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>
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,如果 $XDG_CONFIG_HOME/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 <config-file>
--file <config-file>

對於寫入選項:寫入指定檔案而不是倉庫 .git/config

對於讀取選項:只從指定檔案讀取,而不是從所有可用檔案讀取。

另請參見 檔案

--blob <blob>

--file 類似,但使用給定 blob 而不是檔案。例如,您可以使用 master:.gitmodules 從 master 分支中的 .gitmodules 檔案讀取值。有關拼寫 blob 名稱的更完整方式列表,請參閱 gitrevisions[7] 中的“SPECIFYING REVISIONS”節。

--fixed-value

value-pattern 引數一起使用時,將 value-pattern 視為精確字串而不是正則表示式。這將限制匹配的名稱/值對僅限於值與 value-pattern 完全相等的那些。

--type <type>

git config 將確保任何輸入或輸出在給定型別約束下有效,並將輸出值規範化為 <type> 的規範形式。

有效的 <type> 包括:

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

  • int: 將值規範化為簡單的十進位制數字。可選的字尾 kmg 將導致輸入值乘以 1024、1048576 或 1073741824。

  • bool-or-int: 按照上述 boolint 規範化。

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

  • expiry-date: 透過將固定或相對日期字串轉換為時間戳來規範化。此指定符在設定值時無效。

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

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

用於選擇型別指定符的舊選項。推薦改為使用 --type(見上文)。

--no-type

取消設定之前設定的型別指定符(如果之前已設定)。此選項請求 git config 不規範化檢索到的變數。--no-type 在沒有 --type=<type>--<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 僅在列出配置時生效,即在使用 list 或可能返回多個結果的 get 時。預設是使用分頁器。

檔案

預設情況下,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

如果未向 git config 提供 --file 選項,則使用 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

假設的代理命令條目實際上有一個字尾來區分它們適用於哪個 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

但是,如果您真的只想替換預設代理的行,即沒有“for ...”字尾的行,請執行以下操作:

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

要實際只匹配帶有感嘆號的值,您需要:

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

要新增新的代理,而不更改任何現有代理,請使用:

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

一個在指令碼中使用自定義顏色的示例:

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

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

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

配置檔案

Git 配置檔案包含許多影響 Git 命令列為的變數。每個倉庫中的檔案 .git/config 以及可選的 config.worktree(參見 git-worktree[1] 的“CONFIGURATION FILE”節)用於儲存該倉庫的配置,而 $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 部分的條件評估結果不為 true,則可能會被忽略;請參閱下面的“條件包含”。

您可以透過將特殊變數 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 萬用字元和另外兩個 **//**,它們可以匹配多個路徑元件。如果我們在一個工作樹中,並且當前檢出的分支名稱與該模式匹配,則滿足包含條件。

如果模式以 / 結尾,則會自動新增 **。例如,模式 foo/ 會變成 foo/**。換句話說,它會匹配所有以 foo/ 開頭的分支。如果您的分支是分層組織的,並且您想將配置應用於該層次結構中的所有分支,這將非常有用。

hasconfig:remote.*.url:

此關鍵字後面的資料被視為一個模式,包含標準的 globbing 萬用字元和另外兩個 **//**,它們可以匹配多個元件。首次看到此關鍵字時,將掃描其餘配置檔案以查詢遠端 URL(不應用任何值)。如果至少存在一個與此模式匹配的遠端 URL,則滿足包含條件。

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

請注意,與其他 includeIf 條件不同,解析此條件依賴於在讀取條件時尚未知曉的資訊。典型的用例是此選項作為系統級或全域性級配置存在,而遠端 URL 在本地級配置中;因此在解析此條件時需要提前掃描。為了避免潛在包含的檔案可能影響這些檔案是否被潛在包含的“雞生蛋,蛋生雞”問題,Git 透過禁止這些檔案影響這些條件的解析(從而禁止它們宣告遠端 URL)來打破迴圈。

至於此關鍵字的命名,是為了向前相容支援更多基於變數的包含條件的命名方案,但目前 Git 僅支援上面描述的精確關鍵字。

關於透過 gitdirgitdir/i 進行匹配的幾點說明

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

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

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

  • 請注意,"../" 並非特殊字元,它會進行字面匹配,這可能不是您想要的。

示例

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

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

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

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

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

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

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

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

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

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

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

許多變數的值被視為簡單的字串,但也有一些變數接受特定型別的值,並且有關於如何拼寫它們的規則。

布林值

當一個變數被指定接受布林值時,truefalse 有許多同義詞被接受;它們都不區分大小寫。

true

布林真值字面量有 yesontrue1。此外,未定義 = <value> 的變數也被視為真。

false

布林假值字面量有 noofffalse0 和空字串。

當使用 --type=bool 型別說明符將值轉換為其規範形式時,git config 將確保輸出為“true”或“false”(小寫拼寫)。

整數

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

顏色

接受顏色值的變數,其值是一個顏色列表(最多兩個,一個用於前景,一個用於背景)和屬性(任意數量),它們之間用空格分隔。

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

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

顏色 default 明確地將顏色重置為終端預設值,例如指定一個清除的背景。儘管它因終端而異,但這通常與設定為“white black”不同。

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

接受的屬性有 bold(粗體)、dim(暗淡)、ul(下劃線)、blink(閃爍)、reverse(反轉)、italic(斜體)和 strike(刪除線)。任何屬性相對於顏色的位置(之前、之後或中間)無關緊要。特定屬性可以透過前置 nono- 來關閉(例如,noreverseno-ul 等)。

偽屬性 reset 在應用指定著色之前重置所有顏色和屬性。例如,reset green 將產生一個綠色前景和預設背景,且沒有任何活動屬性。

一個空的顏色字串完全不產生任何顏色效果。這可以用於避免對特定元素著色,而無需完全停用顏色。

對於 Git 的預定義顏色槽,屬性應在彩色輸出中每個專案的開頭重置。因此,將 color.decorate.branch 設定為 black 會將該分支名稱塗成純粹的 black,即使同一輸出行上的前一個內容(例如,log --decorate 輸出中分支名稱列表之前的左括號)被設定為用 bold 或其他屬性著色。然而,自定義日誌格式可能會進行更復雜和分層的著色,並且否定形式在那裡可能很有用。

路徑名

接受路徑名值的變數可以給定一個以 "~/" 或 "~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 而未提供 pathspec 引數時顯示。

addIgnoredFile

當用戶嘗試將一個被忽略的檔案新增到索引時顯示。

amWorkDir

git-am[1] 無法應用補丁檔案時顯示,以告知使用者檔案位置。

ambiguousFetchRefspec

當多個遠端倉庫的 fetch refspec 對映到同一個遠端跟蹤分支名稱空間並導致分支跟蹤設定失敗時顯示。

checkoutAmbiguousRemoteBranchName

git-checkout[1]git-switch[1] 的引數在多個遠端倉庫中模糊地解析為遠端跟蹤分支,而明確的引數原本會導致檢出遠端跟蹤分支時顯示。有關如何在列印此建議的某些情況下設定預設使用的給定遠端倉庫,請參閱 checkout.defaultRemote 配置變數。

commitBeforeMerge

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

detachedHead

當用戶使用 git-switch[1]git-checkout[1] 切換到分離 HEAD 狀態時顯示,以告知使用者事後如何建立本地分支。

diverging

當無法進行快進合併時顯示。

fetchShowForcedUpdates

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

forceDeleteBranch

當用戶嘗試在未設定 force 選項的情況下刪除未完全合併的分支時顯示。

ignoredHook

當一個 hook 被忽略,因為該 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 待辦列表後出現錯誤時顯示。

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 別名是一個包含多個命令(例如在管道中)的“單行”指令碼,引用多個引數,或者無法處理在末尾新增的位置引數,則應小心。例如:將 alias.cmd = "!echo $1 | grep $2" 作為 git cmd 1 2 呼叫時,將執行為 echo $1 | grep $2 1 2,這不是您想要的結果。

    • 處理這個問題的一個便捷方法是將您的指令碼操作寫入一個行內函數,然後透過命令列提供的任何引數呼叫該函式。例如 `alias.cmd = "!c() { echo $1 | grep $2 ; }; c" 將正確執行前一個示例。

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

am.keepcr

如果為 true,git-am 將呼叫 git-mailsplit 處理 mbox 格式的補丁,並帶上引數 --keep-cr。在這種情況下,git-mailsplit 不會從以 \r\n 結尾的行中刪除 \r。可以透過在命令列中提供 --no-keep-cr 來覆蓋。請參閱 git-am[1]git-mailsplit[1]

am.threeWay

預設情況下,如果補丁不能幹淨地應用,git am 將失敗。當設定為 true 時,此設定會告訴 git am 在補丁記錄了它應該應用到的 blob 的標識並且我們在本地有這些 blob 可用時,回退到三向合併(等同於從命令列給出 --3way 選項)。預設為 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.<name>.pattern

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

提交根據指向給定提交的任何引用是否匹配模式(這是一個擴充套件正則表示式)而被分組到偽合併組中。

在偽合併組內,提交可以根據模式中的捕獲組進一步分組到子組中。這些子分組是透過將正則表示式中的任何捕獲組用一個 - 短劃線連線起來形成的。

例如,如果模式是 refs/tags/,那麼所有標籤(如果它們滿足以下條件)都將被視為同一偽合併組的候選。然而,如果模式改為 refs/remotes/([0-9])+/tags/,那麼來自不同遠端倉庫的標籤將根據遠端編號分組到不同的偽合併組中。

bitmapPseudoMerge.<name>.decay

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

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

如果所有組的大小相同,那麼包含較新提交的組可能比早期組使用得更少,因為指向較新提交的引用比指向舊提交的引用更有可能被更頻繁地更新。

bitmapPseudoMerge.<name>.sampleRate

確定選入不穩定偽合併點陣圖中非點陣圖化提交(在引用尖端中)的比例。必須在 01 之間(包括兩端)。預設值為 1

bitmapPseudoMerge.<name>.threshold

確定非點陣圖化提交(在引用尖端中,如上所述)的最小年齡,這些提交是可用於不穩定偽合併點陣圖的候選。預設值為 1.week.ago

bitmapPseudoMerge.<name>.maxMerges

確定提交可以分佈到的最大偽合併提交數量。

對於其模式不包含任何捕獲組的偽合併組,此設定適用於所有匹配正則表示式的提交。對於具有一個或多個捕獲組的模式,此設定適用於每個不同的捕獲組。

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

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

bitmapPseudoMerge.<name>.stableThreshold

確定提交(在引用尖端中,如上所述,但穩定提交即使已被點陣圖覆蓋仍被視為候選)的最小年齡,這些提交是用於穩定偽合併點陣圖的候選。預設值為 1.month.ago

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

bitmapPseudoMerge.<name>.stableSize

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

blame.blankBoundary

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

blame.coloring

這決定了應用於 blame 輸出的著色方案。它可以是 repeatedLineshighlightRecentnone(預設值)。

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 branchgit switchgit checkout 設定新分支,以便 git-pull[1] 能夠適當地從起始分支合併。請注意,即使未設定此選項,也可以使用 --track--no-track 選項按分支選擇此行為。此選項預設為 true。有效設定包括:

false

不進行自動設定

true

當起始點是遠端跟蹤分支時,自動進行設定

always

當起始點是本地分支或遠端跟蹤分支時,自動進行設定

inherit

如果起始點有跟蹤配置,則將其複製到新分支

simple

僅當起始點是遠端跟蹤分支且新分支與遠端分支同名時,才進行自動設定。

branch.autoSetupRebase

當使用 git branchgit switchgit checkout 建立跟蹤另一個分支的新分支時,此變數會告訴 Git 將拉取操作設定為 rebase 而不是 merge(請參閱 branch.<name>.rebase)。有效設定包括:

never

rebase 永遠不會自動設定為 true。

local

對於其他本地分支的跟蹤分支,rebase 設定為 true。

remote

對於遠端跟蹤分支的跟蹤分支,rebase 設定為 true。

always

對於所有跟蹤分支,rebase 將設定為 true。

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

branch.sort

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

branch.<name>.remote

當位於分支 <name> 上時,它告訴 git fetchgit push 從哪個遠端倉庫抓取或推送到哪個遠端倉庫。要推送到的遠端倉庫可以透過 remote.pushDefault(適用於所有分支)來覆蓋。對於當前分支,要推送到的遠端倉庫可以進一步透過 branch.<name>.pushRemote 來覆蓋。如果未配置遠端倉庫,或者你不在任何分支上並且倉庫中定義了多個遠端倉庫,則抓取時預設為 origin,推送時預設為 remote.pushDefault。此外,.(一個點)是當前本地倉庫(一個點倉庫),請參閱下面 branch.<name>.merge 的最後一條註釋。

branch.<name>.pushRemote

當位於分支 <name> 上時,它會覆蓋用於推送的 branch.<name>.remote。它還會覆蓋從分支 <name> 推送時的 remote.pushDefault。當你從一個地方(例如你的上游)拉取並推送到另一個地方(例如你自己的釋出倉庫)時,你可能希望設定 remote.pushDefault 來指定所有分支的推送遠端倉庫,並使用此選項來覆蓋特定分支的設定。

branch.<name>.merge

branch.<name>.remote 一起定義給定分支的上游分支。它告訴 git fetch/git pull/git rebase 要合併哪個分支,並且還可以影響 git push(請參閱 push.default)。當位於分支 <name> 中時,它告訴 git fetch 要在 FETCH_HEAD 中標記合併的預設 refspec。該值被視為 refspec 的遠端部分,並且必須與從 branch.<name>.remote 給定的遠端倉庫抓取的引用匹配。合併資訊由 git pull(它首先呼叫 git fetch)用於查詢預設合併分支。如果沒有此選項,git pull 預設為合併抓取的第一個 refspec。指定多個值以進行章魚合併。如果你希望設定 git pull 以便它從本地倉庫的另一個分支合併到 <name>,你可以將 branch.<name>.merge 指向所需分支,並使用相對路徑設定 .(一個點)作為 branch.<name>.remote

branch.<name>.mergeOptions

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

branch.<name>.rebase

當為 true 時,在執行 git pull 時,將分支 <name> rebase 到抓取的分支之上,而不是從預設遠端倉庫合併預設分支。有關以非分支特定方式執行此操作,請參閱 pull.rebase

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

當值為 interactive(或簡寫為 i)時,rebase 以互動模式執行。

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

branch.<name>.description

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

browser.<tool>.cmd

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

browser.<tool>.path

覆蓋給定工具的路徑,該工具可用於瀏覽 HTML 幫助(請參閱 git-help[1] 中的 -w 選項)或 gitweb 中的工作倉庫(請參閱 git-instaweb[1])。

bundle.*

bundle.* 鍵可能出現在透過 git clone --bundle-uri 選項找到的捆綁列表檔案中。如果這些鍵放在倉庫配置檔案中,目前無效,但將來會改變。有關詳細資訊,請參閱 捆綁 URI 設計文件

bundle.version

此整數值表示捆綁列表使用的捆綁列表格式的版本。目前,唯一接受的值是 1

bundle.mode

此字串值應為 allany。此值描述是否需要所有通告的捆綁包才能完全解捆綁捆綁的資訊(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 的命令或功能。

checkout.guess

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

checkout.workers

更新工作樹時使用的並行工作程序數。預設值為一,即順序執行。如果設定為小於一的值,Git 將使用與可用邏輯核心數相同的工作程序數。此設定和 checkout.thresholdForParallelism 影響所有執行檢出操作的命令。例如:checkout、clone、reset、sparse-checkout 等。

注意
並行檢出通常為位於 SSD 或透過 NFS 的倉庫提供更好的效能。對於位於旋轉磁碟和/或核心數量較少的機器上的倉庫,預設的順序檢出通常表現更好。倉庫的大小和壓縮級別也可能影響並行版本的效能。
checkout.thresholdForParallelism

當並行檢出少量檔案時,子程序生成和程序間通訊的開銷可能大於並行化帶來的收益。此設定允許你定義應嘗試並行檢出的最小檔案數。預設值為 100。

clean.requireForce

一個布林值,用於使 git-clean 拒絕刪除檔案,除非給定 -f 選項。預設為 true。

clone.defaultRemoteName

克隆倉庫時建立的遠端倉庫名稱。預設為 origin。可以透過向 git-clone[1] 傳遞 --origin 命令列選項來覆蓋。

clone.rejectShallow

如果倉庫是淺克隆,則拒絕克隆;這可以透過在命令列上傳遞 --reject-shallow 選項來覆蓋。請參閱 git-clone[1]

clone.filterSubmodules

如果提供了部分克隆過濾器(請參閱 --filtergit-rev-list[1] 中)並且使用了 --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(其他引用)之一。

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>

為差異著色使用自定義顏色。<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> 分別是用於本地分支、遠端跟蹤分支、標籤、stash 和 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 --interactivegit 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(顯示無分支警告的顏色,預設為紅色)、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)。如果未指定 alwaysneverauto 中的任何一個,則設定其中任何一個都意味著 always

column

先填充列再填充行

row

先填充行再填充列

plain

以一列顯示

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

dense

建立不等大小的列以利用更多空間

nodense

建立等大小的列

column.branch

指定是否以列形式輸出 git branch 中的分支列表。詳情請參閱 column.ui

column.clean

指定在 git clean -i 中列出專案時的佈局,該命令始終以列形式顯示檔案和目錄。詳情請參閱 column.ui

column.status

指定是否以列形式輸出 git status 中的未跟蹤檔案。詳情請參閱 column.ui

column.tag

指定是否以列形式輸出 git tag 中的標籤列表。詳情請參閱 column.ui

commit.cleanup

此設定覆蓋 git commit--cleanup 選項的預設值。詳情請參閱 git-commit[1]。當您總是希望在日誌訊息中保留以註釋字元(core.commentChar,預設為 #)開頭的行時,更改預設值會很有用,在這種情況下,您可以執行 git config commit.cleanup whitespace(請注意,如果您這樣做,您將必須自己刪除提交日誌模板中以註釋字元開頭的幫助行)。

commit.gpgSign

一個布林值,用於指定是否所有提交都應進行 GPG 簽名。在執行 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 filters) 的版本。可以是 -1、0、1 或 2。請注意,大於 1 的值可能與尚未理解這些版本的舊版 Git 不相容。在混合版本環境中操作時請謹慎使用。

預設為 -1。

如果為 -1,Git 將使用倉庫中已更改路徑布隆過濾器的版本,如果不存在,則預設為 1。

如果為 0,Git 將不讀取任何布隆過濾器,並在指示寫入時寫入版本 1 布隆過濾器。

如果為 1,Git 將只讀取版本 1 布隆過濾器,並寫入版本 1 布隆過濾器。

如果為 2,Git 將只讀取版本 2 布隆過濾器,並寫入版本 2 布隆過濾器。

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

completion.commands

這僅由 git-completion.bash 用於從已完成命令列表中新增或刪除命令。通常只有 porcelain 命令和少數其他選定命令會完成。您可以在此變數中新增更多命令,用空格分隔。在命令前加上 - 將會從現有列表中刪除它。

core.fileMode

告訴 Git 是否應尊重工作樹中檔案的可執行位。

某些檔案系統在檢出標記為可執行的檔案時會丟失可執行位,或者在檢出非可執行檔案時將其可執行位置為開啟。git-clone[1]git-init[1] 會探測檔案系統以檢視它是否正確處理可執行位,並根據需要自動設定此變數。

然而,倉庫可能位於正確處理檔案模式的檔案系統上,並且在建立時此變數被設定為 true,但之後可能會從另一個丟失檔案模式的環境(例如透過 CIFS 掛載匯出 ext4,使用 Git for Windows 或 Eclipse 訪問 Cygwin 建立的倉庫)訪問。在這種情況下,可能需要將此變數設定為 false。請參閱 git-update-index[1]

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

core.hideDotFiles

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

core.ignoreCase

內部變數,用於啟用各種變通方法,使 Git 在不區分大小寫的檔案系統(如 APFS、HFS+、FAT、NTFS 等)上更好地工作。例如,如果目錄列表找到 "makefile" 而 Git 期望 "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 之間共享倉庫時很有用。(需要 Git for Windows 1.7.10 或更高版本,或 Cygwin 1.7 下的 Git)。當為 false 時,Git 完全透明地處理檔名,這與舊版 Git 向後相容。

core.protectHFS

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

core.protectNTFS

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

core.fsmonitor

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

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

內建檔案系統監視器目前僅在有限的支援平臺上可用。目前,這包括 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(完全掃描)。Git 2.26 之前的版本預設為鉤子協議 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,將使用索引的 split-index 功能。請參閱 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 語言轉義控制字元(例如 \t 表示 TAB,\n 表示 LF,\\ 表示反斜槓)相同的方式使用反斜槓轉義這些字元來引用路徑名中的“不尋常”字元,或者轉義值大於 0x80 的位元組(例如八進位制 \302\265 表示 UTF-8 中的“micro”)。如果此變數設定為 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 協議獲取時,用於執行(作為 command host port)而不是直接連線到遠端伺服器。如果變數值採用“COMMAND for DOMAIN”格式,則該命令僅適用於以指定域名字串結尾的主機名。此變數可以設定多次,並按給定順序匹配;第一個匹配項獲勝。

可以透過 GIT_PROXY_COMMAND 環境變數覆蓋(該變數始終普遍適用,沒有特殊的“for”處理)。

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

core.sshCommand

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

core.ignoreStat

如果為 true,Git 將避免使用 lstat() 呼叫來檢測檔案是否已更改,方法是為那些在索引和工作樹中都已相同更新的跟蹤檔案設定“assume-unchanged”位。

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

此資訊可用於確定“兩天前”某個分支的尖端提交是什麼。

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

core.repositoryFormatVersion

標識倉庫格式和佈局版本的內部變數。參見 gitrepository-layout[5]

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,表示不在 pack 檔案中的物件的壓縮級別。-1 是 zlib 的預設值。0 表示不壓縮,1..9 是各種速度/大小的權衡,9 是最慢的。如果未設定,則預設為 core.compression。如果 core.compression 也未設定,則預設為 1(最佳速度)。

core.packedGitWindowSize

在單個對映操作中對映到記憶體中的 pack 檔案位元組數。更大的視窗大小可以使您的系統更快地處理少量大型 pack 檔案。較小的視窗大小會因為對作業系統記憶體管理器的呼叫增加而對效能產生負面影響,但在訪問大量大型 pack 檔案時可能會提高效能。

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

支援常用的單位字尾 kmg

core.packedGitLimit

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

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

支援常用的單位字尾 kmg

core.deltaBaseCacheLimit

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

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

支援常用的單位字尾 kmg

core.bigFileThreshold

被視為“大檔案”的檔案大小,如下所述,這會改變許多 Git 命令的行為,以及此類檔案在倉庫中的儲存方式。預設值為 512 MiB。支援常用的單位字尾 kmg

超出配置限制的檔案將

  • 以緊縮(deflated)形式儲存在 packfile 中,不嘗試進行增量壓縮。

    設定此預設限制主要是為了考慮這種用例。有了它,大多數專案的原始碼和其他文字檔案將進行增量壓縮,但較大的二進位制媒體檔案則不會。

    儲存不帶增量壓縮的大檔案可以避免過度的記憶體使用,但會稍微增加磁碟使用量。

  • 將被視為標記為“二進位制”檔案(參見 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 目錄中查詢您的鉤子。將其設定為不同的路徑,例如 /etc/git/hooks,Git 將嘗試在該目錄中查詢您的鉤子,例如 /etc/git/hooks/pre-receive,而不是在 $GIT_DIR/hooks/pre-receive 中。

路徑可以是絕對路徑或相對路徑。相對路徑是相對於執行鉤子的目錄(參見 githooks[5] 的“DESCRIPTION”部分)。

當您希望集中配置 Git 鉤子而不是按每個倉庫配置時,或者作為對已更改預設鉤子的 init.templateDir 的更靈活和集中化的替代方案時,此配置變數非常有用。

您還可以透過將 core.hooksPath 設定為 /dev/null 來完全停用所有鉤子。這通常只建議專家使用者使用,並且可以按命令使用 git -c core.hooksPath=/dev/null ... 形式的配置引數來實現。

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 將行初始縮排部分中緊跟製表符之前的空格字元視為錯誤(預設啟用)。

  • indent-with-non-tab 將使用空格字元而非等效製表符縮排的行視為錯誤(預設不啟用)。

  • tab-in-indent 將行初始縮排部分中的製表符視為錯誤(預設不啟用)。

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

  • trailing-spaceblank-at-eolblank-at-eof 的簡寫。

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

  • tabwidth=<n> 表示一個製表符佔據多少個字元位置;這與 indent-with-non-tab 以及 Git 修復 tab-in-indent 錯誤時相關。預設製表符寬度為 8。允許的值為 1 到 63。

core.fsync

一個逗號分隔的列表,包含倉庫中在建立或修改時應透過 core.fsyncMethod 加固的元件。您可以透過在元件前加上 - 來停用任何元件的加固。未加固的專案在系統非正常關機時可能會丟失。除非您有特殊要求,否則建議您將此選項留空或選擇 committedaddedall 中的一個。

當遇到此配置時,元件集從平臺預設值開始,停用元件被移除,並新增額外元件。none 重置狀態,從而忽略平臺預設值。

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

  • none 清除 fsynced 元件集。

  • loose-object 加固以鬆散物件形式新增到倉庫中的物件。

  • pack 加固以 packfile 形式新增到倉庫中的物件。

  • pack-metadata 加固 packfile 點陣圖和索引。

  • 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 啟用一種模式,該模式使用僅寫入重新整理將多個更新暫存在磁盤迴寫快取中,然後在操作結束時對一個虛擬檔案進行一次完整的 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,以解決 Git for Windows 堅持使用其自己的 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 將讀取提交圖檔案(如果存在)以解析提交的圖結構。預設為 true。有關更多資訊,請參見 git-commit-graph[1]

core.useReplaceRefs

如果設定為 false,則行為如同在命令列上給出了 --no-replace-objects 選項。有關更多資訊,請參見 git[1]git-replace[1]

core.multiPackIndex

使用多 pack 索引檔案透過單個索引跟蹤多個 packfile。有關更多資訊,請參見 git-multi-pack-index[1]。預設為 true。

core.sparseCheckout

啟用“稀疏檢出”功能。有關更多資訊,請參見 git-sparse-checkout[1]

core.sparseCheckoutCone

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

core.abbrev

設定物件名稱的縮寫長度。如果未指定或設定為 "auto",則會根據倉庫中 packed 物件的近似數量計算一個合適的值,希望足以使縮寫物件名稱在一段時間內保持唯一。如果設定為 "no",則不進行縮寫,物件名稱以完整長度顯示。最小長度為 4。

core.maxTreeDepth

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

credential.helper

指定當需要使用者名稱或密碼憑據時要呼叫的外部助手;該助手可以查詢外部儲存以避擴音示使用者輸入憑據。這通常是憑據助手的名稱,可能帶有引數,但也可能是帶有引數的絕對路徑,或者如果前面帶有 !,則是 shell 命令。

請注意,可以定義多個助手。有關詳細資訊和示例,請參見 gitcredentials[7]

credential.interactive

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

credential.useHttpPath

獲取憑據時,將 http 或 https URL 的“路徑”部分視為重要。預設為 false。有關更多資訊,請參見 gitcredentials[7]

credential.sanitizePrompt

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

credential.protectProtocol

預設情況下,當 Git 與憑據助手通訊時,協議中不允許包含回車符。此設定允許使用者覆蓋此預設值。

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與工作區檔案進行比較時,不將僅統計資訊的更改視為已更改。相反,靜默執行git update-index --refresh以更新工作區中內容與索引中內容匹配的路徑的快取統計資訊。此選項預設為true。請注意,這僅影響git diff Porcelain(高階命令),而不影響git diff-files等底層diff命令。

diff.dirstat

一個逗號分隔的--dirstat引數列表,指定git-diff[1]及其相關命令的--dirstat選項的預設行為。這些預設值可以在命令列上被覆蓋(使用--dirstat=<param>,...)。當diff.dirstat未更改時,回退預設值為changes,noncumulative,3。可用的引數如下:

changes

透過計算從原始檔中刪除或新增到目標檔案中的行數來計算目錄統計數字。這會忽略檔案中純粹的程式碼移動量。換句話說,檔案中的行重新排列不會像其他更改那樣被計算在內。當未給定引數時,這是預設行為。

lines

透過執行常規的基於行的差異分析,並彙總刪除/新增的行數來計算目錄統計數字。(對於二進位制檔案,計算64位元組的塊,因為二進位制檔案沒有自然意義上的行)。這是一種比changes行為更昂貴的--dirstat行為,但它會將檔案內重新排列的行與其他更改一樣計算在內。結果輸出與您從其他--*stat選項獲得的結果一致。

files

透過計算更改檔案的數量來計算目錄統計數字。在目錄統計分析中,每個更改的檔案權重相等。這是計算成本最低的--dirstat行為,因為它根本不需要檢視檔案內容。

cumulative

子目錄中的更改也計入父目錄。請注意,使用cumulative時,報告的百分比總和可能超過100%。預設(非累積)行為可以透過noncumulative引數指定。

<limit>

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

示例:以下將計算更改的檔案,同時忽略更改檔案總量少於10%的目錄,並將子目錄計數累積到父目錄中:files,10,cumulative

diff.statNameWidth

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

diff.statGraphWidth

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

diff.context

生成差異時顯示<n>行上下文,而非預設的3行。此值會被-U選項覆蓋。

diff.interHunkContext

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

diff.external

如果設定此配置變數,則差異生成不使用內部差異機制,而是使用給定命令。可以使用GIT_EXTERNAL_DIFF環境變數覆蓋。該命令以git[1]中“Git差異”部分所述的引數呼叫。注意:如果您只想在檔案的子集上使用外部差異程式,您可能希望改用gitattributes[5]

diff.trustExitCode

如果此布林值設定為true,則diff.external命令預計在認為輸入檔案相等時返回退出程式碼0,在認為不同時返回1,就像diff(1)一樣。如果設定為false(預設值),則該命令預計無論是否相等都返回退出程式碼0。任何其他退出程式碼都會導致Git報告致命錯誤。

diff.ignoreSubmodules

設定--ignore-submodules的預設值。請注意,這僅影響git diff Porcelain(高階命令),而不影響git diff-files等底層diff命令。git checkoutgit switch在報告未提交的更改時也會遵循此設定。將其設定為all會停用通常由git commitgit statusstatus.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 物件 <a><b>

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,則啟用基本重新命名檢測。如果設定為copiescopy,Git 也會檢測複製。預設為true。請注意,這僅影響git-diff[1]git-log[1]git diff Porcelain(高階命令),而不影響git-diff-files[1]等底層命令。

diff.suppressBlankEmpty

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

diff.submodule

指定顯示子模組差異的格式。short格式僅顯示範圍開頭和結尾提交的名稱。log格式像git-submodule[1] summary一樣列出範圍內的提交。diff格式顯示子模組更改內容的內聯差異。預設為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

差異驅動程式應該用於識別hunk頭部的正則表示式。也可以使用內建模式。詳見gitattributes[5]

diff.<driver>.binary

將此選項設定為true,使差異驅動程式將檔案視為二進位制檔案。詳見gitattributes[5]

diff.<driver>.textconv

差異驅動程式應呼叫以生成檔案文字轉換版本的命令。轉換結果用於生成人類可讀的差異。詳見gitattributes[5]

diff.<driver>.wordRegex

差異驅動程式應該用於在行中分割單詞的正則表示式。詳見gitattributes[5]

diff.<driver>.cachetextconv

將此選項設定為true,使差異驅動程式快取文字轉換輸出。詳見gitattributes[5]

diff.indentHeuristic

將此選項設定為false以停用預設的啟發式演算法,該演算法會調整差異塊邊界以使補丁更易讀。

diff.algorithm

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

default
myers

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

minimal

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

patience

生成補丁時使用“patience diff”演算法。

histogram

此演算法擴充套件了 patience 演算法以“支援低出現率的常見元素”。

diff.wsErrorHighlight

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

diff.colorMoved

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

diff.colorMovedWS

當使用例如diff.colorMoved設定對移動的行進行著色時,此選項控制空格的處理模式。有關有效模式的詳細資訊,請參見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變數。

  • araxis

  • bc

  • codecompare

  • deltawalker

  • diffmerge

  • diffuse

  • ecmerge

  • emerge

  • examdiff

  • guiffy

  • gvimdiff

  • kdiff3

  • kompare

  • meld

  • nvimdiff

  • opendiff

  • p4merge

  • smerge

  • tkdiff

  • vimdiff

  • vscode

  • winmerge

  • xxdiff

difftool.<tool>.cmd

指定呼叫指定差異工具的命令。指定的命令將在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.*

除非另有說明,如果core.repositoryFormatVersion不是1,則指定擴充套件是錯誤的。詳見gitrepository-layout[5]

compatObjectFormat

指定要使用的相容雜湊演算法。可接受的值是sha1sha256。指定的值必須與extensions.objectFormat的值不同。這允許物件格式與此compatObjectFormat匹配的Git儲存庫之間進行客戶端級別的互操作性。特別是,當完全實現時,可以從物件格式與compatObjectFormat匹配的儲存庫進行推送和拉取。此外,除了使用objectFormat編碼的oid之外,還可以使用compatObjectFormat編碼的oid在本地指定物件。

noop

此擴充套件完全不改變git的行為。它僅用於測試format-1相容性。

由於歷史原因,無論core.repositoryFormatVersion設定如何,此擴充套件都受尊重。

noop-v1

此擴充套件完全不改變git的行為。它僅用於測試format-1相容性。

objectFormat

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

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

partialClone

啟用時,表示倉庫是使用部分克隆建立的(或後續執行了部分抓取),並且遠端可能省略了傳送某些不需要的物件。這樣的遠端被稱為“承諾遠端”,它承諾所有此類省略的物件將來都可以從它那裡抓取。

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

由於歷史原因,無論core.repositoryFormatVersion設定如何,此擴充套件都受尊重。

preciousObjects

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

由於歷史原因,無論core.repositoryFormatVersion設定如何,此擴充套件都受尊重。

refStorage

指定要使用的引用儲存格式。可接受的值是

  • files 表示帶有 packed-refs 的鬆散檔案。這是預設值。

  • reftable 表示 reftable 格式。此格式是實驗性的,其內部結構可能會更改。

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

relativeWorktrees

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

worktreeConfig

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

啟用此擴充套件時,必須小心將某些值從公共配置檔案移動到主工作樹的config.worktree檔案(如果存在)中

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

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

根據您對每個工作樹可定製的稀疏檢出設定的需求,調整core.sparseCheckoutcore.sparseCheckoutCone的位置也可能是有益的。預設情況下,git sparse-checkout內建命令會啟用此擴充套件,為每個工作樹分配這些配置值,並使用$GIT_DIR/info/sparse-checkout檔案獨立指定每個工作樹的稀疏性。詳見git-sparse-checkout[1]

+ 由於歷史原因,無論core.repositoryFormatVersion設定如何,此擴充套件都受尊重。

fastimport.unpackLimit

如果git-fast-import[1]匯入的物件數量低於此限制,則物件將被解包為鬆散物件檔案。但是,如果匯入的物件數量等於或超過此限制,則包將被儲存為一個包。從fast-import儲存包可以使匯入操作更快完成,尤其是在慢速檔案系統上。如果未設定,則使用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中底層的fetch)是否會遞迴抓取到已填充的子模組中。此選項可以設定為布林值或on-demand。設定為布林值時,如果設定為true,則fetch和pull的行為會無條件地遞迴到子模組中;如果設定為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,並且未設定refs/tags/*:refs/tags/*引用規範,fetch將自動錶現為提供了該規範進行修剪。這允許同時設定此選項和fetch.prune以保持與上游引用的一對一對映。另請參閱remote.<name>.pruneTagsgit-fetch[1]的PRUNING部分。

fetch.all

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

fetch.output

控制引用更新狀態的列印方式。有效值為fullcompact。預設值為full。詳見git-fetch[1]的OUTPUT部分。

fetch.negotiationAlgorithm

控制在協商伺服器要傳送的 packfile 內容時,如何傳送有關本地倉庫中提交的資訊。設定為“consecutive”以使用遍歷連續提交併檢查每個提交的演算法。設定為“skipping”以使用跳過提交以更快收斂的演算法,但這可能導致 packfile 大於必要的大小;或者設定為“noop”以完全不傳送任何資訊,這幾乎肯定會導致 packfile 大於必要的大小,但會跳過協商步驟。設定為“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 命令從遠端下載 packfile 後寫入提交圖。使用 --split 選項,大多數執行會在現有提交圖檔案之上建立一個非常小的提交圖檔案。偶爾,這些檔案會合並,寫入可能需要更長時間。擁有更新的提交圖檔案有助於許多 Git 命令的效能,包括 git merge-basegit push -fgit log --graph。預設為 false。

fetch.bundleURI

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

如果您修改此值並且您的倉庫具有 fetch.bundleCreationToken 值,則在從新的 bundle URI 抓取之前,請刪除該 fetch.bundleCreationToken 值。

fetch.bundleCreationToken

當使用 fetch.bundleURI 從使用“creationToken”啟發式方法的 bundle 列表中增量抓取時,此配置值儲存已下載 bundle 的最大 creationToken 值。如果公佈的 creationToken 不嚴格大於此值,則此值用於阻止將來下載 bundle。

建立令牌值由提供特定 bundle 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-編碼”(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,請使用該字面值。

此配置可以多次指定,以允許包含多個備註引用。在這種情況下,其行為類似於傳入多個 --[no-]notes[=] 選項。也就是說,值為 true 將顯示預設備註,值為 <ref> 也將顯示該備註引用的備註,而值為 false 將否定先前的配置並且不顯示備註。

例如,

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

將只顯示來自 refs/notes/bar 的備註。

format.mboxrd

一個布林值,當使用 --stdout 以轉義“^>+From ”行時,它會啟用健壯的“mboxrd”格式。

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 發出警告。

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

fsck.skipList

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

當一個已建立的專案即使早期提交包含可以安全忽略的錯誤(例如無效的提交者電子郵件地址)也應被接受時,此功能非常有用。注意:損壞的物件不能透過此設定跳過。

fsck.<msg-id> 類似,此變數也有相應的 receive.fsck.skipListfetch.fsck.skipList 變體。

color.uicore.editor 等變數不同,receive.fsck.skipListfetch.fsck.skipList 變數在未設定時不會回退到 fsck.skipList 配置。要在不同情況下統一配置相同的 fsck 設定,所有這三個變數必須設定為相同的值。

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

fsmonitor.allowRemote

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

fsmonitor.socketDir

此 Mac OS 特定的選項,如果設定,指定用於在 fsmonitor 守護程序和各種 Git 命令之間進行通訊的 Unix 域套接字建立的目錄。該目錄必須位於本地 Mac OS 檔案系統上。僅當 core.fsmonitor 設定為 true 時才生效。

gc.aggressiveDepth

git gc --aggressive 使用的 delta 壓縮演算法中使用的深度引數。預設值為 50,這是在不使用 --aggressive--depth 選項的預設值。

詳見 git-repack[1]--depth 選項的文件。

gc.aggressiveWindow

git gc --aggressive 使用的 delta 壓縮演算法中使用的視窗大小引數。預設值為 250,這比預設的 --window 值 10 激進得多。

詳見 git-repack[1]--window 選項的文件。

gc.auto

當倉庫中鬆散物件數量大約超過此值時,git gc --auto 將打包它們。一些 Porcelain 命令會不時使用此命令執行輕量級垃圾回收。預設值為 6700。

將其設定為 0 不僅會停用基於鬆散物件數量的自動打包,還會停用 git gc --auto 在其他情況下用於確定是否有工作要做的任何其他啟發式方法,例如 gc.autoPackLimit

gc.autoPackLimit

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

請參閱下面的 gc.bigPackThreshold 配置變數。使用時,它將影響自動打包限制的工作方式。

gc.autoDetach

如果系統支援,使 git gc --auto 立即返回並在後臺執行。預設為 true。此配置變數在未設定 maintenance.autoDetach 時充當備用。

gc.bigPackThreshold

如果非零,當執行 git gc 時,所有大於此限制的非 cruft 包都將被保留。這與 --keep-largest-pack 非常相似,只是所有達到閾值的非 cruft 包都被保留,而不僅僅是最大的包。預設為零。支援常見的單位字尾 kmg

請注意,如果保留的包數量超過 gc.autoPackLimit,此配置變數將被忽略,除基礎包外的所有包都將被重新打包。在此之後,包的數量應低於 gc.autoPackLimit,並且 gc.bigPackThreshold 應再次生效。

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

gc.writeCommitGraph

如果為 true,則在執行 git-gc[1] 時,gc 將重寫提交圖檔案。當使用 git gc --auto 時,如果需要進行清理,提交圖將更新。預設為 true。詳見 git-commit-graph[1]

gc.logExpiry

如果檔案 gc.log 存在,則 git gc --auto 將列印其內容並以狀態零退出,而不是執行,除非該檔案比 gc.logExpiry 舊。預設為“1.day”。有關指定其值的更多方式,請參閱 gc.pruneExpire

gc.packRefs

在倉庫中執行 git pack-refs 會使其無法被 Git 1.5.1.2 之前的版本透過 HTTP 等“啞”傳輸克隆。此變數決定 git gc 是否執行 git pack-refs。可以將其設定為 notbare 以在所有非裸倉庫中啟用它,或者將其設定為布林值。預設為 true

gc.cruftPacks

將不可達物件儲存在 cruft 包中(參見 git-repack[1]),而不是作為鬆散物件。預設為 true

gc.maxCruftSize

重新打包時限制新 cruft 包的大小。除了 --max-cruft-size 之外,如果也指定了此選項,則命令列選項優先。詳見 git-repack[1]--max-cruft-size 選項。

gc.pruneExpire

當執行 git gc 時,它將呼叫 prune --expire 2.weeks.ago(如果透過 gc.cruftPacks--cruft 使用 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”)時,此設定僅適用於匹配該模式的引用。

gc.reflogExpireUnreachable
gc.<pattern>.reflogExpireUnreachable

git reflog expire 會刪除早於此時間且無法從當前尖端到達的 reflog 條目;預設為 30 天。值“now”會立即使所有條目過期,而“never”會完全禁止過期。中間帶有“<pattern>”(例如“refs/stash”)時,此設定僅適用於匹配該模式的引用。

這些型別的條目通常是使用 git commit --amendgit rebase 的結果,並且是修訂或變基發生之前的提交。由於這些更改不是當前專案的一部分,大多數使用者會希望它們更快過期,這就是為什麼預設值比 gc.reflogExpire 更激進的原因。

gc.recentObjectsHook

在考慮是否刪除物件時(無論是在生成 cruft 包時還是將不可達物件儲存為鬆散物件時),使用 shell 執行指定的命令。將其輸出解釋為 Git 將視為“最近”的物件 ID,無論其年齡如何。透過將其修改時間視為“現在”,輸出中提及的任何物件(及其後代)都將被保留,無論其真實年齡如何。

輸出必須每行包含一個十六進位制物件 ID,且不得包含其他內容。在倉庫中找不到的物件將被忽略。支援多個鉤子,但所有鉤子都必須成功退出,否則操作(無論是生成 cruft 包還是解包不可達物件)將被中止。

gc.repackFilter

重新打包時,使用指定的過濾器將某些物件移動到單獨的 packfile 中。詳見 git-repack[1]--filter=<filter-spec> 選項。

gc.repackFilterTo

在重新打包和使用過濾器時(參見 gc.repackFilter),指定的位置將用於建立包含過濾掉的物件的 packfile。警告: 指定的位置應該可訪問,例如使用 Git 備用機制,否則 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

將此字串附加到每個提交訊息中。設定為空字串以停用此功能。預設為“透過 git-CVS 模擬器”。

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 金鑰的自動化系統在全球位置生成。

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

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

使用帶有 cert-authority 選項的 SSH CA 金鑰(詳見 ssh-keygen(1) 的“CERTIFICATES”部分)也是有效的。

gpg.ssh.revocationFile

SSH KRL 或已撤銷公鑰列表(不帶主體字首)。詳見 ssh-keygen(1)。如果在此檔案中找到公鑰,則該公鑰將始終被視為信任級別為“never”,並且簽名將顯示為無效。

grep.lineNumber

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

grep.column

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

grep.patternType

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

grep.extendedRegexp

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

grep.threads

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

grep.fullName

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

grep.fallbackToNoIndex

如果設定為 true,則當 git 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] 在執行 fetch 時應修剪遠端跟蹤分支,則為“true”。預設值為“false”。

gui.trustmtime

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

gui.spellingDictionary

指定 git-gui[1] 中用於拼寫檢查提交訊息的字典。當設定為“none”時,拼寫檢查將關閉。

gui.fastCopyBlame

如果為 true,git gui blame 將使用 -C 而不是 -C -C 進行原始位置檢測。這使得在大型儲存庫上的 blame 操作顯著加快,代價是副本檢測不那麼徹底。

gui.copyBlameThreshold

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

gui.blamehistoryctx

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

guitool.<name>.cmd

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

guitool.<name>.needsFile

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

guitool.<name>.noConsole

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

guitool.<name>.noRescan

工具執行完成後,不重新掃描工作目錄以查詢更改。

guitool.<name>.confirm

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

guitool.<name>.argPrompt

向用戶請求一個字串引數,並透過 ARGS 環境變數將其傳遞給工具。由於請求引數意味著確認,因此如果啟用此選項,confirm 選項將無效。如果選項設定為 trueyes1,對話方塊將使用內建的通用提示;否則將使用變數的確切值。

guitool.<name>.revPrompt

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

guitool.<name>.revUnmerged

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

guitool.<name>.title

指定提示對話方塊的標題。預設是工具名稱。

guitool.<name>.prompt

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

help.browser

指定將用於以 web 格式顯示幫助的瀏覽器。詳見 git-help[1]

help.format

覆蓋 git-help[1] 使用的預設幫助格式。支援 maninfowebhtml 值。man 是預設值。webhtml 相同。

help.autoCorrect

如果 Git 檢測到拼寫錯誤並且能夠識別出一個與錯誤類似的有效命令,Git 將嘗試建議正確的命令,甚至自動執行建議。可能的配置值有:

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

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

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

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

  • "prompt": 顯示建議並提示確認是否執行命令。

help.htmlPath

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

http.proxy

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

無論如何配置,任何代理都必須完全透明,不得以任何方式修改、轉換或緩衝請求或響應。已知不完全透明的代理會導致 Git 出現各種形式的故障。

http.proxyAuthMethod

設定用於對 HTTP 代理進行身份驗證的方法。這僅在配置的代理字串包含使用者名稱部分(即 user@hostuser@host:port 形式)時生效。這可以在每個遠端倉庫的基礎上被覆蓋;詳見 remote.<name>.proxyAuthMethod。兩者都可以透過 GIT_HTTP_PROXY_AUTHMETHOD 環境變數覆蓋。可能的值有:

  • anyauth - 自動選擇合適的認證方法。假定代理以 407 狀態碼和至少一個包含支援的認證方法的 Proxy-authenticate 頭部來響應未經認證的請求。這是預設值。

  • basic - HTTP 基本認證

  • digest - HTTP Digest 認證;這可以防止密碼以明文形式傳輸到代理。

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

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

http.proxySSLCert

儲存用於 HTTPS 代理認證的客戶端證書檔案的路徑名。可以透過 GIT_PROXY_SSL_CERT 環境變數覆蓋。

http.proxySSLKey

儲存用於 HTTPS 代理認證的私鑰檔案的路徑名。可以透過 GIT_PROXY_SSL_KEY 環境變數覆蓋。

http.proxySSLCertPasswordProtected

啟用 Git 對代理 SSL 證書的密碼提示。否則,如果證書或私鑰是加密的,OpenSSL 可能會多次提示使用者。可以透過 GIT_PROXY_SSL_CERT_PASSWORD_PROTECTED 環境變數覆蓋。

http.proxySSLCAInfo

包含證書束的檔案的路徑名,該證書束在使用 HTTPS 代理時應用於驗證代理。可以透過 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(s)。第二種格式清除該 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 進行 fetch 或 push 時是否驗證 SSL 證書。預設為 true。可以透過 GIT_SSL_NO_VERIFY 環境變數覆蓋。

http.sslCert

在使用 HTTPS 進行 fetch 或 push 時包含 SSL 證書的檔案。可以透過 GIT_SSL_CERT 環境變數覆蓋。

http.sslKey

在使用 HTTPS 進行 fetch 或 push 時包含 SSL 私鑰的檔案。可以透過 GIT_SSL_KEY 環境變數覆蓋。

http.sslCertPasswordProtected

啟用 Git 對 SSL 證書的密碼提示。否則,如果證書或私鑰是加密的,OpenSSL 可能會多次提示使用者。可以透過 GIT_SSL_CERT_PASSWORD_PROTECTED 環境變數覆蓋。

http.sslCAInfo

在使用 HTTPS 進行 fetch 或 push 時,包含用於驗證對等方的證書檔案。可以透過 GIT_SSL_CAINFO 環境變數覆蓋。

http.sslCAPath

包含 CA 證書檔案的路徑,在使用 HTTPS 進行 fetch 或 push 時,這些證書用於驗證對等方。可以透過 GIT_SSL_CAPATH 環境變數覆蓋。

http.sslBackend

要使用的 SSL 後端名稱(例如“openssl”或“schannel”)。如果 cURL 缺少在執行時選擇 SSL 後端的功能,則此選項將被忽略。

http.sslCertType

在使用 HTTPS 進行 fetch 或 push 時使用的客戶端證書型別。使用 openssl 或 gnutls 後端時支援“PEM”、“DER”。“P12”在“openssl”、“schannel”、“securetransport”和 gnutls 8.11+ 上受支援。另請參閱 libcurl CURLOPT_SSLCERTTYPE。可以透過 GIT_SSL_CERT_TYPE 環境變數覆蓋。

http.sslKeyType

在使用 HTTPS 進行 fetch 或 push 時使用的客戶端私鑰型別。(例如“PEM”、“DER”或“ENG”)。僅在使用“openssl”後端時適用。“DER”不與 openssl 一起支援。當設定為“ENG”以透過 PKCS#11 令牌進行認證時特別有用,`sslCert` 選項中包含 PKCS#11 URL。另請參閱 libcurl CURLOPT_SSLKEYTYPE。可以透過 GIT_SSL_KEY_TYPE 環境變數覆蓋。

http.schannelCheckRevoke

當 http.sslBackend 設定為“schannel”時,用於在 cURL 中強制執行或停用證書吊銷檢查。如果未設定,則預設為 true。僅當 Git 持續出錯且訊息與檢查證書的吊銷狀態有關時,才需要停用此功能。如果 cURL 缺少在執行時設定相關 SSL 選項的功能,則此選項將被忽略。

http.schannelUseSSLCAInfo

自 cURL v7.60.0 起,Secure Channel 後端可以使用透過 http.sslCAInfo 提供的證書包,但這會覆蓋 Windows 證書儲存。由於預設情況下不希望這樣做,Git 將告訴 cURL 在透過 http.sslBackend 配置 schannel 後端時,預設不使用該證書包,除非 http.schannelUseSSLCAInfo 覆蓋此行為。

http.pinnedPubkey

HTTPS 服務的公鑰。它可以是 PEM 或 DER 編碼的公鑰檔名,也可以是 sha256// 開頭後跟公鑰的 base64 編碼 sha256 雜湊的字串。另請參閱 libcurl CURLOPT_PINNEDPUBLICKEY。如果設定了此選項但 cURL 不支援,Git 將會報錯退出。

http.sslTry

嘗試在使用常規 FTP 協議連線時使用 AUTH SSL/TLS 和加密資料傳輸。如果 FTP 伺服器出於安全原因需要此功能,或者您希望在遠端 FTP 伺服器支援時安全連線,則可能需要此功能。預設為 false,因為它可能會在配置錯誤的伺服器上觸發證書驗證錯誤。

http.maxRequests

並行啟動的 HTTP 請求數量。可以透過 GIT_HTTP_MAX_REQUESTS 環境變數覆蓋。預設值為 5。

http.minSessions

在請求之間要保留的 curl 會話數(跨槽計數)。它們不會在呼叫 `http_cleanup()` 之前透過 `curl_easy_cleanup()` 結束。如果未定義 `USE_CURL_MULTI`,此值將被限制為 1。預設為 1。

http.postBuffer

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

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

http.lowSpeedLimit
http.lowSpeedTime

如果 HTTP 傳輸速度(位元組/秒)低於 http.lowSpeedLimit 且持續時間超過 http.lowSpeedTime 秒,則傳輸將被中止。可被 GIT_HTTP_LOW_SPEED_LIMITGIT_HTTP_LOW_SPEED_TIME 環境變數覆蓋。

http.keepAliveIdle

指定在傳送 TCP 保活探測(如果作業系統支援)之前,空閒連線上等待的秒數。如果未設定,則使用 curl 的預設值。可被 GIT_HTTP_KEEPALIVE_IDLE 環境變數覆蓋。

http.keepAliveInterval

指定在 TCP 保活探測之間等待的秒數(如果作業系統支援)。如果未設定,則使用 curl 的預設值。可被 GIT_HTTP_KEEPALIVE_INTERVAL 環境變數覆蓋。

http.keepAliveCount

指定在放棄並終止連線之前傳送的 TCP 保活探測次數(如果作業系統支援)。如果未設定,則使用 curl 的預設值。可被 GIT_HTTP_KEEPALIVE_COUNT 環境變數覆蓋。

http.noEPSV

一個布林值,用於停用 curl 使用 EPSV FTP 命令。這對於一些“簡陋的”FTP 伺服器很有幫助,因為它們不支援 EPSV 模式。可被 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. 方案(例如,https://example.com/ 中的 https)。此欄位必須在配置鍵和 URL 之間精確匹配。

  2. 主機/域名(例如,https://example.com/ 中的 example.com)。此欄位必須在配置鍵和 URL 之間匹配。可以在主機名中指定 * 以匹配此級別下的所有子域名。例如,https://*.example.com/ 將匹配 https://foo.example.com/,但不匹配 https://foo.bar.example.com/

  3. 埠號(例如,http://example.com:8080/ 中的 8080)。此欄位必須在配置鍵和 URL 之間精確匹配。省略的埠號在匹配前會自動轉換為該方案的正確預設值。

  4. 路徑(例如,https://example.com/repo.git 中的 repo.git)。配置鍵的路徑欄位必須與 URL 的路徑欄位精確匹配,或者作為斜槓分隔路徑元素的字首匹配。這意味著路徑為 foo/ 的配置鍵匹配 URL 路徑 foo/bar。字首只能在斜槓(/)邊界處匹配。較長的匹配優先(因此,路徑為 foo/bar 的配置鍵比僅路徑為 foo/ 的配置鍵更能匹配 URL 路徑 foo/bar)。

  5. 使用者名稱(例如,https://user@example.com/repo.git 中的 user)。如果配置鍵包含使用者名稱,它必須與 URL 中的使用者名稱精確匹配。如果配置鍵沒有使用者名稱,則該配置鍵將匹配任何使用者名稱的 URL(包括沒有使用者名稱的),但優先順序低於包含使用者名稱的配置鍵。

上述列表按優先順序遞減排序;匹配配置鍵路徑的 URL 優先於匹配其使用者名稱的 URL。例如,如果 URL 是 https://user@example.com/foo/bar,則配置鍵 https://example.com/foo 的匹配將優先於配置鍵 https://user@example.com 的匹配。

所有 URL 在嘗試匹配之前都會進行標準化處理(密碼部分,如果嵌入在 URL 中,在匹配時始終被忽略),以便拼寫不同但等效的 URL 也能正確匹配。環境變數設定始終覆蓋任何匹配項。用於匹配的 URL 是直接提供給 Git 命令的 URL。這意味著因重定向而訪問的任何 URL 不參與匹配。

i18n.commitEncoding

提交訊息的字元編碼;Git 本身並不關心,但此資訊在從電子郵件匯入提交或在 gitk 圖形歷史瀏覽器中(以及未來可能在其他地方或在其他瓷器中)是必需的。參見 git-mailinfo[1]。預設為 utf-8

i18n.logOutputEncoding

執行 git log 和相關命令時,提交訊息轉換為的字元編碼。

imap.folder

放置郵件的資料夾,通常是草稿資料夾。例如:“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 將補丁作為純文字、固定格式的電子郵件傳送。預設為 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 時,允許使用者在互動式命令中透過單個按鍵(即無需按回車鍵)提供單字母輸入。目前,這用於 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

列印日誌命令顯示的任何提交的引用名稱。如果指定 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

增強型 mailmap 檔案的位置。位於倉庫根目錄的預設 mailmap 首先載入,然後是此變數指向的 mailmap 檔案。mailmap 檔案的位置可以在倉庫子目錄中,也可以在倉庫本身之外。參見 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

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

maintenance.<task>.schedule

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

maintenance.commit-graph.auto

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

maintenance.loose-objects.auto

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

maintenance.loose-objects.batchSize

此整數配置選項控制在 loose-objects 任務期間寫入包檔案中的鬆散物件的最大數量。預設值為五萬。使用值 0 表示沒有限制。

maintenance.incremental-repack.auto

此整數配置選項控制 incremental-repack 任務作為 git maintenance run --auto 的一部分應該多久執行一次。如果為零,則 incremental-repack 任務將不會與 --auto 選項一起執行。負值將強制任務每次都執行。否則,正值意味著當不在多包索引中的包檔案數量至少為 maintenance.incremental-repack.auto 的值時,命令應該執行。預設值為 10。

maintenance.reflog-expire.auto

此整數配置選項控制 reflog-expire 任務作為 git maintenance run --auto 的一部分應該多久執行一次。如果為零,則 reflog-expire 任務將不會與 --auto 選項一起執行。負值將強制任務每次都執行。否則,正值意味著當“HEAD”reflog 中過期 reflog 條目的數量至少為 maintenance.loose-objects.auto 的值時,命令應該執行。預設值為 100。

maintenance.rerere-gc.auto

此整數配置選項控制 rerere-gc 任務作為 git maintenance run --auto 的一部分應該多久執行一次。如果為零,則 rerere-gc 任務將不會與 --auto 選項一起執行。負值將強制任務每次都執行。否則,任何正值都意味著當“rr-cache”目錄存在並且至少有一個條目時,命令就會執行,無論它是否陳舊。這種啟發式方法未來可能會完善。預設值為 1。

maintenance.worktree-prune.auto

此整數配置選項控制 worktree-prune 任務作為 git maintenance run --auto 的一部分應該多久執行一次。如果為零,則 worktree-prune 任務將不會與 --auto 選項一起執行。負值將強制任務每次都執行。否則,正值意味著當可清理的工作樹數量超過該值時,命令應該執行。預設值為 1。

man.viewer

指定可用於以 man 格式顯示幫助的程式。參見 git-help[1]

man.<tool>.cmd

指定呼叫指定 man 瀏覽器的命令。指定的命令在 shell 中執行,並將 man 頁面作為引數傳遞。(參見 git-help[1]。)

man.<tool>.path

覆蓋用於以 man 格式顯示幫助的給定工具的路徑。參見 git-help[1]

merge.conflictStyle

指定合併時衝突的塊寫入工作樹檔案的樣式。預設是“merge”,它顯示 <<<<<<< 衝突標記,一方所做的更改,一個 ======= 標記,另一方所做的更改,然後是一個 >>>>>>> 標記。另一種樣式“diff3”會新增一個 ||||||| 標記和 ======= 標記之前的原始文字。“merge”樣式傾向於產生比 diff3 更小的衝突區域,這既因為排除了原始文字,也因為當兩邊的部分行匹配時,它們只是被從衝突區域中移除。另一種替代樣式“zdiff3”類似於 diff3,但當匹配行出現在衝突區域的開頭或結尾附近時,它會從衝突區域中移除兩邊的匹配行。

merge.defaultToUpstream

如果呼叫 `merge` 時未帶任何提交引數,則透過使用當前分支的遠端跟蹤分支中儲存的最新觀察值,合併為當前分支配置的上游分支。系統會查閱由 branch.<current-branch>.remote 指定的遠端倉庫中,由 branch.<current branch>.merge 命名的分支的值,然後透過 remote.<remote>.fetch 將它們對映到相應的遠端跟蹤分支,併合並這些跟蹤分支的尖端。預設為 true。

merge.ff

預設情況下,當合並一個作為當前提交後代的提交時,Git 不會建立額外的合併提交。相反,當前分支的尖端會進行快進。當設定為 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

透過將匹配整合(integration)分支名稱的 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 是否檢測目錄重新命名,這會影響在歷史記錄的一側,當目錄被重新命名後,另一側新增到該目錄的新檔案在合併時如何處理。可能的值為:

false

停用目錄重新命名檢測,這意味著此類新檔案將保留在舊目錄中。

true

啟用目錄重新命名檢測,這意味著此類新檔案將移動到新目錄中。

conflict

將為此類路徑報告衝突。

如果 merge.renamesfalse,則 merge.directoryRenames 將被忽略並被視為 false。預設為 conflict

merge.renormalize

告訴 Git 倉庫中檔案的規範表示隨時間發生了變化(例如,早期的提交記錄文字檔案使用 CRLF 行尾,但最近的提交使用 LF 行尾)。在此類倉庫中,對於每個需要三向內容合併的檔案,Git 可以在執行合併之前將提交中記錄的資料轉換為規範形式,以減少不必要的衝突。有關更多資訊,請參閱 gitattributes[5] 中“使用不同簽入/簽出屬性合併分支”一節。

merge.stat

是否在合併結束時列印 ORIG_HEAD 和合並結果之間的差異統計。預設為 true。

merge.autoStash

當設定為 true 時,在操作開始前自動建立一個臨時暫存條目,並在操作結束後應用它。這意味著你可以在一個有改動的(dirty)工作樹上執行合併。然而,請謹慎使用:成功合併後的最終暫存應用可能會導致不小的衝突。此選項可以透過 git-merge[1]--no-autostash--autostash 選項覆蓋。預設為 false

merge.tool

控制 git-mergetool[1] 使用哪個合併工具。下面的列表顯示了有效的內建值。任何其他值都被視為自定義合併工具,並且需要定義相應的 mergetool.<tool>.cmd 變數。

merge.guitool

當指定 -g/--gui 標誌時,控制 git-mergetool[1] 使用哪個合併工具。下面的列表顯示了有效的內建值。任何其他值都被視為自定義合併工具,並且需要定義相應的 mergetool.<guitool>.cmd 變數。

  • araxis

  • bc

  • codecompare

  • deltawalker

  • diffmerge

  • diffuse

  • ecmerge

  • emerge

  • examdiff

  • guiffy

  • gvimdiff

  • kdiff3

  • meld

  • nvimdiff

  • opendiff

  • p4merge

  • smerge

  • tkdiff

  • tortoisemerge

  • vimdiff

  • vscode

  • winmerge

  • xxdiff

merge.verbosity

控制遞迴合併策略顯示輸出的數量。級別 0 除了在檢測到衝突時的最終錯誤訊息外,不輸出任何內容。級別 1 只輸出衝突,級別 2 輸出衝突和檔案更改。級別 5 及以上輸出除錯資訊。預設是級別 2。可以透過 GIT_MERGE_VERBOSITY 環境變數覆蓋。

merge.<driver>.name

為自定義的低階合併驅動程式定義一個人類可讀的名稱。詳情請參閱 gitattributes[5]

merge.<driver>.driver

定義實現自定義低階合併驅動程式的命令。詳情請參閱 gitattributes[5]

merge.<driver>.recursive

指定在共同祖先之間執行內部合併時要使用的低階合併驅動程式。詳情請參閱 gitattributes[5]

mergetool.<tool>.path

覆蓋給定工具的路徑。當你的工具不在 $PATH 中時,這很有用。

mergetool.<tool>.cmd

指定呼叫指定合併工具的命令。指定的命令將在 shell 中評估,並提供以下變數:BASE 是包含待合併檔案的共同基礎的臨時檔名稱(如果可用);LOCAL 是包含當前分支上檔案內容的臨時檔名稱;REMOTE 是包含來自被合併分支檔案內容的臨時檔名稱;MERGED 包含合併工具應寫入成功合併結果的檔名稱。

mergetool.<tool>.hideResolved

允許使用者為特定工具覆蓋全域性 mergetool.hideResolved 值。有關完整描述,請參閱 mergetool.hideResolved

mergetool.<tool>.trustExitCode

對於自定義合併命令,指定是否可以使用合併命令的退出程式碼來判斷合併是否成功。如果此選項未設定為 true,則會檢查合併目標檔案的時間戳,如果檔案已更新,則假定合併成功;否則,系統會提示使用者指示合併是否成功。

mergetool.meld.hasOutput

較舊版本的 meld 不支援 --output 選項。Git 將嘗試透過檢查 meld --help 的輸出來檢測 meld 是否支援 --output。配置 mergetool.meld.hasOutput 將使 Git 跳過這些檢查並使用配置的值。將 mergetool.meld.hasOutput 設定為 true 會告訴 Git 無條件使用 --output 選項,而 false 則避免使用 --output

mergetool.meld.useAutoMerge

當給定 --auto-merge 時,meld 將自動合併所有無衝突部分,突出顯示衝突部分,並等待使用者決定。將 mergetool.meld.useAutoMerge 設定為 true 會告訴 Git 無條件地將 --auto-merge 選項與 meld 一起使用。將此值設定為 auto 會使 Git 檢測是否支援 --auto-merge,並且僅在可用時才使用 --auto-merge。值為 false 則完全避免使用 --auto-merge,這也是預設值。

mergetool.<variant>.layout

配置 vimdiff 的 <variant> 的分窗佈局,其中 <variant> 可以是 vimdiffnvimdiffgvimdiff 中的任意一個。當使用 --tool=<variant>(或如果 merge.tool 配置為 <variant> 則不帶 --tool)啟動 git mergetool 時,Git 將查閱 mergetool.<variant>.layout 以確定工具的佈局。如果特定變體的配置不可用,則使用 vimdiff 的作為備用。如果該備用也不可用,則將使用包含 4 個視窗的預設佈局。要配置佈局,請參閱 git-mergetool[1] 中的 BACKEND SPECIFIC HINTS(後端特定提示)部分。

mergetool.hideResolved

在合併過程中,Git 會自動解決儘可能多的衝突,並寫入包含衝突標記的 $MERGED 檔案,標記那些它無法解決的衝突;$LOCAL$REMOTE 通常是 Git 解決衝突前的檔案版本。此標誌會導致 $LOCAL$REMOTE 被覆蓋,以便只將未解決的衝突呈現給合併工具。可以透過 mergetool.<tool>.hideResolved 配置變數按工具進行配置。預設為 false

mergetool.keepBackup

執行合併後,帶有衝突標記的原始檔案可以儲存為帶有 .orig 副檔名的檔案。如果此變數設定為 false,則此檔案不會保留。預設為 true(即保留備份檔案)。

mergetool.keepTemporaries

呼叫自定義合併工具時,Git 會使用一組臨時檔案傳遞給該工具。如果工具返回錯誤且此變數設定為 true,則這些臨時檔案將被保留;否則,它們將在工具退出後被移除。預設為 false

mergetool.writeToTemp

預設情況下,Git 會將衝突檔案的臨時 BASELOCALREMOTE 版本寫入工作樹。當設定為 true 時,Git 將嘗試為這些檔案使用一個臨時目錄。預設為 false

mergetool.prompt

在每次呼叫合併解決程式之前提示。

mergetool.guiDefault

設定為 true 以預設使用 merge.guitool(等同於指定 --gui 引數),或者設定為 auto 以根據是否存在 DISPLAY 環境變數值來選擇 merge.guitoolmerge.tool。預設值為 false,此時必須顯式提供 --gui 引數才能使用 merge.guitool

notes.mergeStrategy

解決註解(notes)衝突時預設選擇哪種合併策略。必須是 manualourstheirsunioncat_sort_uniq 之一。預設為 manual。有關每種策略的更多資訊,請參閱 git-notes[1] 的“NOTES MERGE STRATEGIES”(註解合併策略)一節。

此設定可以透過向 git-notes[1] 傳遞 --strategy 選項來覆蓋。

notes.<name>.mergeStrategy

將註解合併到 refs/notes/<name> 時選擇哪種合併策略。這會覆蓋更通用的 notes.mergeStrategy。有關可用策略的更多資訊,請參閱 git-notes[1] 的“NOTES MERGE STRATEGIES”(註解合併策略)一節。

notes.displayRef

在使用 git log 系列命令顯示提交訊息時,除了由 core.notesRefGIT_NOTES_REF 設定的預設值外,從哪個引用(或多個引用,如果使用了 glob 或指定了多次)讀取註解。

此設定可以透過 GIT_NOTES_DISPLAY_REF 環境變數覆蓋,該變數必須是一個以冒號分隔的引用或 glob 列表。

對於不存在的引用將發出警告,但與任何引用不匹配的 glob 將被靜默忽略。

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

core.notesRef 的有效值(可能被 GIT_NOTES_REF 覆蓋)也會隱式新增到要顯示的引用列表中。

notes.rewrite.<command>

當使用 <command>(目前是 amendrebase)重寫提交時,如果此變數為 false,則 Git 不會將註解從原始提交複製到重寫後的提交。預設為 true。另請參閱下面的 notes.rewriteRef

此設定可以透過 GIT_NOTES_REWRITE_REF 環境變數覆蓋,該變數必須是一個以冒號分隔的引用或 glob 列表。

notes.rewriteMode

在重寫期間複製註解時(參見 notes.rewrite.<command> 選項),確定如果目標提交已有註解該如何處理。必須是 overwrite(覆蓋)、concatenate(連線)、cat_sort_uniqignore(忽略)之一。預設為 concatenate

此設定可以透過 GIT_NOTES_REWRITE_MODE 環境變數覆蓋。

notes.rewriteRef

在重寫期間複製備註時,指定(完全限定的)要複製備註的引用。可以是一個 glob,在這種情況下,所有匹配引用中的備註都將被複制。您也可以多次指定此配置。

沒有預設值;您必須配置此變數才能啟用備註重寫。將其設定為 refs/notes/commits 以啟用預設提交備註的重寫。

可以透過 GIT_NOTES_REWRITE_REF 環境變數覆蓋。有關其格式的進一步描述,請參見上面的 notes.rewrite.<command>

pack.window

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

pack.depth

當命令列未指定最大深度時,git-pack-objects[1] 使用的最大增量深度。預設為 50。最大值為 4095。

pack.windowMemory

當命令列未指定限制時,git-pack-objects[1] 中每個執行緒用於包視窗記憶體的最大記憶體消耗量。該值可以後綴“k”、“m”或“g”。如果未配置(或顯式設定為 0),則沒有限制。

pack.compression

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

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

pack.allowPackReuse

當為 true 或 "single" 且啟用可達性點陣圖時,pack-objects 將嘗試按原樣傳送點陣圖包檔案的部分內容。當為 "multi" 且多包可達性點陣圖可用時,pack-objects 將嘗試傳送 MIDX 中所有包的部分內容。

如果只有一個包點陣圖可用,並且 pack.allowPackReuse 設定為 "multi",則僅重用點陣圖包檔案的部分內容。這可以減少服務 fetch 時的記憶體和 CPU 使用量,但可能會導致傳送略大的包。預設為 true。

pack.island

一個擴充套件的正則表示式,用於配置一組增量島。詳情請參閱 git-pack-objects[1] 中的“DELTA ISLANDS”(增量島)部分。

pack.islandCore

指定一個島嶼名稱,其物件將首先被打包。這會在一個包的前面建立一種偽包,以便指定島嶼中的物件能更快地複製到應提供給請求這些物件的使用者的任何包中。實際上,這意味著指定的島嶼可能對應於倉庫中最常被克隆的內容。另請參閱 git-pack-objects[1] 中的“DELTA ISLANDS”(增量島)部分。

pack.deltaCacheSize

在將增量寫入包之前,git-pack-objects[1] 中用於快取增量的最大記憶體量(以位元組為單位)。此快取用於加速寫入物件階段,因為它在找到所有物件的最佳匹配後無需重新計算最終增量結果。然而,在記憶體緊張的機器上重新打包大型倉庫可能會因此受到嚴重影響,尤其是當此快取導致系統開始交換時。值為 0 表示沒有限制。最小的 1 位元組大小可用於實際停用此快取。預設為 256 MiB。

pack.deltaCacheLimit

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

pack.threads

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

pack.indexVersion

指定預設的包索引版本。有效值為 1(用於 Git 1.5.2 之前版本使用的舊版包索引)和 2(用於新的包索引,支援大於 4 GB 的包以及對損壞包的重新打包進行適當保護)。版本 2 是預設值。請注意,當相應包大於 2 GB 時,版本 2 將被強制使用,此配置選項將被忽略。

如果你有一箇舊版 Git 無法識別版本 2 的 *.idx 檔案,透過非原生協議(例如“http”)克隆或抓取時,如果同時複製了對方的 *.pack 檔案和相應的 *.idx 檔案,你可能會得到一個你的舊版 Git 無法訪問的倉庫。然而,如果 *.pack 檔案小於 2 GB,你可以對 *.pack 檔案使用 git-index-pack[1] 來重新生成 *.idx 檔案。

pack.packSizeLimit

包的最大大小。此設定僅影響重新打包時打包到檔案,即 git:// 協議不受影響。它可以透過 git-repack[1]--max-pack-size 選項覆蓋。達到此限制會導致建立多個包檔案。

請注意,此選項很少有用,並且可能導致磁碟總大小更大(因為 Git 不會在包之間儲存增量),以及更差的執行時效能(在多個包中查詢物件比在單個包中慢,並且像可達性點陣圖這樣的最佳化無法處理多個包)。

如果你需要使用較小的包檔案來主動執行 Git(例如,因為你的檔案系統不支援大檔案),此選項可能會有所幫助。但如果你的目標是透過支援有限大小的介質(例如,無法儲存整個倉庫的可移動介質)傳輸包檔案,你最好建立一個單獨的大包檔案,然後使用通用的多卷歸檔工具(例如 Unix split)將其分割。

允許的最小大小限制為 1 MiB。預設無限制。支援常見的單位字尾 kmg

pack.useBitmaps

當為 true 時,Git 在打包到標準輸出時(例如,在 fetch 的伺服器端)將使用包點陣圖(如果可用)。預設為 true。除非你在除錯包點陣圖,否則通常不需要關閉此功能。

pack.useBitmapBoundaryTraversal

當為 true 時,Git 將使用一種實驗性演算法,透過點陣圖計算可達性查詢。它不是為所有被否定(negated)的尖端構建完整的點陣圖然後將它們 OR 起來,而是將具有現有點陣圖的被否定尖端視為加性的(即,如果它們存在,則將其 OR 到結果中,否則忽略它們),而是在邊界處構建點陣圖。

使用此演算法時,Git 可能會由於未開啟屬於某些“不重要”(UNINTERESTING)提交的樹而包含過多物件。這種不精確性與非點陣圖遍歷演算法相符。

在許多情況下,這可以比精確演算法提供更快的速度,特別是在查詢的否定側點陣圖覆蓋率較差時。

pack.useSparse

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

pack.preferBitmapTips

在選擇哪些提交將接收點陣圖時,優先選擇作為此配置任何值字尾的任何引用尖端的提交,而不是“選擇視窗”中的任何其他提交。

請注意,將此配置設定為 refs/foo 並不意味著一定會選擇 refs/foo/barrefs/foo/baz 尖端的提交。這是因為點陣圖的提交是從一系列可變長度的視窗中選擇的。

如果在視窗中看到任何引用尖端(其是此配置任何值的字尾)上的提交,它將立即獲得比該視窗中任何其他提交更高的優先順序。

pack.writeBitmaps(已棄用)

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

pack.writeBitmapHashCache

當為 true 時,Git 將在點陣圖索引中(如果寫入)包含一個“雜湊快取”部分。此快取可用於為 Git 的增量啟發式演算法提供資料,從而可能在點陣圖物件和非點陣圖物件之間產生更好的增量(例如,當在較舊的點陣圖包和自上次 gc 以來已推送的物件之間提供 fetch 服務時)。缺點是它會佔用每個物件 4 位元組的磁碟空間。預設為 true。

在寫入多包可達性點陣圖時,不會計算新的名稱雜湊;相反,寫入新點陣圖時,現有點陣圖中儲存的任何名稱雜湊都會排列到其適當的位置。

pack.writeBitmapLookupTable

當為 true 時,Git 將在點陣圖索引中(如果寫入)包含一個“查詢表”部分。此表用於儘可能延遲載入單個位圖。這對於具有相對較大點陣圖索引的倉庫可能很有利。預設為 false。

pack.readReverseIndex

當為 true 時,Git 將讀取任何可能可用的 .rev 檔案(參見:gitformat-pack[5])。當為 false 時,反向索引將從頭開始生成並存儲在記憶體中。預設為 true。

pack.writeReverseIndex

當為 true 時,Git 將為其寫入的每個新包檔案(除了 git-fast-import[1] 和批次簽入機制之外的所有位置)寫入相應的 .rev 檔案(參見:gitformat-pack[5])。預設為 true。

pager.<cmd>

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

pretty.<name>

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

promisor.quiet

如果設定為“true”,則在為部分克隆獲取額外物件時假定為 --quiet

promisor.advertise

如果設定為“true”,則伺服器將使用“promisor-remote”能力(參見 gitprotocol-v2[5])來宣告其正在使用的 promisor 遠端倉庫(如果它使用了)。預設值為“false”,這意味著不宣告“promisor-remote”能力。

promisor.acceptFromServer

如果設定為“all”,則客戶端將接受伺服器可能使用“promisor-remote”能力宣告的所有 promisor 遠端倉庫。如果設定為“knownName”,客戶端將接受已在客戶端配置且與客戶端宣告的 promisor 遠端倉庫同名的 promisor 遠端倉庫。這不是很安全,但可以在伺服器和客戶端被信任不會更改名稱和 URL 的公司設定中使用。如果設定為“knownUrl”,客戶端將接受在客戶端配置的名稱和 URL 與伺服器宣告的名稱和 URL 相同的 promisor 遠端倉庫。這比“all”或“knownName”更安全,因此如果可能,應使用此選項而不是其他選項。預設值為“none”,這意味著不接受伺服器宣告的任何 promisor 遠端倉庫。透過接受 promisor 遠端倉庫,客戶端同意伺服器可能會在其對客戶端“fetch”和“clone”請求的響應中,省略那些可從該 promisor 遠端倉庫延遲獲取的物件。名稱和 URL 比較區分大小寫。參見 gitprotocol-v2[5]

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 連線(或代理,如果已配置)的匿名 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

預設情況下,當合並一個作為當前提交後代的提交時,Git 不會建立額外的合併提交。相反,當前分支的末端會被快進。當設定為 false 時,此變數會告訴 Git 在這種情況下建立額外的合併提交(相當於從命令列提供 --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 選項 simpleupstreamcurrent 生效。如果您預設希望將新分支推送到預設遠端(類似於 push.default=current 的行為),並且還希望設定上游跟蹤,則此選項很有用。最有可能受益於此選項的工作流是*簡單*的集中式工作流,其中所有分支都應在遠端上具有相同的名稱。

push.default

定義了在未指定引用(無論是在命令列、配置檔案還是其他地方)時,git push 應採取的操作。不同的值適用於特定的工作流;例如,在純粹的集中式工作流中(即拉取源與推送目標相同),upstream 可能正是您想要的。可能的值有:

  • nothing - 除非給定引用,否則不推送任何內容(報錯)。這主要是為了那些希望透過始終明確指定來避免錯誤的人。

  • current - 推送當前分支,以更新接收端同名分支。在集中式和非集中式工作流中均適用。

  • upstream - 將當前分支推送回其更改通常整合到當前分支中的分支(即 @{upstream})。此模式僅在您推送到通常從中拉取的同一倉庫時才有意義(即集中式工作流)。

  • tracking - 這是 upstream 的已廢棄同義詞。

  • simple - 將當前分支推送到遠端上同名的分支。

    如果您正在使用集中式工作流(推送到您從中拉取的同一倉庫,通常是 origin),那麼您需要配置一個同名的上游分支。

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

  • matching - 推送兩端具有相同名稱的所有分支。這使得您推送到的倉庫會記住將被推送出的分支集(例如,如果您總是將 maintmaster 推送到那裡,而沒有其他分支,那麼您推送到的倉庫將擁有這兩個分支,並且您的本地 maintmaster 將被推送到那裡)。

    要有效使用此模式,您必須確保在執行 git push 之前,所有要推送的分支都已準備好被推送,因為此模式的全部目的就是允許您一次性推送所有分支。如果您通常只在一個分支上完成工作並推送結果,而其他分支尚未完成,則此模式不適合您。此外,此模式不適用於推送到共享的集中式倉庫,因為其他人可能會在那裡新增新分支,或在您無法控制的情況下更新現有分支的末端。

    這曾是預設值,但自 Git 2.0 以來不再是(simple 是新的預設值)。

push.followTags

如果設定為 true,則預設啟用 --follow-tags 選項。您可以在推送時透過指定 --no-follow-tags 來覆蓋此配置。

push.gpgSign

可以設定為布林值,或字串 if-asked。一個 true 值會導致所有推送都進行 GPG 簽名,如同將 --signed 傳遞給 git-push[1] 一樣。字串 if-asked 會使推送在伺服器支援的情況下進行簽名,如同將 --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”,則等同於在命令列中將 --force-if-includes 作為選項指定給 git-push[1]。在推送時新增 --no-force-if-includes 會覆蓋此配置設定。

push.negotiate

如果設定為“true”,則嘗試透過客戶端和伺服器試圖尋找共同提交的多輪協商來減小發送的 packfile 大小。如果為“false”,Git 將僅依靠伺服器的引用宣告來尋找共同提交。

push.useBitmaps

如果設定為“false”,則停用“git push”使用點陣圖,即使 pack.useBitmaps 為“true”也是如此,同時不阻止其他 Git 操作使用點陣圖。預設值為 true。

rebase.backend

變基操作的預設後端。可能的選擇是 applymerge。將來,如果 merge 後端獲得了 apply 後端所有剩餘的功能,此設定可能會變得不再使用。

rebase.stat

是否顯示自上次變基以來上游變化的 diffstat。預設值為 false。

rebase.autoSquash

如果設定為 true,則預設在互動模式下啟用 git-rebase[1]--autosquash 選項。這可以透過 --no-autosquash 選項覆蓋。

rebase.autoStash

當設定為 true 時,在操作開始前自動建立一個臨時暫存條目,並在操作結束後應用它。這意味著您可以在有未提交更改的工作樹上執行變基。但是,請謹慎使用:成功變基後的最終暫存應用可能會導致不平凡的衝突。此選項可以透過 git-rebase[1]--no-autostash--autostash 選項覆蓋。預設值為 false。

rebase.updateRefs

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

rebase.missingCommitsCheck

如果設定為“warn”,如果某些提交被刪除(例如,刪除了一行),git rebase -i 將列印警告,但變基仍將繼續。如果設定為“error”,它將列印前面的警告並停止變基,此時可以使用 git rebase --edit-todo 來糾正錯誤。如果設定為“ignore”,則不執行任何檢查。要刪除提交而不發出警告或錯誤,請在待辦列表中使用 drop 命令。預設值為“ignore”。

rebase.instructionFormat

一個格式字串,如 git-log[1] 中所指定,用於互動式變基期間的待辦事項列表。格式將自動在前面加上提交雜湊值。

rebase.abbreviateCommands

如果設定為 true,git rebase 將在待辦列表中使用縮寫命令名稱,結果類似於此:

	p deadbee The oneline of the commit
	p fa1afe1 The oneline of the next commit
	...

而不是:

	pick deadbee The oneline of the commit
	pick fa1afe1 The oneline of the next commit
	...

預設值為 false。

rebase.rescheduleFailedExec

自動重新安排失敗的 exec 命令。這僅在互動模式下(或提供了 --exec 選項時)有意義。這與指定 --reschedule-failed-exec 選項相同。

rebase.forkPoint

如果設定為 false,則預設設定 --no-fork-point 選項。

rebase.rebaseMerges

是否以及如何預設設定 --rebase-merges 選項。可以是 rebase-cousinsno-rebase-cousins,或一個布林值。設定為 true 或 no-rebase-cousins 等同於 --rebase-merges=no-rebase-cousins,設定為 rebase-cousins 等同於 --rebase-merges=rebase-cousins,設定為 false 等同於 --no-rebase-merges。在命令列上傳遞 --rebase-merges(帶或不帶引數)會覆蓋任何 rebase.rebaseMerges 配置。

rebase.maxLabelLength

從提交主題生成標籤名稱時,將名稱截斷到此長度。預設情況下,名稱會被截斷到略小於 NAME_MAX(例如,為了允許為相應的鬆散引用寫入 .lock 檔案)。

receive.advertiseAtomic

預設情況下,git-receive-pack 會向其客戶端宣告原子推送能力。如果您不想宣告此能力,請將此變數設定為 false。

receive.advertisePushOptions

當設定為 true 時,git-receive-pack 會向其客戶端宣告推送選項能力。預設值為 false。

receive.autogc

預設情況下,git-receive-pack 在接收到 git-push 的資料並更新引用後,會執行“git maintenance run --auto”。您可以透過將此變數設定為 false 來停止它。

receive.certNonceSeed

透過將此變數設定為字串,git receive-pack 將接受 git push --signed,並透過使用一個由 HMAC 保護的“nonce”(此字串作為金鑰)來驗證它。

receive.certNonceSlop

git push --signed 傳送的推送證書包含一個由服務同一倉庫的 receive-pack 在指定秒數內頒發的“nonce”時,將證書中找到的“nonce”匯出到鉤子指令碼的 GIT_PUSH_CERT_NONCE 環境變數中(而不是 receive-pack 要求傳送方包含的值)。這可能使在 pre-receivepost-receive 鉤子中編寫檢查變得更容易一些。他們無需檢查記錄 nonce 過期秒數的 GIT_PUSH_CERT_NONCE_SLOP 環境變數來決定是否接受證書,只需檢查 GIT_PUSH_CERT_NONCE_STATUS 是否為 OK

receive.fsckObjects

如果設定為 true,git-receive-pack 將檢查所有接收到的物件。有關檢查內容,請參閱 transfer.fsckObjects。預設值為 false。如果未設定,則使用 transfer.fsckObjects 的值代替。

receive.fsck.<msg-id>

行為類似於 fsck.<msg-id>,但由 git-receive-pack[1] 而不是 git-fsck[1] 使用。有關詳細資訊,請參閱 fsck.<msg-id> 文件。

receive.fsck.skipList

行為類似於 fsck.skipList,但由 git-receive-pack[1] 而不是 git-fsck[1] 使用。有關詳細資訊,請參閱 fsck.skipList 文件。

receive.keepAlive

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

receive.unpackLimit

如果一次推送中接收到的物件數量低於此限制,則物件將被解包為鬆散物件檔案。但是,如果接收到的物件數量等於或超過此限制,則接收到的 pack 將作為 pack 儲存,並在新增任何缺失的 delta base 之後。儲存來自推送的 pack 可以使推送操作更快完成,尤其是在慢速檔案系統上。如果未設定,則使用 transfer.unpackLimit 的值代替。

receive.maxInputSize

如果傳入 pack 流的大小超過此限制,則 git-receive-pack 將報錯,而不是接受 pack 檔案。如果未設定或設定為 0,則大小不受限制。

receive.denyDeletes

如果設定為 true,git-receive-pack 將拒絕刪除引用的引用更新。使用此選項可防止透過推送刪除此類引用。

receive.denyDeleteCurrent

如果設定為 true,git-receive-pack 將拒絕刪除非裸倉庫當前檢出分支的引用更新。

receive.denyCurrentBranch

如果設定為 true 或“refuse”,git-receive-pack 將拒絕更新非裸倉庫當前檢出分支的引用。這樣的推送是潛在危險的,因為它會導致 HEAD 與索引和工作樹不同步。如果設定為“warn”,則向 stderr 列印此類推送的警告,但允許推送繼續進行。如果設定為 false 或“ignore”,則允許此類推送,不顯示任何訊息。預設值為“refuse”。

另一個選項是“updateInstead”,它在推送到當前分支時會更新工作樹。此選項旨在用於同步工作目錄,當其中一側不易透過互動式 SSH 訪問時(例如,一個即時網站,因此要求工作目錄是乾淨的)。此模式在虛擬機器中開發以測試和修復不同作業系統上的程式碼時也很有用。

預設情況下,“updateInstead”將拒絕推送,如果工作樹或索引與 HEAD 有任何差異,但可以使用 push-to-checkout 鉤子來定製此行為。參見 githooks[5]

receive.denyNonFastForwards

如果設定為 true,git-receive-pack 將拒絕非快進的引用更新。使用此選項可防止透過推送進行此類更新,即使該推送是強制的。此配置變數在初始化共享倉庫時設定。

receive.hideRefs

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

receive.procReceiveRefs

這是一個多值變數,定義了用於匹配 receive-pack 中命令的引用字首。匹配此字首的命令將由外部鉤子“proc-receive”執行,而不是內部的 execute_commands 函式。如果未定義此變數,“proc-receive”鉤子將永遠不會被使用,所有命令將由內部的 execute_commands 函式執行。

例如,如果此變數設定為“refs/for”,則推送到“refs/for/master”之類的引用不會建立或更新名為“refs/for/master”的引用,而是可能透過執行“proc-receive”鉤子直接建立或更新拉取請求。

可以在值開頭提供可選修飾符,以篩選特定操作的命令:建立 (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 後端在檔案建立時確定重啟點。每 16 個可能更適合較小的塊大小(4k 或 8k),每 64 個適合較大的塊大小(64k)。

更頻繁的重啟點會降低字首壓縮效率並增加重啟表佔用的空間,兩者都會增加檔案大小。

較不頻繁的重啟點會使字首壓縮更有效,從而減小整體檔案大小,但讀者在二進位制搜尋步驟後遍歷更多記錄時會增加開銷。

每個塊最多支援 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)的遠端,用於該遠端的代理 URL。設定為空字串將停用該遠端的代理。

remote.<name>.proxyAuthMethod

對於需要 curl(http、https 和 ftp)的遠端,用於向正在使用的代理進行身份驗證的方法(可能在 remote.<name>.proxy 中設定)。參見 http.proxyAuthMethod

remote.<name>.fetch

git-fetch[1] 的預設“引用規格”集。參見 git-fetch[1]

remote.<name>.push

git-push[1] 的預設“引用規格”集。參見 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] 的 PRUNING 部分。

remote.<name>.promisor

當設定為 true 時,此遠端將用於抓取 promisor 物件。

remote.<name>.partialclonefilter

從此 promisor 遠端抓取時將應用的過濾器。更改或清除此值只會影響新提交的抓取。要為本地物件資料庫中已存在的提交抓取相關物件,請使用 git-fetch[1]--refetch 選項。

remote.<name>.serverOption

從此遠端抓取時使用的預設伺服器選項集。這些伺服器選項可以透過 --server-option= 命令列引數覆蓋。

這是一個多值變數,空值可以在高優先順序配置檔案(例如倉庫中的 .git/config)中使用,以清除從低優先順序配置檔案(例如 $HOME/.gitconfig)繼承的值。

remote.<name>.followRemoteHEAD

當使用遠端的配置引用規格抓取時,git-fetch[1] 應如何處理對 remotes/<name>/HEAD 的更新。預設值為 "create",如果遠端上存在但本地不存在 remotes/<name>/HEAD,則會建立它;這不會觸及已存在的本地引用。將其設定為 "warn" 會在遠端值與本地值不同時列印一條訊息;如果不存在本地引用,則其行為類似於 "create"。 "warn" 的一個變體是 "warn-if-not-$branch",其行為類似於 "warn",但如果遠端上的 HEAD$branch,則會靜默。將其設定為 "always" 會靜默地將 remotes/<name>/HEAD 更新為遠端上的值。最後,將其設定為 "never" 將永遠不會更改或建立本地引用。

remotes.<group>

“git remote update <group>” 命令抓取的遠端列表。參見 git-remote[1]

repack.useDeltaBaseOffset

預設情況下,git-repack[1] 建立使用增量基偏移的包。如果你需要與低於 1.4.4 版本的 Git 共享你的倉庫,無論是直接共享還是透過 http 等“啞協議”共享,則需要將此選項設定為 "false" 並重新打包。舊版本 Git 透過原生協議的訪問不受此選項影響。

repack.packKeptObjects

如果設定為 true,則使 git repack 的行為如同傳遞了 --pack-kept-objects 選項。詳情參見 git-repack[1]。通常預設為 false,但如果正在寫入點陣圖索引(透過 --write-bitmap-indexrepack.writeBitmaps),則預設為 true

repack.useDeltaIslands

如果設定為 true,則使 git repack 的行為如同傳遞了 --delta-islands 選項。預設為 false

repack.writeBitmaps

當設定為 true 時,Git 在將所有物件打包到磁碟時(例如,執行 git repack -a 時)會寫入點陣圖索引。此索引可以加快為克隆和抓取建立後續包的“計數物件”階段,但會佔用一些磁碟空間並在初始重新打包時花費額外時間。如果建立了多個 packfile,則此設定無效。裸倉庫預設為 true,否則為 false。

repack.updateServerInfo

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

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

當生成一個 cruft pack 且命令列中未給出相應引數時,git-pack-objects[1] 使用的引數。預設值和含義請參見名稱類似的 pack.* 配置變數。

rerere.autoUpdate

當設定為 true 時,git-rerere 在使用先前記錄的解決方案乾淨地解決衝突後,會用結果內容更新索引。預設為 false。

rerere.enabled

啟用已解決衝突的記錄,以便當再次遇到相同的衝突塊時可以自動解決。預設情況下,git-rerere[1] 是啟用的,如果 $GIT_DIR 下存在 rr-cache 目錄,例如,如果倉庫中以前使用過 "rerere"。

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 環境變數,並允許訪問其值中記錄的 uid 以及 root 的 id。這是為了便於在安裝過程中執行常見的序列“make && sudo make install”。在 sudo 下執行的 git 程序以 root 身份執行,但 sudo 命令會匯出環境變數以記錄原始使用者的 ID。如果你不喜歡這種行為,並且希望 git 只信任由 root 擁有的倉庫,那麼你可以在呼叫 git 之前從 root 的環境中移除 SUDO_UID 變數。

sendemail.identity

一個配置身份。如果給定,會使 sendemail.<identity> 小節中的值優先於 sendemail 小節中的值。預設身份是 sendemail.identity 的值。

sendemail.smtpEncryption

詳情參見 git-send-email[1]。請注意,此設定不受 identity 機制的約束。

sendemail.smtpSSLCertPath

CA 證書的路徑(可以是目錄或單個檔案)。設定為空字串可停用證書驗證。

sendemail.<identity>.*

下面找到的 sendemail.* 引數的特定身份版本,當透過命令列或 sendemail.identity 選擇此身份時,它們將優先於其他引數。

sendemail.multiEdit

如果為 true(預設),將啟動單個編輯器例項來編輯你需要編輯的檔案(使用 --annotate 時是補丁,使用 --compose 時是摘要)。如果為 false,檔案將一個接一個地編輯,每次都會啟動一個新的編輯器。

sendemail.confirm

設定傳送前是否確認的預設值。必須是 alwaysnevercccomposeauto 之一。這些值的含義參見 git-send-email[1] 文件中的 --confirm

sendemail.mailmap

如果為 true,則使 git-send-email[1] 假定使用 --mailmap,否則假定使用 --no-mailmap。預設為 false。

sendemail.mailmap.file

git-send-email[1] 特定補充 mailmap 檔案的位置。預設 mailmap 和 mailmap.file 首先載入。因此,此檔案中的條目優先於預設 mailmap 位置中的條目。參見 gitmailmap[5]

sendemail.mailmap.blob

類似於 sendemail.mailmap.file,但將該值視為倉庫中 blob 的引用。sendemail.mailmap.file 中的條目優先於此處的條目。參見 gitmailmap[5]

sendemail.aliasesFile

為避免鍵入冗長的電子郵件地址,請將其指向一個或多個電子郵件別名檔案。你還必須提供 sendemail.aliasFileType

sendemail.aliasFileType

sendemail.aliasesFile 中指定的檔案格式。必須是 muttmailrcpineelmgnussendmail 之一。

每種格式的別名檔案外觀可以在同名電子郵件程式的文件中找到。與標準格式的區別和限制如下所述:

sendmail
  • 不支援帶引號的別名和帶引號的地址:包含 " 符號的行將被忽略。

  • 不支援重定向到檔案(/path/name)或管道(|command)。

  • 不支援檔案包含(:include: /path/name)。

  • 對於任何明確不支援的構造以及解析器無法識別的任何其他行,都會在標準錯誤輸出中列印警告。

sendemail.annotate
sendemail.bcc
sendemail.cc
sendemail.ccCmd
sendemail.chainReplyTo
sendemail.envelopeSender
sendemail.from
sendemail.headerCmd
sendemail.signedOffByCc
sendemail.smtpPass
sendemail.suppressCc
sendemail.suppressFrom
sendemail.to
sendemail.toCmd
sendemail.smtpDomain
sendemail.smtpServer
sendemail.smtpServerPort
sendemail.smtpServerOption
sendemail.smtpUser
sendemail.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 用於編輯變基指令檔案的文字編輯器。該值在使用時應由 shell 解釋。它可以透過 GIT_SEQUENCE_EDITOR 環境變數覆蓋。如果未配置,則使用預設的提交訊息編輯器。

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

  • plink or putty - [-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 命令在不帶任何選項的情況下將以補丁形式顯示暫存條目。預設為 false。參見 git-stash[1]show 命令的描述。

stash.showStat

如果設定為 true,git stash show 命令在不帶任何選項的情況下將顯示暫存條目的 diffstat。預設為 true。參見 git-stash[1]show 命令的描述。

status.relativePaths

預設情況下,git-status[1] 顯示相對於當前目錄的路徑。將此變數設定為 false 會顯示相對於倉庫根目錄的路徑(這是 Git v1.5.4 之前的預設行為)。

status.short

設定為 true 可在 git-status[1] 中預設啟用 --short。--no-short 選項優先於此變數。

status.branch

設定為 true 可在 git-status[1] 中預設啟用 --branch。--no-branch 選項優先於此變數。

status.aheadBehind

對於非 porcelain 狀態格式,在 git-status[1] 中,設定為 true 預設啟用 --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 的所有常用拼寫都被視為 normalfalse 則視為 no。此變數可以透過 git-status[1]git-commit[1] 的 -u|--untracked-files 選項來覆蓋。

status.submoduleSummary

預設為 false。如果將其設定為非零數字或 true(等同於 -1 或無限制的數字),則會啟用子模組摘要,並顯示已修改子模組的提交摘要(參閱 git-submodule[1] 的 --summary-limit 選項)。請注意,當 diff.ignoreSubmodules 設定為 all,或者僅對那些 submodule.<name>.ignore=all 的子模組時,將抑制所有子模組的摘要輸出命令。該規則的唯一例外是 status 和 commit 將顯示已暫存的子模組更改。要同時檢視被忽略子模組的摘要,可以使用 --ignore-submodules=dirty 命令列選項或 git submodule summary 命令,該命令顯示類似輸出但不遵守這些設定。

submodule.<name>.url

子模組的 URL。此變數透過 git submodule init 從 .gitmodules 檔案複製到 Git 配置中。使用者可以在透過 git submodule update 獲取子模組之前更改配置的 URL。如果既未設定 submodule.<name>.active 也未設定 submodule.active,則此變數的存在將用作回退,以指示該子模組是否對 Git 命令感興趣。詳情請參閱 git-submodule[1]gitmodules[5]

submodule.<name>.update

子模組透過 git submodule update 更新的方法,這是唯一受影響的命令,其他命令如 git checkout --recurse-submodules 不受影響。它存在是出於歷史原因,當時 git submodule 是唯一與子模組互動的命令;像 submodule.activepull.rebase 這樣的設定更具體。它由 git submodule initgitmodules[5] 檔案中填充。參閱 git-submodule[1]update 命令的描述。

submodule.<name>.branch

子模組的遠端分支名稱,由 git submodule update --remote 使用。設定此選項以覆蓋 .gitmodules 檔案中找到的值。詳情請參閱 git-submodule[1]gitmodules[5]

submodule.<name>.fetchRecurseSubmodules

此選項可用於控制此子模組的遞迴抓取。它可以透過對 "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 選項的命令以及它們是否受此設定支援。

  • checkout, fetch, grep, pull, push, read-tree, reset, restoreswitch 始終受支援。

  • clonels-files 不受支援。

  • branch 僅在啟用 submodule.propagateBranches 時才受支援

submodule.propagateBranches

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

submodule.fetchJobs

指定同時抓取/克隆的子模組數量。正整數表示最多允許並行抓取這麼多子模組。值為 0 將提供一個合理的預設值。如果未設定,則預設為 1。

submodule.alternateLocation

指定子模組在克隆時如何獲取備用(alternate)物件庫。可能的值是 no, superproject。預設假定為 no,這意味著不新增引用。當值設定為 superproject 時,要克隆的子模組會根據超級專案的備用物件庫計算其備用位置。

submodule.alternateErrorStrategy

指定如何處理透過 submodule.alternateLocation 計算的子模組備用物件庫的錯誤。可能的值是 ignore, info, die。預設值為 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 域套接字(在支援它們的平臺上)。套接字型別可以是 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,這會停用此檢查。

trailer.separators

此選項指定哪些字元被識別為尾註分隔符。預設情況下,只有 : 被識別為尾註分隔符,但 = 始終在命令列上被接受,以相容其他 Git 命令。

此選項給出的第一個字元將作為預設字元,當此尾註的配置中未指定其他分隔符時使用。

例如,如果此選項的值為 "%=$",則只有使用 <key><sep><value> 格式,且 <sep> 包含 %=$,然後是空格的行才被視為尾註。並且 % 將是使用的預設分隔符,因此預設情況下,尾註將顯示為:<key>% <value>(鍵和值之間將出現一個百分號和一個空格)。

trailer.where

此選項指定新尾註新增的位置。

它可以是 end(預設值)、startafterbefore

如果為 end,則每個新尾註將出現在現有尾註的末尾。

如果為 start,則每個新尾註將出現在現有尾註的開頭,而不是末尾。

如果為 after,則每個新尾註將出現在具有相同 <key> 的最後一個尾註之後。

如果為 before,則每個新尾註將出現在具有相同 <key> 的第一個尾註之前。

trailer.ifexists

此選項允許選擇當輸入中已存在至少一個具有相同 <key> 的尾註時將執行的操作。

此選項的有效值是:addIfDifferentNeighbor(這是預設值)、addIfDifferentaddreplacedoNothing

對於 addIfDifferentNeighbor,只有在將新增新尾註的行上方或下方沒有具有相同(<key>, <value>)對的尾註時,才會新增新尾註。

對於 addIfDifferent,只有在輸入中沒有已經存在的具有相同(<key>, <value>)對的尾註時,才會新增新尾註。

對於 add,即使輸入中已經存在一些具有相同(<key>, <value>)對的尾註,也會新增新尾註。

對於 replace,將刪除一個具有相同 <key> 的現有尾註,並新增新尾註。被刪除的尾註將是距離新尾註新增位置最近的那個(具有相同 <key> 的)。

對於 doNothing,將不執行任何操作;也就是說,如果輸入中已存在具有相同 <key> 的尾註,則不會新增新尾註。

trailer.ifmissing

此選項允許選擇當輸入中尚不存在任何具有相同 <key> 的尾註時將執行的操作。

此選項的有效值是:add(這是預設值)和 doNothing

對於 add,將新增一個新尾註。

對於 doNothing,將不執行任何操作。

trailer.<keyAlias>.key

為 <key> 定義一個 <keyAlias>。<keyAlias> 必須是 <key> 的一個字首(不區分大小寫)。例如,在 git config trailer.ack.key "Acked-by" 中,“Acked-by”是 <key>,而“ack”是 <keyAlias>。此配置允許在命令列上使用“ack”<keyAlias> 呼叫更短的 --trailer "ack:...",而不是更長的 --trailer "Acked-by:..."

在 <key> 的末尾,可以出現一個分隔符,然後是一些空格字元。預設情況下,唯一有效的分隔符是 :,但這可以使用 trailer.separators 配置變數進行更改。

如果鍵中存在分隔符,則在新增尾註時,它將覆蓋預設分隔符。

trailer.<keyAlias>.where

此選項接受與 trailer.where 配置變數相同的值,並且它會覆蓋該選項為具有指定 <keyAlias> 的尾註所指定的內容。

trailer.<keyAlias>.ifexists

此選項接受與 trailer.ifexists 配置變數相同的值,並且它會覆蓋該選項為具有指定 <keyAlias> 的尾註所指定的內容。

trailer.<keyAlias>.ifmissing

此選項接受與 trailer.ifmissing 配置變數相同的值,並且它會覆蓋該選項為具有指定 <keyAlias> 的尾註所指定的內容。

trailer.<keyAlias>.command

已棄用,建議使用 trailer.<keyAlias>.cmd。此選項的行為與 trailer.<keyAlias>.cmd 相同,不同之處在於它不將任何內容作為引數傳遞給指定命令。相反,子字串 $ARG 的第一次出現會被替換為將作為引數傳遞的 <value>。

請注意,使用者命令中的 $ARG 只會被替換一次,並且原始的 $ARG 替換方式不安全。

當為同一個 <keyAlias> 同時給定 trailer.<keyAlias>.cmdtrailer.<keyAlias>.command 時,將使用 trailer.<keyAlias>.cmd,而 trailer.<keyAlias>.command 將被忽略。

trailer.<keyAlias>.cmd

此選項可用於指定一個 shell 命令,該命令將被呼叫一次以自動新增具有指定 <keyAlias> 的尾註,然後每次指定 --trailer <keyAlias>=<value> 引數時都會再次呼叫,以修改此選項將生成的尾註的 <value>。

當指定命令首次被呼叫以新增具有指定 <keyAlias> 的尾註時,其行為如同在 "git interpret-trailers" 命令的開頭添加了一個特殊的 --trailer <keyAlias>=<value> 引數,其中 <value> 被認為是該命令的標準輸出,並去除任何前導和尾隨的空白字元。

如果在命令列上也傳遞了某些 --trailer <keyAlias>=<value> 引數,則該命令將針對這些具有相同 <keyAlias> 的引數中的每一個再次呼叫一次。並且這些引數的 <value> 部分(如果有)將作為其第一個引數傳遞給該命令。這樣,該命令就可以根據 --trailer <keyAlias>=<value> 引數中傳遞的 <value> 計算出新的 <value>。

transfer.credentialsInUrl

配置的 URL 可以包含純文字憑據,形式為 <protocol>://<user>:<password>@<domain>/<path>。您可能希望警告或禁止使用此類配置(建議使用 git-credential[1])。這將在 git-clone[1]git-fetch[1]git-push[1] 以及任何其他直接使用配置 URL 的情況下使用。

請注意,這目前僅限於檢測 remote.<name>.url 配置中的憑據;它不會檢測 remote.<name>.pushurl 配置中的憑據。

您可能希望啟用此功能以防止意外的憑據洩露,例如因為:

  • 您執行 Git 的作業系統或系統可能不提供或不允許您配置儲存使用者名稱和/或密碼的配置檔案的許可權。

  • 即使提供了,將此類資料“靜止”儲存也可能以其他方式暴露您,例如備份過程可能將資料複製到另一個系統。

  • Git 程式將在命令列上將完整 URL 作為引數相互傳遞,這意味著在允許檢視其他使用者完整程序列表的系統上,憑據將暴露給其他非特權使用者。在 Linux 上,procfs(5) 中記錄的 "hidepid" 設定允許配置此行為。

    如果這些問題不適用於您,那麼您可能無需擔心由於在 Git 配置檔案中儲存敏感資料而導致的憑據洩露。如果您確實想使用此功能,請將 transfer.credentialsInUrl 設定為以下值之一:

  • allow (預設值):Git 將繼續其活動而不發出警告。

  • warn:當解析包含純文字憑據的 URL 時,Git 將向 stderr 寫入警告訊息。

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

transfer.fsckObjects

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

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

在接收端,fsckObjects 失敗將使這些物件無法訪問,請參閱 git-receive-pack[1] 中的“QUARANTINE ENVIRONMENT”。在抓取端,格式錯誤的物件將改為在倉庫中保持未引用狀態。

由於 fetch.fsckObjects 實現的非隔離性質,不能像 receive.fsckObjects 那樣依賴它來保持物件儲存的乾淨。

由於物件在解包時會寫入物件儲存,因此即使“抓取”失敗,也可能引入惡意物件,然後隨後的“抓取”成功,因為只檢查新的傳入物件,而不檢查已經寫入物件儲存的物件。不應依賴這種行為差異。將來,此類物件也可能針對“抓取”進行隔離。

目前,多疑者需要找到某種方式來模擬隔離環境,如果他們想要與“推送”相同的保護。例如,在內部映象的情況下,分兩步進行映象:一步抓取不受信任的物件,然後進行第二次“推送”(這將使用隔離)到另一個內部倉庫,並讓內部客戶端使用這個被推送到的倉庫,或者禁止內部抓取,只在完整的“fsck”執行後(且在此期間沒有發生新的抓取)才允許它們。

transfer.hideRefs

字串,receive-packupload-pack 用來決定從其初始廣告中省略哪些引用。使用多個定義來指定多個字首字串。在此變數值中列出的層次結構下的引用將被排除,並在響應 git pushgit fetch 時被隱藏。有關此配置的程式特定版本,請參閱 receive.hideRefsuploadpack.hideRefs

您也可以在引用名稱前加上 ! 來否定該條目,明確地公開它,即使之前的條目已將其標記為隱藏。如果您有多個 hideRefs 值,則後面的條目會覆蓋前面的條目(更具體的配置檔案中的條目會覆蓋不太具體的配置檔案中的條目)。

如果正在使用名稱空間,則在將每個引用與 transfer.hiderefs 模式匹配之前,會從引用中剝離名稱空間字首。為了在剝離之前匹配引用,請在引用名稱前新增 ^。如果您同時使用 !^,則必須首先指定 !

例如,如果在 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 則仍然會廣告引用指向的物件 ID,而不會提及其名稱(即所謂的“.have”行)。

即使您隱藏了引用,客戶端仍可能透過 gitnamespaces[7] 手冊頁“SECURITY”部分中描述的技術竊取目標物件;最好將私有資料儲存在單獨的倉庫中。

transfer.unpackLimit

當未設定 fetch.unpackLimitreceive.unpackLimit 時,將使用此變數的值。預設值為 100。

transfer.advertiseSID

布林值。當為 true 時,客戶端和伺服器程序將向其遠端對應方通告其唯一的會話 ID。預設為 false。

transfer.bundleURI

當為 true 時,本地 git clone 命令將從遠端伺服器請求捆綁包資訊(如果已通告)並在透過 Git 協議繼續克隆之前下載捆綁包。預設為 false

transfer.advertiseObjectInfo

當為 true 時,伺服器會通告 object-info 能力。預設為 false。

uploadarchive.allowUnreachable

如果為 true,則允許客戶端使用 git archive --remote 請求任何樹,無論其是否可從引用尖端訪問。詳情請參閱 git-upload-archive[1] 的“SECURITY”部分中的討論。預設為 false

uploadpack.hideRefs

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

uploadpack.allowTipSHA1InWant

uploadpack.hideRefs 生效時,允許 upload-pack 接受請求隱藏引用尖端物件的 fetch 請求(預設情況下,此類請求會被拒絕)。另請參閱 uploadpack.hideRefs。即使此項為 false,客戶端也可能透過 gitnamespaces[7] 手冊頁“SECURITY”部分描述的技術竊取物件;最好將私有資料儲存在單獨的倉庫中。

uploadpack.allowReachableSHA1InWant

允許 upload-pack 接受請求可從任何引用尖端訪問的物件的 fetch 請求。但是,請注意計算物件可達性是計算開銷大的操作。預設為 false。即使此項為 false,客戶端也可能透過 gitnamespaces[7] 手冊頁“SECURITY”部分描述的技術竊取物件;最好將私有資料儲存在單獨的倉庫中。

uploadpack.allowAnySHA1InWant

允許 upload-pack 接受請求任何物件的 fetch 請求。它隱含了 uploadpack.allowTipSHA1InWantuploadpack.allowReachableSHA1InWant。如果設定為 true,它將同時啟用它們;如果設定為 false,它將同時停用它們。預設情況下未設定。

uploadpack.keepAlive

upload-pack 啟動 pack-objects 後,在 pack-objects 準備 pack 檔案期間可能會有一段安靜時間。通常它會輸出進度資訊,但如果 fetch 操作使用了 --quietpack-objects 在 pack 資料開始之前將完全不輸出任何內容。某些客戶端和網路可能會認為伺服器已掛起並放棄。設定此選項會指示 upload-pack 每隔 uploadpack.keepAlive 秒傳送一個空的保活包。將此選項設定為 0 會完全停用保活包。預設值為 5 秒。

uploadpack.packObjectsHook

如果設定了此選項,當 upload-pack 為客戶端執行 git pack-objects 來建立 packfile 檔案時,它將轉而執行此 shell 命令。pack-objects 命令及其原本會執行的引數(包括開頭的 git pack-objects)將附加到 shell 命令後。鉤子的 stdin 和 stdout 將被視為 pack-objects 本身被執行。即,upload-pack 會將 intended for pack-objects 的輸入提供給鉤子,並期望在 stdout 上收到一個完整的 packfile 檔案。

請注意,此配置變數僅在受保護的配置中指定時才有效(參見 SCOPES)。這是防止從不受信任的倉庫拉取(fetch)的安全措施。

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 功能。此功能旨在方便負載均衡伺服器,這些伺服器可能由於複製延遲而無法擁有對其引用所指向的 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 作為推送目標。在某些站點提供大量倉庫,並以多種訪問方法提供服務,其中一些方法不允許推送的情況下,此功能允許人們指定一個只拉取(pull-only)的 URL,並讓 Git 自動使用適當的 URL 進行推送,即使是該站點上從未見過的倉庫。當有多個 pushInsteadOf 字串匹配給定 URL 時,使用最長的匹配項。如果遠端倉庫有顯式的 pushurl,Git 將忽略此遠端倉庫的此設定。

user.name
user.email
author.name
author.email
committer.name
committer.email

user.nameuser.email 變數決定了提交物件的 authorcommitter 欄位中的內容。如果您需要不同的 authorcommitter,可以設定 author.nameauthor.emailcommitter.namecommitter.email 變數。所有這些都可以被 GIT_AUTHOR_NAMEGIT_AUTHOR_EMAILGIT_COMMITTER_NAMEGIT_COMMITTER_EMAILEMAIL 環境變數覆蓋。

請注意,這些變數的 name 形式通常指某種形式的個人名稱。有關這些設定的更多資訊以及如果您正在尋找身份驗證憑據,請參閱 git-commit[1]git[1] 的環境變數部分,以及 credential.username 選項。

user.useConfigOnly

指示 Git 避免嘗試猜測 user.emailuser.name 的預設值,而是僅從配置中檢索這些值。例如,如果您有多個電子郵件地址並希望為每個倉庫使用不同的電子郵件,那麼在全域性配置中將此配置選項設定為 true 並設定一個名稱後,Git 將在您在新克隆的倉庫中進行新提交之前提示您設定電子郵件。預設為 false

user.signingKey

如果 git-tag[1]git-commit[1] 在建立簽名的標籤或提交時未能自動選擇您想要的金鑰,您可以使用此變數覆蓋預設選擇。此選項會原樣傳遞給 gpg 的 --local-user 引數,因此您可以使用 gpg 支援的任何方法指定金鑰。如果 gpg.format 設定為 ssh,則它可以包含您的私有 ssh 金鑰的路徑,或者在使用 ssh-agent 時公共金鑰的路徑。此外,它還可以直接包含以 key:: 為字首的公共金鑰(例如:“key::ssh-rsa XXXXXX identifier”)。私鑰需要透過 ssh-agent 可用。如果未設定,Git 將呼叫 gpg.ssh.defaultKeyCommand(例如:“ssh-add -L”)並嘗試使用可用的第一個金鑰。為了向後相容性,以“ssh-”開頭的原始金鑰,例如“ssh-rsa XXXXXX identifier”,會被視為“key::ssh-rsa XXXXXX identifier”,但此形式已廢棄;請改用 key:: 形式。

versionsort.prereleaseSuffix (已廢棄)

已廢棄的 versionsort.suffix 別名。如果 versionsort.suffix 已設定,則忽略。

versionsort.suffix

即使在 git-tag[1] 中使用版本排序,具有相同基礎版本但不同字尾的標籤名仍然按字典順序排序,導致例如預釋出標籤出現在主釋出版本之後(例如“1.0-rc1”在“1.0”之後)。可以指定此變數以確定具有不同字尾的標籤的排序順序。

透過在此變數中指定一個字尾,任何包含該字尾的標籤名將出現在相應主釋出版本之前。例如,如果變數設定為“-rc”,則所有“1.0-rcX”標籤將出現在“1.0”之前。如果多次指定,每個字尾一次,則配置中字尾的順序將決定帶有這些字尾的標籤名的排序順序。例如,如果“-pre”在配置中出現在“-rc”之前,則所有“1.0-preX”標籤將列在任何“1.0-rcX”標籤之前。主釋出標籤相對於具有各種字尾的標籤的位置可以透過在這些其他字尾中指定空字尾來確定。例如,如果字尾“-rc”、“”、“-ck”和“-bfs”按此順序出現在配置中,則所有“v4.8-rcX”標籤首先列出,然後是“v4.8”,然後是“v4.8-ckX”,最後是“v4.8-bfsX”。

如果多個字尾匹配相同的標籤名,則該標籤名將根據在標籤名中起始位置最早的字尾進行排序。如果有多個不同的匹配字尾在最早位置開始,則該標籤名將根據這些字尾中最長的一個進行排序。如果它們位於多個配置檔案中,則不同字尾之間的排序順序是未定義的。

web.browser

指定某些命令可能使用的網頁瀏覽器。目前只有 git-instaweb[1]git-help[1] 可能使用它。

worktree.guessRemote

如果未指定分支且未使用 -b-B--detach,則 git worktree add 預設為從 HEAD 建立一個新分支。如果 worktree.guessRemote 設定為 true,worktree add 會嘗試查詢名稱唯一匹配新分支名稱的遠端跟蹤分支。如果存在這樣的分支,它將被檢出並設定為新分支的“upstream”。如果找不到這樣的匹配項,它將回退到從當前 HEAD 建立新分支。

worktree.useRelativePaths

使用相對路徑(當為“true”)或絕對路徑(當為“false”)連結工作樹。這對於倉庫和工作樹可能在不同位置或環境之間移動的設定特別有用。預設為“false”。

請注意,將 worktree.useRelativePaths 設定為“true”意味著啟用 extension.relativeWorktrees 配置(參見 git-config[1]),因此它與舊版本的 Git 不相容。

BUG

當使用已廢棄的 [section.subsection] 語法時,如果子節中至少包含一個大寫字母,更改值將導致新增一個多行鍵而不是更改。例如,當配置如下所示時:

  [section.subsection]
    key = value1

然後執行 git config section.Subsection.key value2 將導致:

  [section.subsection]
    key = value1
    key = value2

GIT

Git[1] 套件的一部分

scroll-to-top