简体中文 ▾ 主题 ▾ 最新版本 ▾ git-config 上次更新于 2.53.0

名称

git-config - 获取并设置仓库或全局选项

概要

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

描述

您可以使用此命令查询/设置/替换/取消设置选项。名称实际上是按点分隔的节和键,值将被转义。

可以使用 --append 选项向一个选项添加多行。如果要更新或取消设置可以出现在多行上的选项,则需要提供 --value=<pattern>(除非给出 --fixed-value 选项,否则它是一个扩展正则表达式)。只有与模式匹配的现有值才会被更新或取消设置。如果您想处理与模式**不**匹配的行,只需在前面加上一个感叹号(另请参见 示例),但请注意,这仅在未在使用 --fixed-value 选项时才有效。

选项 --type=<type> 指示 git config 确保传入和传出值在给定 下是可规范化的。如果没有给出 --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>

在新行或修改行的末尾添加注释。

如果 *<message>* 以一个或多个空格后跟 "#" 开头,则按原样使用。如果它以 "#" 开头,则在其前面加上一个空格。否则,在其前面加上字符串 " # "(一个空格后跟一个井号后跟一个空格)。然后将生成的字符串紧跟在为变量定义的值之后。*<message>* 不得包含换行符(不允许多行注释)。

--all

使用 get 时,返回多值键的所有值。

--regexp

使用 get 时,将名称解释为正则表达式。正则表达式匹配当前区分大小写,并针对键的规范化版本进行,其中节和变量名称小写,但子节名称不小写。

--url=<URL>

当给定两部分 ,如

. 时,返回
.. 的值,其中 部分与给定 URL 最佳匹配(如果不存在此类键,则使用
. 的值作为备用)。当只给定
作为名称时,对该节中的所有键执行此操作并列出它们。如果未找到值,则返回错误代码 1。

--global

用于写入选项:写入全局 ~/.gitconfig 文件而不是仓库 .git/config,如果此文件存在且 ~/.gitconfig 文件不存在,则写入 $XDG_CONFIG_HOME/git/config 文件。

用于读取选项:仅从全局 ~/.gitconfig$XDG_CONFIG_HOME/git/config 读取,而不是从所有可用文件读取。

另请参见 文件

--system

用于写入选项:写入系统范围的 $(prefix)/etc/gitconfig 而不是仓库 .git/config

用于读取选项:仅从系统范围的 $(prefix)/etc/gitconfig 读取,而不是从所有可用文件读取。

另请参见 文件

--local

用于写入选项:写入仓库 .git/config 文件。这是默认行为。

用于读取选项:仅从仓库 .git/config 读取,而不是从所有可用文件读取。

另请参见 文件

--worktree

类似于 --local,不同之处在于如果启用了 extensions.worktreeConfig,则从 $GIT_DIR/config.worktree 读取或写入。如果未启用,则与 --local 相同。请注意,对于主工作树,$GIT_DIR 等于 $GIT_COMMON_DIR,但对于其他工作树,形式为 $GIT_DIR/worktrees/<id>/。请参阅 git-worktree[1] 了解如何启用 extensions.worktreeConfig

-f <config-file>
--file <config-file>

用于写入选项:写入指定文件而不是仓库 .git/config

用于读取选项:仅从指定文件读取,而不是从所有可用文件读取。

另请参见 文件

--blob <blob>

类似于 --file,但使用给定的 blob 而不是文件。例如,您可以使用 *master:.gitmodules* 从 master 分支中的文件 *.gitmodules* 读取值。有关拼写 blob 名称的更完整列表,请参阅 gitrevisions[7] 中的“指定修订版”部分。

--value=<pattern>
--no-value

使用 getsetunset 时,仅匹配 *<pattern>*。除非给定 --fixed-value,否则模式是一个扩展正则表达式。

使用 --no-value 取消设置 *<pattern>*。

--fixed-value

--value=<pattern> 一起使用时,将 *<pattern>* 视为精确字符串而不是正则表达式。这将把匹配的名称/值对限制为值与 *<pattern>* 完全相等的那些。

--type <type>

git config 将确保任何输入或输出在给定类型约束下有效,并将以外出值的 <type> 规范形式进行规范化。

有效的 <type> 包括

  • bool: 将值 trueyeson 和正数规范化为“true”,将值 falsenooff0 规范化为“false”。

  • int: 将值规范化为简单的十进制数。可选的后缀 *k*、*m* 或 *g* 将使值在输入时分别乘以 1024、1048576 或 1073741824。

  • bool-or-int: 根据上述 boolint 进行规范化。

  • path: 通过将开头的 ~ 扩展为 $HOME 的值,以及将 ~user 扩展为指定用户的主目录来规范化。此说明符在设置值时无效(但您可以从命令行使用 git config section.variable ~/ 让您的 shell 执行扩展)。

  • expiry-date: 通过从固定日期字符串或相对日期字符串转换为时间戳来规范化。此说明符在设置值时无效。

  • color: 获取值时,通过转换为 ANSI 颜色转义序列进行规范化。设置值时,执行健全性检查以确保给定值可以规范化为 ANSI 颜色,但按原样写入。

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

选择类型说明符的历史选项。建议改为使用 --type(见上文)。

--no-type

取消设置先前设置的类型说明符(如果先前已设置)。此选项请求 *git config* 不规范化检索到的变量。--no-type 在没有 --type=<type>--<type> 的情况下无效。

-z
--null

对于所有输出值和/或键的选项,始终以空字符(而不是换行符)结束值。改为使用换行符作为键和值之间的分隔符。这允许安全地解析输出,而不会因包含换行符的值而混淆。

--name-only

对于 listget,仅输出配置变量的名称。

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

使用 get 时,除了值之外还显示配置键。默认值为 --no-show-names,除非给定 --url 且 *<name>* 中没有子节。

--show-origin

通过来源类型(文件、标准输入、blob、命令行)和实际来源(配置文件路径、引用或 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 作为备用。

--includes
--no-includes

查找值时,尊重配置文件中的 include.* 指令。当给定特定文件(例如,使用 --file--global 等)时,默认关闭;当搜索所有配置文件时,默认开启。

--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 --url=<URL> <name> 取代。

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

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

--add <name> <value>

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

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

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

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

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

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

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

--remove-section <name>

git config remove-section <name> 取代。

-e
--edit

git config edit 取代。

配置

pager.config 仅在列出配置时才受尊重,即在使用可能返回多个结果的 listget 时。默认是使用寻呼机。

文件

默认情况下,git config 将从多个文件读取配置选项

$(prefix)/etc/gitconfig

系统范围配置文件。

$XDG_CONFIG_HOME/git/config
~/.gitconfig

用户特定配置文件。当 XDG_CONFIG_HOME 环境变量未设置或为空时,$HOME/.config/ 被用作 $XDG_CONFIG_HOME。

这些也称为“全局”配置文件。如果两个文件都存在,则按上述顺序读取两个文件。

$GIT_DIR/config

仓库特定配置文件。

$GIT_DIR/config.worktree

这是可选的,仅当 $GIT_DIR/config 中存在 extensions.worktreeConfig 时才搜索。

您还可以通过使用 -c 选项在运行任何 git 命令时提供额外的配置参数。有关详细信息,请参阅 git[1]

将从所有这些可用文件中读取选项。如果全局或系统范围的配置文件缺失或不可读,它们将被忽略。如果仓库配置文件缺失或不可读,git config 将以非零错误代码退出。如果文件不可读,则会生成错误消息,但如果文件缺失则不会。

文件按上述顺序读取,后找到的值优先于先前读取的值。当获取多个值时,将使用所有文件中键的所有值。

默认情况下,选项仅写入仓库特定配置文件。请注意,这也会影响 setunset 等选项。**git config 将一次只更改一个文件**。

您可以通过使用 --file 选项指定文件的路径,或通过使用 --system--global--local--worktree 指定配置范围来限制从哪些配置源读取或写入。有关详细信息,请参阅上面的 选项

作用域

每个配置源都属于一个配置作用域。作用域是

系统

$(prefix)/etc/gitconfig

全局

$XDG_CONFIG_HOME/git/config

~/.gitconfig

本地

$GIT_DIR/config

工作树

$GIT_DIR/config.worktree

命令

GIT_CONFIG_{COUNT,KEY,VALUE} 环境变量(请参阅下面的 环境

the -c option

除了 *command* 之外,每个作用域都对应一个命令行选项:--system--global--local--worktree

读取选项时,指定作用域将仅从该作用域内的文件读取选项。写入选项时,指定作用域将写入该作用域内的文件(而不是仓库特定配置文件)。有关完整说明,请参阅上面的 选项

大多数配置选项都受尊重,无论其定义在哪个作用域,但有些选项仅在某些作用域中受尊重。有关完整详细信息,请参阅相应选项的文档。

受保护的配置

受保护的配置指的是 *system*、*global* 和 *command* 作用域。出于安全原因,某些选项只有在受保护的配置中指定时才受尊重,否则将被忽略。

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

您可以使用以下命令将文件模式设置为 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 的键/值对。

要删除重命名的条目,请执行

% 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] 的“配置文件”部分)用于存储该仓库的配置,$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)变量设置为要包含的文件名来从另一个配置文件中包含配置。该变量接受一个路径名作为其值,并受波浪号扩展的影响。这些变量可以多次给出。

包含文件的内容会立即插入,就像它们出现在 include 指令的位置一样。如果变量的值是相对路径,则该路径被视为相对于找到 include 指令的配置文件。

条件包含

您可以通过将 includeIf.<condition>.path 变量设置为要包含的文件名来有条件地从另一个配置文件中包含配置。

条件以关键字开头,后跟冒号和一些数据,其格式和含义取决于关键字。支持的关键字是

gitdir

关键字 gitdir 和冒号后面的数据用作全局模式。如果 .git 目录的位置与模式匹配,则满足包含条件。

.git 位置可能被自动发现,或来自 $GIT_DIR 环境变量。如果仓库通过 .git 文件(例如来自子模块或链接工作树)自动发现,则 .git 位置将是 .git 目录的最终位置,而不是 .git 文件所在的位置。

该模式可以包含标准全局通配符和另外两个通配符 **//**,它们可以匹配多个路径组件。有关详细信息,请参阅 gitignore[5]。为了方便

  • 如果模式以 ~/ 开头,~ 将替换为环境变量 HOME 的内容。

  • 如果模式以 ./ 开头,它将被替换为包含当前配置文件的目录。

  • 如果模式不以 ~/.// 开头,则会自动添加 **/。例如,模式 foo/bar 变为 **/foo/bar 并将匹配 /any/path/to/foo/bar

  • 如果模式以 / 结尾,则会自动添加 **。例如,模式 foo/ 变为 foo/**。换句话说,它匹配“foo”及其内部的所有内容,递归地。

gitdir/i

这与 gitdir 相同,只是匹配不区分大小写(例如在不区分大小写的文件系统上)

onbranch

关键字 onbranch 和冒号后面的数据被视为一个包含标准全局通配符以及两个额外通配符 **//** 的模式,它们可以匹配多个路径组件。如果我们在一个工作树中,当前检出的分支名称与该模式匹配,则满足包含条件。

如果模式以 / 结尾,则会自动添加 **。例如,模式 foo/ 变为 foo/**。换句话说,它匹配所有以 foo/ 开头的分支。这在您的分支是分层组织并且您希望将配置应用于该层次结构中的所有分支时很有用。

hasconfig:remote.*.url

此关键字和冒号后面的数据被视为一个包含标准全局通配符和另外两个通配符 **//** 的模式,它们可以匹配多个组件。第一次看到此关键字时,将扫描其余配置文件以查找远程 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

许多变量的值被视为简单字符串,但有些变量接受特定类型的值,并且存在如何拼写它们的规则。

布尔值

当变量被声明为接受布尔值时,*true* 和 *false* 接受许多同义词;这些都不区分大小写。

布尔真文字是 yesontrue1。此外,未定义 = <value> 的变量被视为真。

布尔假文字是 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

接受的属性包括 bolddimulblinkreverseitalicstrike(用于删除线或“删除线”字母)。任何属性相对于颜色的位置(之前、之后或之间)无关紧要。特定属性可以通过在其前面加上 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

如果以 :(optional) 为前缀,则如果指定路径不存在,则该配置变量被视为不存在。

变量

请注意,此列表不全面且不一定完整。对于命令特定变量,您将在相应的手册页中找到更详细的描述。

其他与 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 仓库中添加另一个 git 仓库时显示。

addEmptyPathspec

当用户运行 git add 但未提供 pathspec 参数时显示。

addIgnoredFile

当用户尝试将一个被忽略的文件添加到索引时显示。

amWorkDir

git-am[1] 无法应用补丁文件时显示,以告知用户文件位置。

ambiguousFetchRefspec

当多个远程的 fetch refspec 映射到相同的远程跟踪分支命名空间并导致分支跟踪设置失败时显示。

checkoutAmbiguousRemoteBranchName

git-checkout[1]git-switch[1] 的参数含糊地解析为多个远程上的远程跟踪分支时显示,在明确的参数会否则导致检出远程跟踪分支的情况下。请参阅 checkout.defaultRemote 配置变量,了解如何在某些情况下设置默认使用的给定远程,在这种情况下会打印此建议。

commitBeforeMerge

git-merge[1] 拒绝合并以避免覆盖本地更改时显示。

detachedHead

当用户使用 git-switch[1]git-checkout[1] 切换到分离 HEAD 状态时显示,以告知用户如何在此之后创建本地分支。

diverging

当无法进行快进时显示。

fetchShowForcedUpdates

git-fetch[1] 在引用更新后花费很长时间计算强制更新时显示,或警告检查已禁用。

forceDeleteBranch

当用户尝试删除未完全合并的分支而未设置强制选项时显示。

ignoredHook

当钩子因为未设置为可执行而被忽略时显示。

implicitIdentity

当用户的身份信息从系统用户名和域名猜测时显示,以告知用户如何设置其身份配置。

mergeConflict

当各种命令因冲突而停止时显示。

nestedTag

当用户尝试递归地标记标签对象时显示。

pushAlreadyExists

git-push[1] 拒绝不符合快进条件的更新(例如,一个标签)时显示。

pushFetchFirst

git-push[1] 拒绝尝试覆盖指向本地没有的对象的远程引用时显示。

pushNeedsForce

git-push[1] 拒绝尝试覆盖指向非 commit-ish 对象的远程引用,或使远程引用指向非 commit-ish 对象时显示。

pushNonFFCurrent

git-push[1] 由于当前分支的非快进更新而失败时显示。

pushNonFFMatching

当用户运行 git-push[1] 并显式推送“匹配引用”(即使用了 :,或指定了一个不是当前分支的 refspec)并导致非快进错误时显示。

pushRefNeedsUpdate

git-push[1] 拒绝强制更新分支,而其远程跟踪引用有本地没有的更新时显示。

pushUnqualifiedRefname

git-push[1] 放弃尝试根据源和目标引用猜测源所属的远程引用命名空间,但我们仍然可以根据源对象的类型建议用户推送到 refs/heads/*refs/tags/* 时显示。

pushUpdateRejected

如果您想同时禁用 pushNonFFCurrentpushNonFFMatchingpushAlreadyExistspushFetchFirstpushNeedsForcepushRefNeedsUpdate,请将此变量设置为 false

rebaseTodoError

编辑 rebase todo 列表后出现错误时显示。

refSyntax

当用户提供非法引用名称时显示,以告知用户引用语法文档。

resetNoRefresh

git-reset[1] 在重置后刷新索引花费超过 2 秒时显示,以告知用户可以使用 --no-refresh 选项。

resolveConflict

当冲突阻止操作执行时,由各种命令显示。

rmHints

git-rm[1] 的输出中失败时显示,以指导如何从当前状态继续。

sequencerInUse

当序列器命令已在进行中时显示。

skippedCherryPicks

git-rebase[1] 跳过已 cherry-pick 到上游分支的提交时显示。

sparseIndexExpanded

当稀疏索引扩展为完整索引时显示,这可能是由于稀疏检出之外存在一组意外的文件。

statusAheadBehind

git-status[1] 计算本地引用与其远程跟踪引用相比的超前/落后计数,并且该计算花费比预期更长时显示。如果 status.aheadBehind 为 false 或给定 --no-ahead-behind 选项,则不会出现。

statusHints

git-status[1] 的输出中显示如何从当前状态继续操作的说明,在 git-commit[1] 中编写提交消息时显示的模板中,以及在 git-switch[1]git-checkout[1] 切换分支时显示的帮助消息中。

statusUoption

git-status[1] 枚举未跟踪文件花费超过 2 秒时显示,以告知用户可以使用 -u 选项。

submoduleAlternateErrorStrategyDie

当配置为“die”的 submodule.alternateErrorStrategy 选项导致致命错误时显示。

submoduleMergeConflict

遇到非平凡的子模块合并冲突时显示的建议。

submodulesNotUpdated

当用户运行子模块命令失败,因为未运行 git submodule update --init 时显示。

suggestDetachingHead

git-switch[1] 在没有显式 --detach 选项的情况下拒绝分离 HEAD 时显示。

updateSparsePath

git-add[1]git-rm[1] 被要求更新当前稀疏检出之外的索引条目时显示。

waitingForEditor

当 Git 等待编辑器输入时显示。当编辑器未在终端内启动时尤其相关。

worktreeAddOrphan

当用户尝试从无效引用创建工作树时显示,以告知用户如何创建新的未绑定分支。

alias.*

git[1] 命令包装器的命令别名——例如,定义 alias.last = cat-file commit HEAD 后,调用 git last 等同于 git cat-file commit HEAD。为避免混淆和脚本使用问题,除了已弃用的命令外,隐藏现有 Git 命令的别名将被忽略。参数由空格分隔,支持常见的 shell 引用和转义。可以使用引号对或反斜杠来引用它们。

请注意,别名的第一个词不一定必须是命令。它可以是一个命令行选项,该选项将传递给 git 的调用。特别是,这在与 -c 一起使用以传递一次性配置或与 -p 一起使用以强制分页时很有用。例如,可以定义 loud-rebase = -c commit.verbose=true rebase,这样运行 git loud-rebase 将等同于 git -c commit.verbose=true rebase。此外,ps = -p status 将是一个有用的别名,因为 git ps 将对 git status 的输出进行分页,而原始命令不会。

如果别名扩展以感叹号为前缀,它将被视为 shell 命令。例如,定义 alias.new = !gitk --all --not ORIG_HEAD,则调用 git new 等同于运行 shell 命令 gitk --all --not ORIG_HEAD。请注意

  • Shell 命令将从仓库的顶级目录执行,该目录不一定是当前目录。

  • GIT_PREFIX 设置为通过从原始当前目录运行 git rev-parse --show-prefix 返回的值。请参阅 git-rev-parse[1]

  • Shell 命令别名始终接收提供给 Git 命令行的任何额外参数作为位置参数。

    • 如果您的 shell 别名是包含多个命令的“单行”脚本(例如在管道中)、引用多个参数,或者无法处理在末尾添加的位置参数,则应小心。例如:作为 git cmd 1 2 调用的 alias.cmd = "!echo $1 | grep $2" 将执行为 *echo $1 | grep $2 1 2*,这不是您想要的。

    • 一个方便的处理方法是将您的脚本操作写入一个内联函数,然后用命令行中的任何参数调用该函数。例如,alias.cmd = "!c() { echo $1 | grep $2 ; }; c" 将正确执行前面的示例。

    • 设置 GIT_TRACE=1 可以帮助您调试别名正在运行的命令。

am.keepcr

如果为 true,git-am 将使用参数 --keep-cr 调用 git-mailsplit 处理 mbox 格式的补丁。在这种情况下,git-mailsplit 不会从以 \r\n 结尾的行中删除 \r。可以通过从命令行提供 --no-keep-cr 来覆盖。请参阅 git-am[1]git-mailsplit[1]

am.threeWay

默认情况下,如果补丁不能干净应用,git am 将失败。当设置为 true 时,此设置告诉 git am 如果补丁记录了它应该应用的 blob 的身份并且我们本地有这些 blob 可用,则回退到三向合并(等同于从命令行提供 --3way 选项)。默认为 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 将使第 nth group to be 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 设置 pull 为 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 进行推送。它还会覆盖 remote.pushDefault 进行从分支 <name> 的推送。当您从一个地方(例如您的上游)拉取并推送到另一个地方(例如您自己的发布仓库)时,您会希望设置 remote.pushDefault 以指定要推送到所有分支的远程,并使用此选项来覆盖特定分支的设置。

branch.<name>.merge

branch.<name>.remote 一起,定义给定分支的上游分支。它告诉 git fetch/git pull/git rebase 要合并哪个分支,并且也可以影响 git push(请参阅 push.default)。当在分支 <name> 中时,它告诉 git fetch 默认的 refspec 以在 FETCH_HEAD 中标记为合并。该值像 refspec 的远程部分一样处理,并且必须与从 branch.<name>.remote 给定的远程获取的 ref 匹配。合并信息由 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 选项找到的 bundle 列表文件中。这些键目前如果放在仓库配置文件中没有效果,尽管将来会改变。有关详细信息,请参阅 bundle URI 设计文档

bundle.version

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

bundle.mode

此字符串值应为 allany。此值描述是否需要所有 advertised bundles 才能完整理解 bundled 信息(all),或者是否任何列出的 bundle URI 都足够(any)。

bundle.heuristic

如果存在此字符串值键,则 bundle 列表旨在与增量 git fetch 命令良好协作。heuristic 表示每个 bundle 都有额外的键可用,这些键有助于确定客户端应下载哪个 bundle 子集。目前唯一理解的值是 creationToken

bundle.<id>.*

bundle.<id>.* 键用于描述 bundle 列表中的单个项目,分组在 <id> 下用于识别目的。

bundle.<id>.uri

此字符串值定义 Git 可以通过其访问此 <id> 内容的 URI。此 URI 可以是 bundle 文件或另一个 bundle 列表。

checkout.defaultRemote

当您运行 git checkout <something>git switch <something> 且只有一个远程时,它可能会隐式地回退到签出和跟踪 e.g. origin/<something>。一旦您有多个具有 *<something>* 引用的远程,这种情况就会停止工作。此设置允许设置一个首选远程的名称,该名称在歧义化时应始终优先。典型用例是将其设置为 origin

目前,它由 git-switch[1]git-checkout[1] 使用,当 git checkout <something>git switch <something> 会签出另一个远程上的 *<something>* 分支时,以及由 git-worktree[1] 使用,当 git worktree add 指的是远程分支时。此设置将来可能会用于其他类似 checkout 的命令或功能。

checkout.guess

git checkoutgit switch 命令中的 --guess--no-guess 选项提供默认值。参见 git-switch[1]git-checkout[1]

checkout.workers

更新工作树时使用的并行工作进程数量。默认为一个,即顺序执行。如果设置为小于一的值,Git 将使用与可用逻辑核心数相同的数量的工作进程。此设置和 checkout.thresholdForParallelism 会影响所有执行 checkout 的命令。例如:checkout、clone、reset、sparse-checkout 等。

注意
并行 checkout 通常可以提高位于 SSD 或 NFS 上的存储库的性能。对于旋转硬盘和/或核心数较少的机器上的存储库,默认的顺序 checkout 通常性能更好。存储库的大小和压缩级别也可能影响并行版本的性能。
checkout.thresholdForParallelism

当使用少量文件进行并行 checkout 时,子进程生成和进程间通信的成本可能会超过并行化的收益。此设置允许您定义应尝试并行 checkout 的最小文件数。默认值为 100。

clean.requireForce

一个布尔值,用于使 git-clean 拒绝删除文件,除非给定 -f。默认为 true。

clone.defaultRemoteName

克隆仓库时创建的远程名称。默认为 origin。可以通过将 --origin 命令行选项传递给 git-clone[1] 来覆盖。

clone.rejectShallow

如果仓库是浅层仓库,则拒绝克隆;这可以通过在命令行上传递 --reject-shallow 选项来覆盖。请参阅 git-clone[1]

clone.filterSubmodules

如果提供了部分克隆过滤器(请参阅 git-rev-list[1] 中的 --filter)并且使用了 --recurse-submodules,则也将过滤器应用于子模块。

color.advice

一个布尔值,用于启用/禁用提示中的颜色(例如,当推送失败时,请参阅 advice.* 列表)。可以设置为 alwaysfalse(或 never)或 auto(或 true),在这种情况下,仅当错误输出到终端时才使用颜色。如果未设置,则使用 color.ui 的值(默认 auto)。

color.advice.hint

对提示使用自定义颜色。

color.blame.highlightRecent

根据行的“年龄”,指定 git blame --color-by-age 的行注解颜色。

此设置应设置为逗号分隔的颜色和日期设置列表,以颜色开头和结尾,日期应从最旧到最新设置。如果行在给定时间戳之前引入,则元数据将以指定颜色着色,覆盖较旧的时间戳颜色。

除了绝对时间戳,相对时间戳也有效,例如 2.weeks.ago 对于早于 2 周的任何内容都是有效的。

它默认为 blue,12 month ago,white,1 month ago,red,它将一年以前的所有内容着色为蓝色,一个月到一年之间的近期更改保留为白色,最近一个月内引入的行着色为红色。

color.blame.repeatedLines

如果行注解来自与前一行相同的提交,则使用指定的颜色为 git blame --color-lines 的行注解着色。默认为青色。

color.branch

一个布尔值,用于启用/禁用 git-branch[1] 输出中的颜色。可以设置为 alwaysfalse(或 never)或 auto(或 true),在这种情况下,仅当输出到终端时才使用颜色。如果未设置,则使用 color.ui 的值(默认 auto)。

color.branch.<slot>

对分支着色使用自定义颜色。<slot>current(当前分支)、local(本地分支)、remote(refs/remotes/ 中的远程跟踪分支)、upstream(上游跟踪分支)、plain(其他引用)之一。

color.diff

是否使用 ANSI 转义序列为补丁添加颜色。如果设置为 alwaysgit-diff[1]git-log[1]git-show[1] 将为所有补丁使用颜色。如果设置为 trueauto,这些命令仅在输出到终端时使用颜色。如果未设置,则使用 color.ui 的值(默认 auto)。

这不影响 git-format-patch[1]git-diff-* 底层命令。可以在命令行上使用 --color[=<when>] 选项覆盖。

color.diff.<slot>

对 diff 着色使用自定义颜色。<slot> 指定补丁的哪个部分使用指定颜色,它是 context(上下文文本 - plain 是历史同义词)、meta(元信息)、frag( hunk 头)、func( hunk 头中的函数)、old(已删除的行)、new(已添加的行)、commit(提交头)、whitespace(突出显示空白错误)、oldMoved(已删除的行)、newMoved(已添加的行)、oldMovedDimmedoldMovedAlternativeoldMovedAlternativeDimmednewMovedDimmednewMovedAlternative newMovedAlternativeDimmed(有关详细信息,请参阅 git-diff[1]--color-moved<mode> 设置)、contextDimmedoldDimmednewDimmedcontextBoldoldBoldnewBold(有关详细信息,请参阅 git-range-diff[1])之一。

color.decorate.<slot>

git log --decorate 输出使用自定义颜色。<slot>branchremoteBranchtagstashHEAD(分别用于本地分支、远程跟踪分支、标签、暂存区和 HEAD)以及 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

行中字段之间的分隔符(:-=)以及 hunk 之间的分隔符(--

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.changedPaths

如果为 true,则 git commit-graph write 默认将计算并写入 changed-path 布隆过滤器,等同于传递 --changed-paths。如果为 false 或未设置,则仅当过滤器已存在于当前提交图文件中时,才会在 git commit-graph write 期间写入 changed-path 布隆过滤器。这与不带任何 --[no-]changed-paths 选项的 git commit-graph write 的默认行为匹配。要重写不带任何过滤器的提交图文件,请使用 --no-changed-paths 选项。命令行选项 --[no-]changed-paths 始终优先于此配置。默认为未设置。

commitGraph.readChangedPaths

已废弃。如果为 true,则等同于 commitGraph.changedPathsVersion=-1;如果为 false,则等同于 commitGraph.changedPathsVersion=0。(如果 commitGraph.changedPathVersion 也已设置,则 commitGraph.changedPathsVersion 优先。)

commitGraph.changedPathsVersion

指定 Git 将读取和写入的 changed-path 布隆过滤器的版本。可以是 -1、0、1 或 2。请注意,大于 1 的值可能与不理解这些版本的旧版 Git 不兼容。在混合版本环境中操作时请谨慎使用。

默认为 -1。

如果为 -1,Git 将使用仓库中 changed-path 布隆过滤器的版本,如果没有,则默认为 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])。

与基于 hook 的文件系统监视器一样,内置文件系统监视器可以加速在文件众多的工作目录中需要刷新 Git 索引(例如 git status)的 Git 命令。内置监视器消除了安装和维护外部第三方工具的需要。

内置文件系统监视器目前仅在有限的支持平台上可用。目前,这包括 Windows 和 MacOS。

否则,此变量包含 "fsmonitor" hook 命令的路径。

此 hook 命令用于识别自请求日期/时间以来可能已更改的所有文件。此信息用于通过避免不必要的扫描未更改文件来加速 git。

请参阅 githooks[5] 的 "fsmonitor-watchman" 部分。

请注意,如果您同时使用多个版本的 Git,例如命令行上的一个版本和 IDE 工具中的另一个版本,core.fsmonitor 的定义已扩展为允许布尔值以及 hook 路径。Git 版本 2.35.1 及以前的版本将不理解布尔值,并将“true”或“false”值视为要调用的 hook 路径。Git 版本 2.26 到 2.35.1 默认使用 hook 协议 V2,并将回退到不使用 fsmonitor(完全扫描)。Git 2.26 以前的版本默认使用 hook 协议 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 语言转义控制字符(例如 TAB 的 \t、LF 的 \n、反斜杠的 \\)相同的方式转义这些字符,或字节值大于 0x80(例如 UTF-8 中“微”的八进制 \302\265)来引用路径名中的“不寻常”字符。如果此变量设置为 false,则大于 0x80 的字节不再被视为“不寻常”。双引号、反斜杠和控制字符始终被转义,无论此变量的设置如何。简单的空格字符不被视为“不寻常”。许多命令可以使用 -z 选项完全按原样输出路径名。默认值为 true。

core.eol

设置工作目录中用于标记为文本的文件(通过设置 text 属性,或通过 text=auto 和 Git 自动检测内容为文本)的行尾类型。备选项包括 lfcrlfnative,其中 native 使用平台的本机行尾。默认值为 native。有关行尾转换的更多信息,请参阅 gitattributes[5]。请注意,如果 core.autocrlf 设置为 trueinput,则此值将被忽略。

core.safecrlf

如果为 true,当行尾转换激活时,Git 会检查 CRLF 转换是否可逆。Git 将验证命令是否直接或间接修改了工作树中的文件。例如,提交文件后检出同一文件应在工作树中产生原始文件。如果对于 core.autocrlf 的当前设置并非如此,Git 将拒绝该文件。变量可以设置为 "warn",在这种情况下,Git 只会警告不可逆转换但继续操作。

CRLF 转换有轻微的数据损坏风险。当启用时,Git 会在提交期间将 CRLF 转换为 LF,并在检出期间将 LF 转换为 CRLF。提交前包含 LF 和 CRLF 混合的文件无法由 Git 重新创建。对于文本文件,这是正确的做法:它纠正行尾,使我们在仓库中只有 LF 行尾。但对于被意外归类为文本的二进制文件,转换可能会损坏数据。

如果您及早发现此类损坏,可以通过在 .gitattributes 中明确设置转换类型轻松修复。提交后,您的工作树中仍然有原始文件,并且该文件尚未损坏。您可以明确告诉 Git 此文件是二进制文件,Git 将适当地处理该文件。

不幸的是,清理混合行尾文本文件的预期效果和损坏二进制文件的非预期效果无法区分。在这两种情况下,CRLF 都以不可逆的方式移除。对于文本文件,这是正确的做法,因为 CRLF 是行尾,而对于二进制文件,转换 CRLF 会损坏数据。

请注意,此安全检查并不意味着检出将生成一个与 core.eolcore.autocrlf 的不同设置的原始文件完全相同的文件,而仅适用于当前设置。例如,带有 LF 的文本文件将被 core.eol=lf 接受,并且稍后可以与 core.eol=crlf 一起检出,在这种情况下,生成的文件将包含 CRLF,尽管原始文件包含 LF。然而,在两个工作树中,行尾将是一致的,即全部是 LF 或全部是 CRLF,但绝不会混合。具有混合行尾的文件将由 core.safecrlf 机制报告。

core.autocrlf

将此变量设置为 "true" 等同于将所有文件的 text 属性设置为 "auto",并将 core.eol 设置为 "crlf"。如果您希望工作目录中具有 CRLF 行尾,并且仓库具有 LF 行尾,则将其设置为 true。此变量可以设置为 input,在这种情况下不执行输出转换。

core.checkRoundtripEncoding

一个以逗号和/或空格分隔的编码列表,如果它们在 working-tree-encoding 属性中使用(请参阅 gitattributes[5]),Git 会对它们执行 UTF-8 往返检查。默认值为 SHIFT-JIS

如果为 false,则将符号链接检出为包含链接文本的小型纯文件。git-update-index[1]git-add[1] 不会将记录类型更改为常规文件。在不支持符号链接的文件系统(如 FAT)上很有用。

默认值为 true,但 git-clone[1]git-init[1] 会在仓库创建时探测并适当地将 core.symlinks 设置为 false。

core.gitProxy

当使用 Git 协议进行获取时,将执行(作为 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 是符号链接的旧脚本一起使用。

此配置已弃用,并将在 Git 3.0 中移除。符号引用将始终以文本 symref 的形式写入。

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

启用引用日志。对引用 <ref> 的更新将被记录到文件 "$GIT_DIR/logs/<ref>" 中,通过附加新旧 SHA-1、日期/时间和更新原因,但仅当文件存在时。如果此配置变量设置为 true,则会自动为分支头(即 refs/heads/ 下)、远程引用(即 refs/remotes/ 下)、注释引用(即 refs/notes/ 下)和符号引用 HEAD 创建缺失的 "$GIT_DIR/logs/<ref>" 文件。如果设置为 always,则会自动为 refs/ 下的任何引用创建缺失的引用日志。

此信息可用于确定“两天前”哪个提交是分支的尖端。

在关联工作目录的仓库中,此值默认为 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 的引用名称模糊且可能与仓库中的多个引用匹配,Git 将警告您。默认为 true。

core.compression

一个整数 -1..9,表示默认压缩级别。-1 是 zlib 默认值。0 表示不压缩,1..9 是各种速度/大小的权衡,9 最慢。如果设置,这为其他压缩变量(例如 core.looseCompressionpack.compression)提供了默认值。

core.looseCompression

一个整数 -1..9,表示不在包文件中的对象的压缩级别。-1 是 zlib 默认值。0 表示不压缩,1..9 是各种速度/大小的权衡,9 最慢。如果未设置,则默认为 core.compression。如果未设置,则默认为 1(最佳速度)。

core.packedGitWindowSize

在单个映射操作中映射到内存中的包文件的字节数。较大的窗口大小可以使您的系统更快地处理少量大型包文件。较小的窗口大小会由于对操作系统内存管理器的调用增加而对性能产生负面影响,但可以在访问大量大型包文件时提高性能。

如果在编译时设置了 NO_MMAP,则默认值为 1 MiB,否则在 32 位平台上为 32 MiB,在 64 位平台上为 1 GiB。这应该对所有用户/操作系统都合理。您可能不需要调整此值。

支持 kmg 等常用单位后缀。

core.packedGitLimit

同时从包文件映射到内存的最大字节数。如果 Git 需要同时访问的字节数超过此限制才能完成操作,它将取消映射现有区域以在进程内回收虚拟地址空间。

在 32 位平台上默认为 256 MiB,在 64 位平台上默认为 32 TiB(实际上是无限的)。这应该对所有用户/操作系统都合理,除了最大的项目。您可能不需要调整此值。

支持 kmg 等常用单位后缀。

core.deltaBaseCacheLimit

每个线程用于缓存可能被多个差异化对象引用的基础对象的最大字节数。通过将整个解压缩的基础对象存储在缓存中,Git 可以避免多次解包和解压缩频繁使用的基础对象。

所有平台默认值为 96 MiB。这对于所有用户/操作系统来说都应该合理,除了最大的项目。您可能不需要调整此值。

支持 kmg 等常用单位后缀。

core.bigFileThreshold

被视为“大”的文件大小,如下所述,它会改变许多 git 命令的行为,以及此类文件在仓库中的存储方式。默认值为 512 MiB。支持 kmg 等常用单位后缀。

超过配置限制的文件将是

  • 以收缩形式存储在 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 之外,指定包含属性(参见 gitattributes[5])的文件路径。其默认值为 $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 3.0 中移除,原因如下:

  • 它与在提交消息模板中添加注释不兼容。这包括由 cherry-pickmergerebaserevert 添加到提交消息中的冲突注释。

  • 它与在 prepare-commit-msg 钩子中向提交消息添加注释不兼容。

  • 它与 rebase 时的 fixupsquash 命令不兼容。

  • 它不被 git notes 尊重

请注意,这两个变量是彼此的别名,在现代 Git 版本中,您可以自由地将字符串(例如,//⁑⁕⁑)与 commentChar 一起使用。v2.45.0 之前的 Git 版本将忽略 commentString,但会拒绝由单个 ASCII 字节组成的 commentChar 值。如果您计划将配置与旧版本和新版本 Git 一起使用,您可能希望同时指定这两个变量。

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

尝试锁定单个引用时重试的时间长度,以毫秒为单位。值 0 表示完全不重试;-1 表示无限期重试。默认值为 100(即重试 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 不会触发(默认不启用)。

  • incomplete-line 将文件最后一行缺少换行符视作错误(默认不启用)。

  • tabwidth=<n> 告知一个制表符占用多少个字符位置;这与 indent-with-non-tab 相关,并且当 Git 修复 tab-in-indent 错误时也相关。默认的制表符宽度为 8。允许的值为 1 到 63。

core.fsync

一个逗号分隔的仓库组件列表,这些组件在创建或修改时应通过 core.fsyncMethod 加固。您可以通过在其前缀加上 - 来禁用任何组件的加固。未加固的项在系统意外关闭时可能会丢失。除非您有特殊要求,否则建议您将此选项留空或选择 committedaddedall 之一。

当遇到此配置时,组件集从平台默认值开始,禁用的组件被删除,并添加额外的组件。none 重置状态,以便忽略平台默认值。

空字符串将 fsync 配置重置为平台默认值。大多数平台上的默认值等效于 core.fsync=committed,-loose-object,它具有良好的性能,但在系统意外关闭时存在丢失最新工作的风险。

  • none 清除 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 启用一种模式,该模式使用 writeout-only 刷新将多个更新暂存到磁盘回写缓存中,然后对一个虚拟文件进行一次完整的 fsync 以在操作结束时触发磁盘缓存刷新。

    目前 batch 模式仅适用于松散对象文件。其他仓库数据像指定 fsync 一样持久化。此模式预计在 macOS 上存储在 HFS+ 或 APFS 文件系统上的仓库以及在 Windows 上存储在 NTFS 或 ReFS 文件系统上的仓库与 fsync 一样安全。

core.fsyncObjectFiles

此布尔值将在写入对象文件时启用 fsync()。此设置已弃用。请改用 core.fsync。

此设置影响以松散对象形式添加到 Git 仓库的数据。当设置为 true 时,Git 将发出 fsync 或类似的系统调用来刷新缓存,以便在系统意外关闭时松散对象保持一致。

core.preloadIndex

git diff 等操作启用并行索引预加载

这可以加速 git diffgit status 等操作,特别是在 NFS 等具有弱缓存语义且 IO 延迟相对较高的文件系统上。启用后,Git 将并行执行索引与文件系统数据的比较,从而允许 IO 重叠。默认为 true。

core.unsetenvvars

仅限 Windows:逗号分隔的环境变量名称列表,需要在生成任何其他进程之前取消设置。默认为 PERL5LIB,以解决 Git for Windows 坚持使用自己的 Perl 解释器的事实。

core.createObject

您可以将其设置为 link,在这种情况下,使用硬链接,然后删除源文件,以确保对象创建不会覆盖现有对象。

在某些文件系统/操作系统组合上,这是不可靠的。在这种情况下,将此配置设置设置为 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

使用多包索引文件通过单个索引跟踪多个包文件。有关详细信息,请参阅 git-multi-pack-index[1]。默认为 true。

core.sparseCheckout

启用“稀疏检出”功能。有关详细信息,请参阅 git-sparse-checkout[1]

core.sparseCheckoutCone

启用稀疏检出功能的“锥形模式”。当 sparse-checkout 文件包含有限的模式集时,此模式提供了显著的性能优势。可以通过将此变量设置为 false 来请求“非锥形模式”,以允许指定更灵活的模式。有关详细信息,请参阅 git-sparse-checkout[1]

core.abbrev

设置对象名称的缩写长度。如果未指定或设置为“auto”,则根据仓库中打包对象的近似数量计算适当的值,希望足以使缩写对象名称在一段时间内保持唯一。如果设置为“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

通过计算源文件中删除的行数或目标文件中添加的行数来计算 dirstat 数字。这会忽略纯代码移动 within a file 的量。换句话说,重新排列文件中的行不如其他更改计数多。这是未提供任何参数时的默认行为。

lines

通过进行常规的基于行的 diff 分析,并对删除/添加的行数进行求和来计算 dirstat 数字。(对于二进制文件,则计算 64 字节块,因为二进制文件没有自然的行概念)。这是比 changes 行为更耗时的 --dirstat 行为,但它会像其他更改一样计算文件中重新排列的行。生成的输出与其他 --*stat 选项的输出一致。

files

通过计算已更改文件的数量来计算 dirstat 数字。在 dirstat 分析中,每个已更改的文件都同等重要。这是计算上最便宜的 --dirstat 行为,因为它根本不需要查看文件内容。

cumulative

将子目录中的更改也计入父目录。请注意,在使用 cumulative 时,报告的百分比总和可能超过 100%。可以使用 noncumulative 参数指定默认(非累积)行为。

<limit>

一个整数参数,指定一个截止百分比(默认为 3%)。对更改贡献低于此百分比的目录不会显示在输出中。

示例:以下将计算更改的文件,同时忽略更改文件总数少于 10% 的目录,并在父目录中累积子目录计数:files,10,cumulative

diff.statNameWidth

限制 --stat 输出中文件名部分的宽度。如果设置,则适用于除 format-patch 之外的所有生成 --stat 输出的命令。

diff.statGraphWidth

限制 --stat 输出中图形部分的宽度。如果设置,则适用于除 format-patch 之外的所有生成 --stat 输出的命令。

diff.context

生成具有 <n> 行上下文的差异,而不是默认的 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 status 通常显示子模块摘要(当 status.submoduleSummary 设置时),除非通过使用 --ignore-submodules 命令行选项覆盖。 git submodule 命令不受此设置影响。默认情况下,这设置为 untracked,以便忽略任何未跟踪的子模块。

diff.mnemonicPrefix

如果设置,git diff 会根据正在比较的内容使用不同于标准 a/b/ 的前缀对。当此配置生效时,反向差异输出也会交换前缀的顺序。

git diff

比较(i)索引和(w)工作树;

git diff HEAD

比较一个(c)提交和(w)工作树;

git diff --cached

比较一个(c)提交和(i)索引;

git diff HEAD:<file1> <file2>

比较一个(o)对象和一个(w)工作树实体;

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

比较两个非 Git 对象 <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 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

差异驱动程序应该用于识别块头部的正则表达式。也可以使用内置模式。有关详细信息,请参阅 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

控制 git-difftool[1] 在指定 -g/--gui 标志时使用的差异工具。此变量覆盖在 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 的值不同。这允许 git 仓库在对象格式与此 compatObjectFormat 匹配时进行客户端级别的互操作。特别是当完全实现时,从对象格式与 compatObjectFormat 匹配的仓库进行推拉操作。此外,除了可以使用 objectFormat 编码的 oids 外,还可以使用 compatObjectFormat 编码的 oids 在本地指定对象。

请注意,此扩展启用的功能不完整且可能会更改。它目前仅用于开发和测试底层功能,不旨在供最终用户启用。

noop

此扩展完全不改变 Git 的行为。它仅用于测试格式 1 的兼容性。

由于历史原因,无论 core.repositoryFormatVersion 设置如何,此扩展都受尊重。

noop-v1

此扩展完全不改变 Git 的行为。它仅用于测试格式 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 为 true,则必须将其从 $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 可以通过重用来自多个 pack 而不仅仅是一个 pack 的对象来缩短创建 pack 的时间。

  • pack.usePathWalk 可能会加快打包文件创建速度,并在某些文件名与 Git 默认名称哈希发生冲突时显著减小打包文件大小。

  • init.defaultRefFormat=reftable 导致新初始化的仓库使用 reftable 格式存储引用。这种新格式解决了不区分大小写的文件系统的问题,压缩效果更好,并在许多用例中表现出显著的性能提升。有关此新存储格式的更多信息,请参阅 Documentation/technical/reftable.adoc。

feature.manyFiles

启用配置选项,这些选项针对工作目录中文件数量众多的仓库进行优化。文件数量众多时,git statusgit checkout 等命令可能很慢,这些新默认值可以提高性能:

  • index.skipHash=true 通过不计算尾随校验和来加快索引写入速度。请注意,这会导致早于 2.13.0 版本的 Git 拒绝解析索引,并且早于 2.40.0 版本的 Git 在 git fsck 期间会报告索引损坏。

  • index.version=4 启用索引中的路径前缀压缩。

  • core.untrackedCache=true 启用未跟踪缓存。此设置假设您的机器上的 mtime 正常工作。

fetch.recurseSubmodules

此选项控制 git fetch(以及 git pull 中的底层 fetch)是否递归地抓取到已填充的子模块中。此选项可以设置为布尔值或 on-demand。将其设置为布尔值会更改 fetch 和 pull 的行为,设置为 true 时无条件递归到子模块中,设置为 false 时则完全不递归。当设置为 on-demand 时,fetch 和 pull 仅在超项目检索到更新子模块引用的提交时才递归到已填充的子模块中。默认为 on-demand,如果设置了 submodule.recurse,则默认为其值。

fetch.fsckObjects

如果设置为 true,git-fetch-pack 将检查所有抓取的对象。请参阅 transfer.fsckObjects 以了解检查内容。默认为 false。如果未设置,则使用 transfer.fsckObjects 的值。

fetch.fsck.<msg-id>

作用类似于 fsck.<msg-id>,但由 git-fetch-pack[1] 而不是 git-fsck[1] 使用。有关详细信息,请参阅 fsck.<msg-id> 文档。

fetch.fsck.skipList

作用类似于 fsck.skipList,但由 git-fetch-pack[1] 而非 git-fsck[1] 使用。详细信息请参阅 fsck.skipList 文档。

fetch.unpackLimit

如果通过 Git 原生传输获取的对象数量低于此限制,则这些对象将被解包为松散对象文件。但是,如果接收到的对象数量等于或超过此限制,则接收到的包将被存储为一个包,并在添加任何缺失的 delta 基础后。从推送中存储包可以使推送操作更快完成,尤其是在慢速文件系统上。如果未设置,则使用 transfer.unpackLimit 的值。

fetch.prune

如果为 true,则 fetch 将自动表现得像在命令行上给出了 --prune 选项。另请参阅 remote.<name>.prunegit-fetch[1] 的 PRUNING 部分。

fetch.pruneTags

如果为 true,并且尚未设置,则 fetch 将在修剪时自动表现得像提供了 refs/tags/*:refs/tags/* refspec。这允许设置此选项和 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

控制在协商服务器要发送的包文件内容时,如何发送关于本地仓库中提交的信息。设置为 consecutive 以使用遍历连续提交并检查每个提交的算法。设置为 skipping 以使用一种跳过提交以更快收敛的算法,但这可能导致比必要更大的包文件;或者设置为 noop 以完全不发送任何信息,这几乎肯定会导致比必要更大的包文件,但会跳过协商步骤。设置为 default 以覆盖之前所做的设置并使用默认行为。默认通常是 consecutive,但如果 feature.experimentaltrue,则默认是 skipping。未知值将导致 git fetch 出错。

另请参阅 git-fetch[1]--negotiate-only--negotiation-tip 选项。

fetch.showForcedUpdates

设置为 false 以在 git-fetch[1]git-pull[1] 命令中启用 --no-show-forced-updates。默认为 true

fetch.parallel

指定每次并行运行的最大 fetch 操作数量(子模块,或当 git-fetch[1]--multiple 选项生效时)。

值 0 将给出一些合理的默认值。如果未设置,则默认为 1。

对于子模块,此设置可以使用 submodule.fetchJobs 配置设置覆盖。

fetch.writeCommitGraph

如果设置为 true,则每个从远程下载包文件的 git fetch 命令后都会写入一个提交图。使用 --split 选项,大多数执行都会在现有提交图文件之上创建一个非常小的提交图文件。偶尔,这些文件会合并,写入可能需要更长时间。拥有更新的提交图文件有助于许多 Git 命令的性能,包括 git merge-basegit push -fgit log --graph。默认为 false

fetch.bundleURI

此值存储一个 URI,用于在从原始 Git 服务器执行增量获取之前,从捆绑 URI 下载 Git 对象数据。这类似于 git-clone[1]--bundle-uri 选项的行为。git clone --bundle-uri 如果提供的捆绑 URI 包含一个为增量获取组织的捆绑列表,则会设置 fetch.bundleURI 值。

如果您修改此值并且您的仓库具有 fetch.bundleCreationToken 值,请在从新捆绑 URI 获取之前删除该 fetch.bundleCreationToken 值。

fetch.bundleCreationToken

当使用 fetch.bundleURI 从使用“creationToken”启发式算法的捆绑列表进行增量获取时,此配置值存储已下载捆绑的最大 creationToken 值。此值用于防止将来下载捆绑,如果广告的 creationToken 不严格大于此值。

创建令牌值由提供特定捆绑 URI 的提供商选择。如果您修改 fetch.bundleURI 处的 URI,请务必在获取之前删除 fetch.bundleCreationToken 的值。

filter.<driver>.clean

用于在签入时将工作树文件内容转换为 blob 的命令。详细信息请参阅 gitattributes[5]

filter.<driver>.smudge

用于在检出时将 blob 对象内容转换为工作树文件的命令。详细信息请参阅 gitattributes[5]

format.attach

启用 multipart/mixed 附件作为 format-patch 的默认值。该值也可以是双引号字符串,它将启用附件作为默认值并将其设置为边界。请参阅 git-format-patch[1] 中的 --attach 选项。要抵消之前的值,请将其设置为空字符串。

format.from

为 format-patch 的 --from 选项提供默认值。接受布尔值或姓名和电子邮件地址。如果为 false,format-patch 默认为 --no-from,直接在补丁邮件的“From:”字段中使用提交作者。如果为 true,format-patch 默认为 --from,在补丁邮件的“From:”字段中使用您的提交者身份,如果不同,则在补丁邮件正文中包含一个“From:”字段。如果设置为非布尔值,format-patch 将使用该值而不是您的提交者身份。默认为 false。

format.forceInBodyFrom

为 format-patch 的 --[no-]force-in-body-from 选项提供默认值。默认为 false。

format.numbered

一个布尔值,可以启用或禁用补丁主题中的序列号。它默认为“auto”,只有当有多个补丁时才启用。可以通过将其设置为“true”或“false”来为所有消息启用或禁用。请参阅 git-format-patch[1] 中的 --numbered 选项。

format.headers

要包含在邮件提交补丁中的额外电子邮件头。请参阅 git-format-patch[1]

format.to
format.cc

要包含在邮件提交补丁中的额外收件人。请参阅 git-format-patch[1] 中的 --to 和 --cc 选项。

format.subjectPrefix

format-patch 的默认行为是输出带有 [PATCH] 主题前缀的文件。使用此变量可以更改该前缀。

format.coverFromDescription

format-patch 默认模式,用于确定封面信的哪些部分将使用分支描述填充。请参阅 git-format-patch[1] 中的 --cover-from-description 选项。

format.signature

format-patch 默认会输出包含 Git 版本号的签名。使用此变量可以更改该默认值。将此变量设置为空字符串("")以抑制签名生成。

format.signatureFile

与 format.signature 类似,但将使用此变量指定的文件内容作为签名。

format.suffix

format-patch 默认会输出后缀为 .patch 的文件。使用此变量可以更改该后缀(如果要包含点,请确保包含)。

format.encodeEmailHeaders

用“Q-编码”(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 选项提供默认值。接受布尔值,或指定从何处获取笔记的引用。如果为 false,format-patch 默认为 --no-notes。如果为 true,format-patch 默认为 --notes。如果设置为非布尔值,format-patch 默认为 --notes=<ref>,其中 ref 是非布尔值。默认为 false。

如果希望使用引用 refs/notes/true,请直接使用该字面量。

此配置可以指定多次,以便包含多个笔记引用。在这种情况下,它的行为将类似于传递了多个 --[no-]notes[=] 选项。也就是说,值为 true 将显示默认笔记,值为 <ref> 也将显示该笔记引用中的笔记,值为 false 将否定先前的配置并且不显示笔记。

例如,

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

将仅显示 refs/notes/bar 中的笔记。

format.mboxrd

一个布尔值,当使用 --stdout 时,它启用健壮的“mboxrd”格式来转义“^>+From”行。

format.noprefix

如果设置,则在补丁中不显示任何源或目标前缀。这相当于 git diff 使用的 diff.noprefix 选项(但 format-patch 不遵守)。请注意,通过设置此选项,您生成的任何补丁的接收者将必须使用 -p0 选项来应用它们。

fsck.<msg-id>

在 fsck 期间,git 可能会发现旧数据的问题,这些问题不会由当前版本的 git 生成,并且如果设置了 transfer.fsckObjects 也不会通过网络发送。此功能旨在支持使用包含此类数据的旧仓库。

设置 fsck.<msg-id> 将由 git-fsck[1] 拾取,但要接受此类数据的推送,请设置 receive.fsck.<msg-id>,或者要克隆或获取它,请设置 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 时,所有大于此限制的非杂乱包都将被保留。这与 --keep-largest-pack 非常相似,只是所有达到阈值的非杂乱包都将被保留,而不仅仅是最大的包。默认为零。支持常见的单位后缀 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 会导致早期于 1.5.1.2 版本的 Git 无法通过 dumb 传输(如 HTTP)克隆该仓库。此变量决定 git gc 是否运行 git pack-refs。可以将其设置为 notbare 以在所有非裸仓库中启用它,或者可以将其设置为布尔值。默认值为 true

gc.cruftPacks

将不可达对象存储在垃圾包中(参见 git-repack[1]),而不是作为松散对象。默认值为 true

gc.maxCruftSize

重新打包时限制新垃圾包的大小。如果同时指定了 --max-cruft-size,则命令行选项优先。请参阅 git-repack[1]--max-cruft-size 选项。

gc.pruneExpire

当运行 git gc 时,它将调用 prune --expire 2.weeks.ago(如果通过 gc.cruftPacks--cruft 使用垃圾包,则调用 repack --cruft --cruft-expiration 2.weeks.ago)。使用此配置变量覆盖宽限期。可以使用值“now”来禁用此宽限期并立即修剪不可达对象,或者使用“never”来抑制修剪。此功能有助于防止在 git gc 与另一个写入仓库的进程同时运行时发生损坏;请参阅 git-gc[1] 的“NOTES”部分。

gc.worktreePruneExpire

当运行 git gc 时,它会调用 git worktree prune --expire 3.months.ago。此配置变量可用于设置不同的宽限期。可以使用值“now”来禁用宽限期并立即修剪 $GIT_DIR/worktrees,或者使用“never”来抑制修剪。

gc.reflogExpire
gc.<pattern>.reflogExpire

git reflog expire 会删除早于此时间的 reflog 条目;默认为 90 天。值“now”会立即使所有条目过期,“never”则完全抑制过期。如果中间有“<pattern>”(例如“refs/stash”),则该设置仅适用于与 <pattern> 匹配的引用。

gc.reflogExpireUnreachable
gc.<pattern>.reflogExpireUnreachable

git reflog expire 删除早于此时间且无法从当前尖端访问的 reflog 条目;默认为 30 天。值“now”立即使所有条目过期,“never”则完全抑制过期。在中间带有“<pattern>”(例如“refs/stash”)时,此设置仅适用于与 <pattern> 匹配的引用。

这些类型的条目通常是使用 git commit --amendgit rebase 的结果,并且是在 amend 或 rebase 发生之前的提交。由于这些更改不是当前项目的一部分,大多数用户希望更快地使其过期,这就是为什么默认值比 gc.reflogExpire 更激进。

gc.recentObjectsHook

在考虑是否删除对象时(无论是生成垃圾包还是将不可达对象存储为松散对象),使用 shell 执行指定的命令。将其输出解释为 Git 将视为“最近”的对象 ID,无论其年龄如何。通过将其 mtimes 视为“现在”,输出中提到的任何对象(及其后代)都将被保留,无论其真实年龄如何。

输出必须每行包含一个十六进制对象 ID,不能有其他内容。在仓库中找不到的对象将被忽略。支持多个钩子,但所有钩子都必须成功退出,否则操作(生成垃圾包或解包不可达对象)将被停止。

gc.repackFilter

重新打包时,使用指定的过滤器将某些对象移动到单独的包文件中。请参阅 git-repack[1]--filter=<filter-spec> 选项。

gc.repackFilterTo

重新打包并使用过滤器时,请参阅 gc.repackFilter,指定的位置将用于创建包含过滤掉对象的包文件。警告:指定的位置应该是可访问的,例如使用 Git 替用机制,否则仓库可能会被 Git 视为损坏,因为它可能无法访问该包文件中的对象。请参阅 git-repack[1]--filter-to=<dir> 选项和 gitrepository-layout[5]objects/info/alternates 部分。

gc.rerereResolved

当运行 git rerere gc 时,您之前解决的冲突合并记录将保留此天数。您还可以使用更易读的“1.month.ago”等。默认值为 60 天。请参阅 git-rerere[1]

gc.rerereUnresolved

当运行 git rerere gc 时,您尚未解决的冲突合并记录将保留此天数。您还可以使用更易读的“1.month.ago”等。默认值为 15 天。请参阅 git-rerere[1]

gitcvs.commitMsgAnnotation

将此字符串附加到每个提交消息。设置为空字符串以禁用此功能。默认为“via git-CVS emulator”。

gitcvs.enabled

是否为该仓库启用 CVS 服务器接口。请参阅 git-cvsserver[1]

gitcvs.logFile

日志文件的路径,CVS 服务器接口将在此处记录各种信息。请参阅 git-cvsserver[1]

gitcvs.usecrlfattr

如果为 true,服务器将查找文件的行尾转换属性以确定要使用的 -k 模式。如果属性强制 Git 将文件视为文本,则 -k 模式将留空,以便 CVS 客户端将其视为文本。如果它们抑制文本转换,则文件将设置为 -kb 模式,这将抑制客户端可能进行的任何换行符处理。如果属性不允许确定文件类型,则使用 gitcvs.allBinary。请参阅 gitattributes[5]

gitcvs.allBinary

如果 gitcvs.usecrlfattr 未解析出正确的 -kb 模式,则使用此选项。如果为 true,所有未解析的文件都以 -kb 模式发送给客户端。这会导致客户端将它们视为二进制文件,从而抑制客户端可能进行的任何换行符处理。或者,如果将其设置为“guess”,则检查文件内容以确定它是否是二进制文件,类似于 core.autocrlf

gitcvs.dbName

git-cvsserver 用于缓存从 Git 仓库派生的修订信息的数据库。确切含义取决于所使用的数据库驱动程序,对于 SQLite(默认驱动程序),这是一个文件名。支持变量替换(详细信息请参阅 git-cvsserver[1])。不能包含分号(;)。默认值:%Ggitcvs.%m.sqlite

gitcvs.dbDriver

使用的 Perl DBI 驱动程序。您可以在此处指定任何可用的驱动程序,但它可能不起作用。git-cvsserver 已使用 DBD::SQLite 进行测试,据报告与 DBD::Pg 兼容,并据报告与 DBD::mysql 兼容。实验性功能。不得包含双冒号(:)。默认值:SQLite。请参阅 git-cvsserver[1]

gitcvs.dbUser
gitcvs.dbPass

数据库用户和密码。仅在设置 gitcvs.dbDriver 时有用,因为 SQLite 没有数据库用户和/或密码的概念。gitcvs.dbUser 支持变量替换(详细信息请参阅 git-cvsserver[1])。

gitcvs.dbTableNamePrefix

数据库表名前缀。添加到使用的任何数据库表的名称前,允许单个数据库用于多个仓库。支持变量替换(有关详细信息,请参阅 git-cvsserver[1])。任何非字母字符都将替换为下划线。

除了 gitcvs.usecrlfattrgitcvs.allBinary 之外,所有 gitcvs 变量也可以指定为 gitcvs.<access_method>.<varname>(其中 access_method 是“ext”和“pserver”之一),以使它们仅适用于给定的访问方法。

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

详细信息请参阅 gitweb[1]

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

详细信息请参阅 gitweb.conf[5]

gpg.program

在创建或验证 PGP 签名时,代替“gpg”使用的程序的路径名。该程序必须支持与 GPG 相同的命令行接口,即,要验证分离签名,运行“gpg --verify $signature - <$file”,并且程序预计通过退出代码 0 来表示良好的签名。要生成 ASCII-armored 分离签名,将要签名的内容提供给“gpg -bsau $key”的标准输入,并且程序预计将其结果发送到其标准输出。

gpg.format

指定使用 --gpg-sign 签名时使用的密钥格式。默认值为“openpgp”。其他可能的值是“x509”、“ssh”。

有关签名格式,请参阅 gitformat-signature[5],它根据所选的 gpg.format 而有所不同。

gpg.<format>.program

使用此项可以自定义您选择的签名格式所使用的程序。(请参阅 gpg.programgpg.formatgpg.program 仍然可以用作 gpg.openpgp.program 的旧式同义词。gpg.x509.program 的默认值为“gpgsm”,gpg.ssh.program 的默认值为“ssh-keygen”。

gpg.minTrustLevel

指定签名验证的最低信任级别。如果未设置此选项,则合并操作的签名验证需要具有至少 marginal 信任的密钥。执行签名验证的其他操作需要具有至少 undefined 信任的密钥。设置此选项会覆盖所有操作所需的信任级别。支持的值,按重要性递增的顺序排列

  • undefined

  • never

  • marginal

  • fully

  • ultimate

gpg.ssh.defaultKeyCommand

当 user.signingkey 未设置且请求 ssh 签名时,将运行此命令。如果成功退出,其输出的第一行应包含以 key:: 为前缀的有效 ssh 公钥。这允许脚本在不方便静态配置 user.signingKey 时动态查找正确的公钥。例如,当密钥或 SSH 证书频繁轮换或正确密钥的选择取决于 Git 未知的外部因素时。

gpg.ssh.allowedSignersFile

一个包含您愿意信任的 ssh 公钥的文件。该文件由一行或多行主体(principals)后跟一个 ssh 公钥组成。例如:user1@example.com,user2@example.com ssh-rsa AAAAX1... 详细信息请参阅 ssh-keygen(1) 的“ALLOWED SIGNERS”部分。主体仅用于标识密钥,并在验证签名时可用。

SSH 没有像 gpg 那样信任级别的概念。为了能够区分有效签名和受信任签名,当公钥存在于 allowedSignersFile 中时,签名验证的信任级别设置为 fully。否则,信任级别为 undefined,并且 git verify-commit/tag 将失败。

此文件可以设置在仓库之外的位置,每个开发人员维护自己的信任存储。中央仓库服务器可以根据具有推送访问权限的 ssh 密钥自动生成此文件,以验证代码。在企业环境中,此文件可能由已经处理开发人员 ssh 密钥的自动化工具在全球位置生成。

只允许签名提交的仓库可以将文件存储在仓库本身中,使用相对于工作树顶层路径的路径。这样,只有拥有有效密钥的提交者才能在密钥环中添加或更改密钥。

自 OpensSSH 8.8 起,此文件允许使用 valid-after 和 valid-before 选项指定密钥生命周期。如果签名密钥在签名创建时有效,Git 会将签名标记为有效。这允许用户更改签名密钥而不会使所有以前的签名失效。

使用带有 cert-authority 选项的 SSH CA 密钥(参见 ssh-keygen(1) "CERTIFICATES")也是有效的。

gpg.ssh.revocationFile

SSH KRL 或已吊销公钥列表(不带主体前缀)。详细信息请参阅 ssh-keygen(1)。如果在此文件中找到公钥,则它将始终被视为具有“never”信任级别,并且签名将显示为无效。

grep.lineNumber

如果设置为 true,则默认启用 -n 选项。

grep.column

如果设置为 true,则默认启用 --column 选项。

grep.patternType

设置默认匹配行为。使用 basicextendedfixedperl 值将相应启用 --basic-regexp--extended-regexp--fixed-strings--perl-regexp 选项,而值 default 将使用 grep.extendedRegexp 选项在 basicextended 之间选择。

grep.extendedRegexp

如果设置为 true,则默认启用 --extended-regexp 选项。当 grep.patternType 选项设置为 default 以外的值时,此选项将被忽略。

grep.threads

使用的 grep 工作线程数。如果未设置(或设置为 0),Git 将使用与可用逻辑核心数量相同的线程数。

grep.fullName

如果设置为 true,则默认启用 --full-name 选项。

grep.fallbackToNoIndex

如果设置为 true,则在 git grep 在 git 仓库之外执行时,回退到 git grep --no-index。默认为 false。

gui.commitMsgWidth

定义 git-gui[1] 中提交消息窗口的宽度。默认值为“75”。

gui.diffContext

指定 git-gui[1] 进行的 diff 调用中应使用的上下文行数。默认值为“5”。

gui.displayUntracked

确定 git-gui[1] 是否在文件列表中显示未跟踪文件。默认值为“true”。

gui.encoding

指定 git-gui[1]gitk[1] 中显示文件内容的默认字符编码。可以通过为相关文件设置 encoding 属性(参见 gitattributes[5])来覆盖它。如果未设置此选项,则工具默认为区域设置编码。

gui.matchTrackingBranch

确定使用 git-gui[1] 创建的新分支是否应默认为跟踪名称匹配的远程分支。默认值:“false”。

gui.newBranchTemplate

在使用 git-gui[1] 创建新分支时用作建议名称。

gui.pruneDuringFetch

如果 git-gui[1] 在执行 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] 中显示选定提交的历史上下文的天数半径。如果此变量设置为零,则显示整个历史记录。

gui.GCWarning

确定当 git 检测到仓库中有大量松散对象时,git-gui[1] 是否应提示进行垃圾回收。默认值为“true”。

guitool.<name>.cmd

指定当调用 git-gui[1] Tools 菜单的相应项时要执行的 shell 命令行。此选项对于每个工具都是强制性的。命令从工作目录的根目录执行,并且在环境中它接收工具的名称作为 GIT_GUITOOL,当前选定文件的名称作为 FILENAME,以及当前分支的名称作为 CUR_BRANCH(如果 HEAD 分离,CUR_BRANCH 为空)。

guitool.<name>.needsFile

仅当在 GUI 中选择了 diff 时才运行该工具。它确保 FILENAME 不为空。

guitool.<name>.noConsole

静默运行命令,不创建窗口显示其输出。

guitool.<name>.noRescan

工具执行完成后,不重新扫描工作目录以查找更改。

guitool.<name>.confirm

在实际运行工具之前显示确认对话框。

guitool.<name>.argPrompt

向用户请求一个字符串参数,并通过 ARGS 环境变量将其传递给工具。由于请求参数意味着确认,因此如果启用此选项,confirm 选项将不起作用。如果选项设置为 trueyes1,则对话框使用内置的通用提示;否则使用变量的确切值。

guitool.<name>.revPrompt

向用户请求一个有效的修订版本,并设置 REVISION 环境变量。在其他方面,此选项与 argPrompt 类似,并且可以与其一起使用。

guitool.<name>.revUnmerged

仅在 revPrompt 子对话框中显示未合并的分支。这对于类似于 merge 或 rebase 的工具很有用,但对于 checkout 或 reset 等工具则不适用。

guitool.<name>.title

指定用于提示对话框的标题。默认是工具名称。

guitool.<name>.prompt

指定要在对话框顶部显示的通用提示字符串,位于 argPromptrevPrompt 子部分之前。默认值包含实际命令。

help.browser

指定将用于以 web 格式显示帮助的浏览器。请参阅 git-help[1]

help.format

覆盖 git-help[1] 使用的默认帮助格式。支持的值有 maninfowebhtmlman 是默认值。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 摘要身份验证;这可以防止密码以明文形式传输到代理

  • 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

尝试不请求用户名或密码进行身份验证。这可以用于在 URL 中不指定用户名的情况下尝试 GSS-Negotiate 身份验证,因为 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(es)。第二种格式清除该 HOST:PORT 组合的所有先前配置值。为了方便地覆盖从系统配置继承的所有设置,空值将重置所有解析信息为空列表。

http.sslVersion

协商 SSL 连接时使用的 SSL 版本,如果要强制使用默认值。可用版本和默认版本取决于 libcurl 是否针对 NSS 或 OpenSSL 构建以及所用加密库的特定配置。内部设置 CURLOPT_SSL_VERSION 选项;有关此选项格式和支持的 SSL 版本的更多详细信息,请参阅 libcurl 文档。目前此选项的可能值为

  • sslv2

  • sslv3

  • tlsv1

  • tlsv1.0

  • tlsv1.1

  • tlsv1.2

  • tlsv1.3

可以通过 GIT_SSL_VERSION 环境变量覆盖。要强制 git 使用 libcurl 的默认 ssl 版本并忽略任何显式的 http.sslversion 选项,请将 GIT_SSL_VERSION 设置为空字符串。

http.sslCipherList

协商 SSL 连接时使用的 SSL 密码列表。可用密码取决于 libcurl 是针对 NSS 还是 OpenSSL 构建,以及所用加密库的特定配置。内部设置 CURLOPT_SSL_CIPHER_LIST 选项;有关此列表格式的更多详细信息,请参阅 libcurl 文档。

可以通过 GIT_SSL_CIPHER_LIST 环境变量覆盖。要强制 git 使用 libcurl 的默认密码列表并忽略任何显式的 http.sslCipherList 选项,请将 GIT_SSL_CIPHER_LIST 设置为空字符串。

http.sslVerify

通过 HTTPS 获取或推送时是否验证 SSL 证书。默认为 true。可以通过 GIT_SSL_NO_VERIFY 环境变量覆盖。

http.sslCert

通过 HTTPS 获取或推送时包含 SSL 证书的文件。可以通过 GIT_SSL_CERT 环境变量覆盖。

http.sslKey

通过 HTTPS 获取或推送时包含 SSL 私钥的文件。可以通过 GIT_SSL_KEY 环境变量覆盖。

http.sslCertPasswordProtected

启用 Git 的 SSL 证书密码提示。否则,如果证书或私钥已加密,OpenSSL 可能会多次提示用户。可以通过 GIT_SSL_CERT_PASSWORD_PROTECTED 环境变量覆盖。

http.sslCAInfo

通过 HTTPS 获取或推送时,包含用于验证对等方的证书的文件。可以通过 GIT_SSL_CAINFO 环境变量覆盖。

http.sslCAPath

包含 CA 证书文件的路径,用于通过 HTTPS 获取或推送时验证对等方。可以通过 GIT_SSL_CAPATH 环境变量覆盖。

http.sslBackend

要使用的 SSL 后端名称(例如“openssl”或“schannel”)。如果 cURL 缺乏在运行时选择 SSL 后端的支持,则忽略此选项。

http.sslCertType

通过 HTTPS 获取或推送时使用的客户端证书类型。“PEM”、“DER”在使用 openssl 或 gnutls 后端时受支持。“P12”在“openssl”、“schannel”、“securetransport”和 gnutls 8.11+ 上受支持。另请参阅 libcurl CURLOPT_SSLCERTTYPE。可以通过 GIT_SSL_CERT_TYPE 环境变量覆盖。

http.sslKeyType

通过 HTTPS 获取或推送时使用的客户端私钥类型(例如“PEM”、“DER”或“ENG”)。仅在使用“openssl”后端时适用。“DER”不支持 openssl。当设置为“ENG”用于使用 PKCS#11 令牌进行身份验证时特别有用,其中 sslCert 选项中包含 PKCS#11 URL。另请参阅 libcurl CURLOPT_SSLKEYTYPE。可以通过 GIT_SSL_KEY_TYPE 环境变量覆盖。

http.schannelCheckRevoke

当 http.sslBackend 设置为“schannel”时,用于强制或禁用 cURL 中的证书吊销检查。如果未设置,则默认为 true。仅当 Git 持续出错且消息是关于检查证书的吊销状态时才需要禁用此功能。如果 cURL 缺乏在运行时设置相关 SSL 选项的支持,则忽略此选项。

http.schannelUseSSLCAInfo

自 cURL v7.60.0 起,Secure Channel 后端可以使用通过 http.sslCAInfo 提供的证书捆绑包,但这会覆盖 Windows 证书存储。由于这不是默认情况下期望的,因此当通过 http.sslBackend 配置了 schannel 后端时,Git 会默认告诉 cURL 不使用该捆绑包,除非 http.schannelUseSSLCAInfo 覆盖此行为。

http.pinnedPubkey

https 服务的公钥。它可以是 PEM 或 DER 编码的公钥文件名,也可以是以 sha256// 开头,后跟公钥的 base64 编码的 sha256 散列字符串。另请参阅 libcurl CURLOPT_PINNEDPUBLICKEY。如果设置了此选项但 cURL 不支持,git 将报错并退出。

http.sslTry

尝试在通过常规FTP协议连接时使用AUTH SSL/TLS和加密数据传输。如果FTP服务器出于安全原因需要这样做,或者您希望在远程FTP服务器支持时安全连接,则可能需要此操作。默认为false,因为它可能在配置错误的服务器上触发证书验证错误。

http.maxRequests

并行启动的HTTP请求数。可以通过GIT_HTTP_MAX_REQUESTS环境变量覆盖。默认值为5。

http.minSessions

跨请求保留的curl会话数(跨槽计数)。它们不会在调用http_cleanup()之前使用curl_easy_cleanup()结束。如果未定义USE_CURL_MULTI,则此值将限制为1。默认为1。

http.postBuffer

智能HTTP传输在向远程系统POST数据时使用的缓冲区最大字节数。对于大于此缓冲区大小的请求,使用HTTP/1.1和Transfer-Encoding: chunked以避免在本地创建大型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命令。这对于一些不支持EPSV模式的“糟糕”ftp服务器可能会有所帮助。可以通过GIT_CURL_FTP_NO_EPSV环境变量覆盖。默认值为false(curl将使用EPSV)。

http.userAgent

呈现给HTTP服务器的HTTP USER_AGENT字符串。默认值表示Git客户端的版本,例如git/1.7.1。此选项允许您将此值覆盖为更常见的值,例如Mozilla/4.0。例如,如果通过限制HTTP连接到一组常见USER_AGENT字符串(但不包括git/1.7.1等)的防火墙连接,则可能需要此操作。可以通过GIT_HTTP_USER_AGENT环境变量覆盖。

http.followRedirects

git是否应遵循HTTP重定向。如果设置为true,git将透明地遵循服务器发出的任何重定向。如果设置为false,git将把所有重定向视为错误。如果设置为initial,git将仅在对远程的初始请求时遵循重定向,但不对后续的HTTP请求遵循重定向。由于git使用重定向的URL作为后续请求的基础,这通常已足够。默认值为initial

http.<url>.*

上述任何http.*选项都可以选择性地应用于某些URL。要使配置键与URL匹配,配置键的每个元素将按以下顺序与URL的相应元素进行比较:

  1. 方案(例如,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.DraftsINBOX/Drafts[Gmail]/Drafts。必须指定要交互的IMAP文件夹;当未提供--folder选项时,此配置变量的值用作备用默认值。

imap.tunnel

用于通过隧道设置IMAP服务器的命令,命令将通过该隧道进行管道传输,而不是使用直接网络连接到服务器。当imap.host未设置时必需。

imap.host

标识服务器的URL。非安全连接使用imap://前缀,安全连接使用imaps://前缀。当imap.tunnel设置时忽略,否则必需。

imap.user

登录服务器时使用的用户名。

imap.pass

登录服务器时使用的密码。

imap.port

连接到服务器的整数端口号。imap://主机默认为143,imaps://主机默认为993。当imap.tunnel设置时忽略。

imap.sslverify

一个布尔值,用于启用/禁用对SSL/TLS连接使用的服务器证书的验证。默认值为true。当imap.tunnel设置时忽略。

imap.preformattedHTML

一个布尔值,用于启用/禁用在发送补丁时使用html编码。html编码的补丁将用<pre>括起来,并具有text/html的内容类型。讽刺的是,启用此选项会导致Thunderbird将补丁作为plain/text、format=fixed电子邮件发送。默认值为false

imap.authMethod

指定用于IMAP服务器身份验证的身份验证方法。如果Git是使用NO_CURL选项构建的,或者您的curl版本低于7.34.0,或者您正在使用--no-curl选项运行git-imap-send,则唯一支持的方法是PLAINCRAM-MD5OAUTHBEARERXOAUTH2。如果未设置此选项,则git imap-send使用基本的IMAP明文LOGIN命令。

include.path
includeIf.<condition>.path

用于包含其他配置文件的特殊变量。请参阅主git-config[1]文档中的“CONFIGURATION FILE”部分,特别是“Includes”和“Conditional Includes”子部分。

index.recordEndOfIndexEntries

指定索引文件是否应包含“索引条目结束”部分。这在多处理器机器上可以减少索引加载时间,但在使用2.20之前的Git版本读取索引时会产生“ignoring EOIE extension”消息。如果已明确启用index.threads,则默认为true,否则为false

index.recordOffsetTable

指定索引文件是否应包含“索引条目偏移表”部分。这在多处理器机器上可以减少索引加载时间,但在使用2.20之前的Git版本读取索引时会产生“ignoring IEOT extension”消息。如果已明确启用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

允许覆盖新存储库的默认 ref 存储格式。请参阅 git-init[1] 中的 --ref-format=。命令行选项和 GIT_DEFAULT_REF_FORMAT 环境变量都优先于此配置。

instaweb.browser

指定将用于在gitweb中浏览您的工作仓库的程序。参见git-instaweb[1]

instaweb.httpd

启动gitweb在您的工作仓库上的HTTP守护程序命令行。参见git-instaweb[1]

instaweb.local

如果为true,则由git-instaweb[1]启动的Web服务器将绑定到本地IP(127.0.0.1)。

instaweb.modulePath

git-instaweb[1]使用的默认模块路径,而不是/usr/lib/apache2/modules。仅当httpd是Apache时使用。

instaweb.port

gitweb httpd绑定的端口号。参见git-instaweb[1]

interactive.singleKey

设置为true时,允许用户在交互式命令中通过单个按键(即,无需按Enter键)提供一个字母的输入。目前,git-add[1]git-checkout[1]git-restore[1]git-commit[1]git-reset[1]git-stash[1]--patch模式使用此功能。

interactive.diffFilter

当交互式命令(例如git add --patch)显示彩色差异时,git会将差异通过此配置变量定义的shell命令管道输出。该命令可以进一步标记差异以供人阅读,前提是它与原始差异中的行保持一一对应。默认禁用(无过滤)。

log.abbrevCommit

如果为true,则使git-log[1]git-show[1]git-whatchanged[1]假定--abbrev-commit。您可以使用--no-abbrev-commit覆盖此选项。

log.date

设置log命令的默认日期时间模式。为log.date设置值类似于使用git log--date选项。有关详细信息,请参阅git-log[1]

如果格式设置为“auto:foo”且正在使用分页器,则日期格式将使用“foo”。否则,将使用“default”。

log.decorate

打印出日志命令显示的所有提交的引用名称。可能的值有

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,当给定单个时,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时,如果没有提供--task=<task>参数,则会影响运行哪些任务。此设置会影响手动维护、自动维护以及计划维护。根据维护类型的不同,运行的任务可能会有所不同。

通过设置maintenance.<task>.enabledmaintenance.<task>.schedule,可以进一步调整维护策略。如果设置,这些值将代替maintenance.strategy提供的默认值。

可能的策略有

  • none:此策略表示不运行任何任务。这是计划维护的默认策略。

  • gc:此策略运行gc任务。这是手动维护的默认策略。

  • geometric:此策略执行pack文件的几何重打包并使辅助数据结构保持最新。该策略会使reflog中的数据过期并删除无法再找到的工作树。当几何重打包策略决定进行一体化重打包时,该策略会为所有不可达对象生成一个cruft包。已属于cruft包的对象将过期。

    此重打包策略完全替代了gc策略,建议用于大型仓库。

  • incremental:此设置优化执行不删除任何数据的小型维护活动。它不安排gc任务,而是每小时运行prefetchcommit-graph任务,每天运行loose-objectsincremental-repack任务,每周运行pack-refs任务。手动仓库维护使用gc任务。

maintenance.<task>.enabled

此布尔配置选项控制在未向git maintenance run指定--task选项时,是否运行名称为<task>的维护任务。如果存在--task选项,则忽略这些配置值。默认情况下,只有maintenance.gc.enabled为true。

maintenance.<task>.schedule

此配置选项控制在运行git maintenance run --schedule=<frequency>命令期间是否运行给定的<task>。该值必须是“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任务期间写入pack文件的松散对象的最大数量。默认值为五万。使用值0表示没有限制。

maintenance.incremental-repack.auto

此整数配置选项控制incremental-repack任务作为git maintenance run --auto的一部分运行的频率。如果为零,则incremental-repack任务不会与--auto选项一起运行。负值将强制任务每次都运行。否则,正值表示当不在multi-pack-index中的pack文件数量至少等于maintenance.incremental-repack.auto的值时,命令应该运行。默认值为10。

maintenance.geometric-repack.auto

此整数配置选项控制geometric-repack任务作为git maintenance run --auto的一部分运行的频率。如果为零,则geometric-repack任务不会与--auto选项一起运行。负值将强制任务每次都运行。否则,正值表示当存在需要合并以保持几何级数增长的pack文件,或者存在至少这么多松散对象将被写入新的pack文件时,命令应该运行。默认值为100。

maintenance.geometric-repack.splitFactor

此整数配置选项控制用于几何序列的因子。有关详细信息,请参阅git-repack[1]中的--geometric=选项。默认为2

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时没有commit参数,则通过使用当前分支的远程跟踪分支中存储的最后观察到的值,合并为当前分支配置的上游分支。branch.<current branch>.merge中命名branch.<current-branch>.remote所命名的远程分支的值会被查询,然后通过remote.<remote>.fetch映射到它们对应的远程跟踪分支,并将这些跟踪分支的最新提交合并。默认为true。

merge.ff

默认情况下,当合并的提交是当前提交的后代时,Git不会创建额外的合并提交。相反,当前分支的最新提交会快进。当设置为false时,此变量会告诉Git在这种情况下创建额外的合并提交(相当于从命令行给出--no-ff选项)。当设置为only时,只允许这种快进合并(相当于从命令行给出--ff-only选项)。

merge.verifySignatures

如果为true,则等同于--verify-signatures命令行选项。有关详细信息,请参见git-merge[1]

merge.branchdesc

除了分支名称之外,还用与它们关联的分支描述文本填充日志消息。默认为 false。

merge.log

除了分支名称之外,还会用最多指定数量的实际合并提交的单行描述填充日志消息。默认为 false,true 是 20 的同义词。

merge.suppressDest

通过将匹配集成(integration)分支名称的 glob 添加到此多值配置变量中,计算出的合并到这些集成分支的默认合并消息将省略标题中的“into <branch-name>”。

可以使用一个空值的元素来清除从先前配置条目累积的 glob 列表。当没有定义 merge.suppressDest 变量时,为了向后兼容,将使用 master 的默认值。

merge.renameLimit

在合并过程中,在重命名检测的详尽部分中考虑的文件数量。如果未指定,则默认为diff.renameLimit的值。如果merge.renameLimitdiff.renameLimit都未指定,则目前默认为7000。如果关闭重命名检测,此设置无效。

merge.renames

Git是否检测重命名。如果设置为false,则禁用重命名检测。如果设置为true,则启用基本重命名检测。默认为diff.renames的值。

merge.directoryRenames

Git是否检测目录重命名,这会影响在历史记录的一侧将新文件添加到目录中,而该目录在历史记录的另一侧被重命名时,合并时发生的情况。可能的值为

false

禁用目录重命名检测,这意味着此类新文件将保留在旧目录中。

true

启用目录重命名检测,这意味着此类新文件将被移动到新目录中。

conflict

将报告此类路径的冲突。

如果merge.renamesfalse,则merge.directoryRenames将被忽略并视为false。默认为conflict

merge.renormalize

告诉Git仓库中文件的规范表示随时间发生了变化(例如,较早的提交使用CRLF行尾记录文本文件,但最近的提交使用LF行尾)。在这种仓库中,对于每个需要三向内容合并的文件,Git可以在执行合并之前将提交中记录的数据转换为规范形式,以减少不必要的冲突。有关更多信息,请参阅gitattributes[5]中“Merging branches with differing checkin/checkout attributes”一节。

merge.stat

在合并结束时,ORIG_HEAD和合并结果之间打印什么(如果有)。可能的值为

false

什么都不显示。

true

显示git diff --diffstat --summary ORIG_HEAD

compact

显示git diff --compact-summary ORIG_HEAD

但任何无法识别的值(例如,Git未来版本添加的值)都被视为true,而不是触发错误。默认为true

merge.autoStash

设置为true时,在操作开始前自动创建一个临时暂存条目,并在操作结束后应用它。这意味着您可以在脏工作树上运行合并。但是,请谨慎使用:成功合并后的最终暂存应用可能会导致非平凡的冲突。此选项可以通过git-merge[1]--no-autostash--autostash选项覆盖。默认为false

merge.tool

控制git-mergetool[1]使用的合并工具。下面的列表显示了有效的内置值。任何其他值都被视为自定义合并工具,并需要定义相应的mergetool.<tool>.cmd变量。

merge.guitool

控制git-mergetool[1]在指定-g/--gui标志时使用的合并工具。下面的列表显示了有效的内置值。任何其他值都被视为自定义合并工具,并需要定义相应的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无条件地使用meld--auto-merge选项。将此值设置为auto会使git检测是否支持--auto-merge,并且仅在可用时使用--auto-merge。值为false则完全避免使用--auto-merge,这也是默认值。

mergetool.<variant>.layout

配置vimdiff的<variant>的分裂窗口布局,其中<variant>可以是vimdiffnvimdiffgvimdiff中的任何一个。在启动git mergetool时使用--tool=<variant>(或者如果merge.tool配置为<variant>则不带--tool),Git将查询mergetool.<variant>.layout以确定工具的布局。如果变体特定配置不可用,则使用vimdiff的配置作为备用。如果该配置也不可用,则使用带有4个窗口的默认布局。要配置布局,请参阅git-mergetool[1]中的后端特定提示部分。

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

在将 notes 合并到 refs/notes/<name> 时选择的合并策略。这会覆盖更通用的 notes.mergeStrategy。有关可用策略的更多信息,请参阅 git-notes[1] 的“NOTES MERGE STRATEGIES”部分。

notes.displayRef

除了由 core.notesRefGIT_NOTES_REF 默认设置之外,还从哪个 ref(或 refs,如果是 glob 或指定多次)读取 notes,用于在显示提交消息时(使用 git-log[1] 系列命令)。

此设置可以通过 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 不会从原始提交复制 notes 到重写的提交。默认为 true。另请参阅下面的 notes.rewriteRef

此设置可以通过 GIT_NOTES_REWRITE_REF 环境变量覆盖,该变量必须是一个以冒号分隔的引用或 glob 列表。

notes.rewriteMode

复制重写笔记时(请参阅 notes.rewrite.<command> 选项),确定在目标提交已包含笔记时应执行的操作。必须是以下值之一:overwriteconcatenatecat_sort_uniqignore。默认为 concatenate

此设置可以通过 GIT_NOTES_REWRITE_MODE 环境变量覆盖。

notes.rewriteRef

在重写期间复制备注时,指定(完全限定的)要复制备注的引用。可以是一个 glob,在这种情况下,所有匹配引用中的备注都将被复制。您也可以多次指定此配置。

没有默认值;您必须配置此变量才能启用备注重写。将其设置为 refs/notes/commits 以启用默认提交备注的重写。

可以通过 GIT_NOTES_REWRITE_REF 环境变量覆盖。有关其格式的进一步描述,请参见上面的 notes.rewrite.<command>

pack.window

当命令行上未给出窗口大小时,git-pack-objects[1]使用的窗口大小。默认为10。

pack.depth

当命令行上未给出最大深度时,git-pack-objects[1]使用的最大delta深度。默认为50。最大值为4095。

pack.windowMemory

当命令行上未给出限制时,git-pack-objects[1]中每个线程消耗的pack窗口内存的最大内存量。该值可以附加“k”、“m”或“g”后缀。如果未配置(或显式设置为0),则没有限制。

pack.compression

一个整数-1..9,表示pack文件中对象的压缩级别。-1是zlib默认值。0表示无压缩,1..9是各种速度/大小的权衡,9是最慢的。如果未设置,默认为core.compression。如果未设置该值,则默认为-1,即zlib默认值,“速度和压缩之间的默认折衷(目前相当于级别6)”。

请注意,更改压缩级别不会自动重新压缩所有现有对象。您可以通过向git-repack[1]传递-F选项来强制重新压缩。

pack.allowPackReuse

当为true或“single”且可达性位图启用时,pack-objects将尝试按字面发送位图pack文件的部分。当为“multi”且多包可达性位图可用时,pack-objects将尝试发送MIDX中所有pack的部分。

如果只有单个pack位图可用,并且pack.allowPackReuse设置为“multi”,则仅重用位图pack文件的部分。这可以减少内存和CPU使用量以服务抓取,但可能导致发送稍大的pack。默认为true。

pack.island

一个扩展正则表达式,用于配置一组delta islands。有关详细信息,请参阅git-pack-objects[1]中的“DELTA ISLANDS”。

pack.islandCore

指定一个岛屿名称,该岛屿的对象将首先被打包。这会在一个包的前面创建一个伪包,以便来自指定岛屿的对象能够更快地复制到任何应该提供给请求这些用户的包中。实际上,这意味着指定的岛屿可能应该对应于仓库中最常克隆的内容。另请参阅git-pack-objects[1]中的“DELTA ISLANDS”。

pack.deltaCacheSize

git-pack-objects[1]中用于缓存delta的内存最大字节数,然后将其写入pack。此缓存用于通过在找到所有对象的最佳匹配后无需重新计算最终delta结果来加快写入对象阶段的速度。但是,在内存紧张的机器上重新打包大型仓库可能会受到严重影响,尤其是当此缓存导致系统进行交换时。值为0表示无限制。最小大小为1字节可用于虚拟禁用此缓存。默认为256 MiB。

pack.deltaCacheLimit

git-pack-objects[1]中缓存的delta的最大大小。此缓存用于通过在找到所有对象的最佳匹配后无需重新计算最终delta结果来加快写入对象阶段的速度。默认为1000。最大值为65535。

pack.threads

指定在搜索最佳delta匹配时要生成的线程数。这要求git-pack-objects[1]使用pthreads编译,否则此选项将被忽略并发出警告。这旨在减少多处理器机器上的打包时间。但是,delta搜索窗口所需的内存量会乘以线程数。指定0将使Git自动检测CPU数量并相应设置线程数。

pack.indexVersion

指定默认的pack索引版本。有效值包括Git 1.5.2之前版本使用的传统pack索引的1,以及具有大于4 GB pack能力以及正确保护防止损坏pack重新打包的新pack索引的2。版本2是默认值。请注意,当相应pack大于2 GB时,版本2是强制执行的,此配置选项将被忽略。

如果您有一个不支持版本2 *.idx文件的旧版Git,通过非原生协议(例如“http”)克隆或抓取,该协议将从另一侧复制*.pack文件和相应的*.idx文件,可能会导致您的旧版Git无法访问仓库。但是,如果*.pack文件小于2 GB,您可以使用git-index-pack[1]在*.pack文件上重新生成*.idx文件。

pack.packSizeLimit

包的最大大小。此设置仅影响重新打包时向文件打包,即git://协议不受影响。它可以通过git-repack[1]--max-pack-size选项覆盖。达到此限制会导致创建多个包文件。

请注意,此选项很少有用,并且可能导致总磁盘大小更大(因为Git不会在包之间存储增量)和更差的运行时性能(在多个包中查找对象比单个包慢,并且像可达性位图这样的优化无法处理多个包)。

如果您需要使用较小的packfile主动运行Git(例如,因为您的文件系统不支持大文件),此选项可能会有所帮助。但如果您的目标是通过支持有限大小的介质(例如,无法存储整个仓库的可移动介质)传输packfile,您最好创建单个大packfile并使用通用多卷存档工具(例如Unix split)将其拆分。

允许的最小大小限制为1 MiB。默认是无限制。支持常见的单位后缀kmg

pack.useBitmaps

如果为true,git将在打包到标准输出时(例如,在抓取的服务器端)使用pack位图(如果可用)。默认为true。通常您不需要关闭此功能,除非您正在调试pack位图。

pack.useBitmapBoundaryTraversal

当为true时,Git将使用实验性算法来计算带有位图的可达性查询。它不是为所有否定提示构建完整的位图然后将它们进行OR运算,而是将带有现有位图的否定提示视为加性的(即,如果它们存在则将其OR运算到结果中,否则忽略它们),并在边界处构建位图。

使用此算法时,Git可能会因不打开属于某些UNINTERESTING提交的树而包含过多的对象。这种不精确性与非位图遍历算法相匹配。

在许多情况下,这可以提供比精确算法更快的速度,尤其是在查询的否定侧位图覆盖率较差时。

pack.useSparse

如果为true,当存在--revs选项时,git默认在git pack-objects中使用--sparse选项。此算法仅遍历出现在引入新对象的路径中的树。这在计算打包以发送少量更改时可以带来显著的性能优势。但是,如果包含的提交包含某些类型的直接重命名,则可能会将额外的对象添加到pack文件中。默认值为true

pack.usePathWalk

默认启用git pack-objects进程的--path-walk选项。有关详细信息,请参见git-pack-objects[1]

pack.preferBitmapTips

在选择哪些提交将接收位图时,优先选择任何在此配置的任何值的后缀的引用尖端的提交,而不是“选择窗口”中的任何其他提交。

请注意,将此配置设置为refs/foo并不意味着refs/foo/barrefs/foo/baz尖端的提交必然会被选中。这是因为提交是从一系列可变长度的窗口中选择用于位图的。

如果在窗口中看到任何此配置的任何值的后缀的引用尖端的提交,它会立即优先于该窗口中的任何其他提交。

pack.writeBitmaps (deprecated)

这是repack.writeBitmaps的已弃用同义词。

pack.writeBitmapHashCache

如果为true,git将在位图索引中包含一个“哈希缓存”部分(如果写入)。此缓存可用于为git的delta启发式算法提供数据,可能导致位图对象和非位图对象之间更好的delta(例如,在为旧的、位图化的pack和自上次gc以来已推送的对象提供抓取服务时)。缺点是它会消耗每个对象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]和批量签入机制之外的所有地方写入的每个新packfile写入相应的.rev文件(参见:gitformat-pack[5])。默认为true。

pager.<cmd>

如果该值为布尔值,则在写入tty时打开或关闭特定Git子命令输出的分页功能。否则,使用pager.<cmd>的值指定的寻呼器打开子命令的分页功能。如果在命令行上指定--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.sendFields

一个逗号或空格分隔的额外远程相关字段名称列表。服务器在通告其promisor远程时,使用“promisor-remote”能力(参见gitprotocol-v2[5])发送这些字段名称和相关的字段值。目前,仅支持“partialCloneFilter”和“token”字段名称。

partialCloneFilter

包含用于远程的部分克隆过滤器。

token

包含用于远程的认证令牌。

当一个字段名是此列表的一部分,并且服务器上将相应的“remote.foo.<field-name>”配置变量设置为非空值时,则在通告promisor远程“foo”时发送该字段名和值。

除非“promisor.advertise”配置变量设置为“true”,否则此列表无效,并且“name”和“url”字段始终被通告,无论此设置如何。

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]

promisor.checkFields

一个逗号或空格分隔的附加远程相关字段名称列表。客户端在接受promisor远程之前,会检查服务器传输的这些字段值是否与其自身配置中的这些字段值相对应。目前,只支持“partialCloneFilter”和“token”字段名称。

如果正在检查已通告的promisor远程(例如“foo”)的某个字段名(例如“token”),则必须满足以下三个条件,才能通过此特定字段的检查

  1. 必须设置相应的本地配置(例如remote.foo.token)。

  2. 服务器必须为远程“foo”通告“token”字段。

  3. 本地配置的 remote.foo.token 的值必须与服务器为“token”字段公布的值完全匹配。

    如果 promisor.checkFields 中列出的任何字段名称不满足这些条件中的任何一个,则将拒绝公布的远程“foo”。

    对于“partialCloneFilter”字段,这允许客户端确保服务器的过滤器与其本地期望的匹配,从而防止过滤行为不一致。对于“token”字段,这可用于验证身份验证凭据是否与预期值匹配。

    字段值区分大小写进行比较。

    “name”和“url”字段始终根据 promisor.acceptFromServer 策略进行检查,与此设置无关。

    服务器应通过使用 promisor.sendFields 配置变量,通过“promisor-remote”功能传递字段名称和值。仅当 promisor.acceptFromServer 配置变量未设置为“None”时才检查字段。如果设置为“None”,则此配置变量无效。请参阅 gitprotocol-v2[5]

protocol.allow

如果设置,为所有未明确设置策略的协议(protocol.<name>.allow)提供用户定义的默认策略。默认情况下,如果未设置,已知安全协议(http、https、git、ssh)的默认策略为 always,已知危险协议(ext)的默认策略为 never,所有其他协议(包括文件)的默认策略为 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.autoStash

当设置为 true 时,操作开始前自动创建一个临时暂存条目以记录本地更改,并在操作完成后恢复它们。当您的“git pull”进行变基(而不是合并)时,这可能很方便,因为与合并拉取容忍不干扰合并的本地更改不同,变基拉取拒绝处理任何本地更改。

如果设置了 pull.autostash(无论是 true 还是 false),则会忽略 merge.autostashrebase.autostash。如果根本没有设置 pull.autostash,则根据 pull.rebase 的值,改用 merge.autostashrebase.autostash。可以通过 --[no-]autostash 命令行选项覆盖。

pull.twohead

拉取单个分支时使用的默认合并策略。

push.autoSetupRemote

如果设置为 true,则当当前分支不存在上游跟踪时,默认推送到远程时假定 --set-upstream;此选项对 push.default 选项 simpleupstreamcurrent 生效。如果您希望默认将新分支推送到默认远程(类似于 push.default=current 的行为),并且还希望设置上游跟踪,则此选项很有用。最有可能从此选项受益的工作流是 simple 集中式工作流,其中所有分支在远程上都应具有相同的名称。

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 的行为就好像此变量的每个 <option> 都被给定为 --push-option=<option>

这是一个多值变量,更高优先级的配置文件(例如仓库中的 .git/config)可以使用空值来清除从较低优先级配置文件(例如 $HOME/.gitconfig)继承的值。

Example:

/etc/gitconfig
  push.pushoption = a
  push.pushoption = b

~/.gitconfig
  push.pushoption = c

repo/.git/config
  push.pushoption =
  push.pushoption = b

This will result in only b (a and c are cleared).
push.recurseSubmodules

可以是 checkon-demandonlyno,其行为与 push --recurse-submodules 相同。如果未设置,默认使用 no,除非设置了 submodule.recurse(在这种情况下,true 值表示 on-demand)。

push.useForceIfIncludes

如果设置为 true,则相当于在命令行中将 --force-if-includes 指定为 git-push[1] 的选项。在推送时添加 --no-force-if-includes 会覆盖此配置设置。

push.negotiate

如果设置为 true,则尝试通过多轮协商来减小发送的包文件大小,其中客户端和服务器尝试查找共同的提交。如果为 false,Git 将完全依赖服务器的引用广告来查找共同的提交。

push.useBitmaps

如果设置为 false,则禁用 git push 使用位图,即使 pack.useBitmapstrue,但不会阻止其他 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 发送带有“nonce”的推送证书时,如果该“nonce”是由服务同一仓库的 receive-pack 在这么多秒内发出的,则将证书中找到的“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

如果推送中接收到的对象数量低于此限制,则这些对象将被解包到松散对象文件中。但是,如果接收到的对象数量等于或超过此限制,则接收到的包将被存储为一个包,在添加任何缺失的增量基础之后。从推送中存储包可以使推送操作更快完成,尤其是在慢速文件系统上。如果未设置,则改用 transfer.unpackLimit 的值。

receive.maxInputSize

如果传入包流的大小大于此限制,则 git-receive-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 轻松访问时(例如,实时网站,因此需要工作目录干净)。此模式在 VM 中开发以测试和修复不同操作系统上的代码时也很有用。

默认情况下,“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 后端在文件创建时确定重启点。对于较小的块大小(4k 或 8k),每 16 个可能更合适;对于较大的块大小(64k),每 64 个可能更合适。

更频繁的重启点会降低前缀压缩效率并增加重启表消耗的空间,这两者都会增加文件大小。

较不频繁的重启点会使前缀压缩更有效,从而减小整体文件大小,但会增加读者在二进制搜索步骤后遍历更多记录的开销。

每个块最多支持 65535 个重启点。

默认值是每 16 条记录创建一个重启点。值为 0 将使用默认值。

reftable.indexObjects

reftable 后端是否应写入对象块。对象块是对象 ID 到指向它们的引用的反向映射。

默认值为 true

reftable.geometricFactor

每当 reftable 后端向堆栈追加新表时,它都会执行自动压缩以确保只有少量表。后端通过确保表在各自表的大小方面形成几何序列来实现此目的。

默认情况下,几何序列使用因子 2,这意味着对于任何表,下一个最大表必须至少是其两倍大。最大支持因子为 256。

reftable.lockTimeout

每当 reftable 后端向堆栈追加新表时,它必须在更新中央“tables.list”文件之前锁定它。此配置控制在另一个进程已获取锁的情况下,该进程将等待多长时间以获取锁。值 0 表示完全不重试;-1 表示无限期重试。默认值为 100(即重试 100 毫秒)。

remote.pushDefault

默认推送到的远程。覆盖所有分支的 branch.<name>.remote,并被特定分支的 branch.<name>.pushRemote 覆盖。

remote.<name>.url

远程仓库的 URL。请参阅 git-fetch[1]git-push[1]。已配置的远程可以有多个 URL;在这种情况下,第一个用于抓取,所有都用于推送(假设未定义 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] 的默认“refspec”集。请参阅 git-fetch[1]

remote.<name>.push

git-push[1] 的默认“refspec”集。请参阅 git-push[1]

remote.<name>.mirror

如果为 true,则推送到此远程将自动表现为在命令行上给定了 --mirror 选项。

remote.<name>.skipDefaultUpdate

remote.<name>.skipFetchAll 的已弃用同义词(如果两者在配置文件中设置了不同的值,则使用最后出现的值)。

remote.<name>.skipFetchAll

如果为 true,则在使用 git-fetch[1]git-remote[1]update 子命令进行更新时,此远程将被跳过,并被 git maintenance 的预取任务忽略。

remote.<name>.receivepack

推送时在远程端执行的默认程序。请参阅 git-push[1] 的 --receive-pack 选项。

remote.<name>.uploadpack

从远程端抓取时要执行的默认程序。请参阅 git-fetch-pack[1] 的 --upload-pack 选项。

remote.<name>.tagOpt

将此值设置为 --no-tags 会禁用从远程 <name> 抓取时自动跟踪标签。将其设置为 --tags 将从远程 <name> 抓取所有标签,即使它们无法从远程分支头访问。直接将这些标志传递给 git-fetch[1] 可以覆盖此设置。请参阅 git-fetch[1] 的 --tags 和 --no-tags 选项。

remote.<name>.vcs

将其设置为值 <vcs> 将使 Git 与 git-remote-<vcs> 助手进行远程交互。

remote.<name>.prune

如果设置为 true,则默认情况下,从该远程抓取时还将删除远程上不再存在的任何远程跟踪引用(就像在命令行上给定了 --prune 选项一样)。覆盖 fetch.prune 设置(如果有)。

remote.<name>.pruneTags

当设置为 true 时,如果通过 remote.<name>.prunefetch.prune--prune 总体上激活了修剪,则默认情况下从该远程抓取时还会删除远程上不再存在的任何本地标签。覆盖 fetch.pruneTags 设置(如果有)。

另请参阅 remote.<name>.prunegit-fetch[1] 的修剪部分。

remote.<name>.promisor

如果设置为 true,此远程将用于获取 promisor 对象。

remote.<name>.partialclonefilter

从这个 promisor 远程抓取时将应用的过滤器。更改或清除此值只会影响新提交的抓取。要抓取本地对象数据库中已存在的提交的相关对象,请使用 git-fetch[1]--refetch 选项。

remote.<name>.serverOption

从该远程抓取时使用的服务器选项的默认集。这些服务器选项可以通过 --server-option= 命令行参数覆盖。

这是一个多值变量,更高优先级的配置文件(例如仓库中的 .git/config)可以使用空值来清除从较低优先级配置文件(例如 $HOME/.gitconfig)继承的值。

remote.<name>.followRemoteHEAD

git-fetch[1] 在使用远程的配置 refspec 抓取时,应如何处理 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] 创建使用增量基偏移的包。如果您需要与 Git 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 时)会写入位图索引。此索引可以加快克隆和抓取后续包的“counting objects”阶段,但会以一些磁盘空间和初始重新打包额外花费的时间为代价。如果创建了多个包文件,此功能无效。裸仓库默认为 true,否则为 false。

repack.updateServerInfo

如果设置为 false,git-repack[1] 将不会运行 git-update-server-info[1]。默认为 true。可以通过 git-repack[1]-n 选项在为 true 时覆盖。

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

当生成 cruft pack 且未在命令行中给出相应参数时,git-pack-objects[1] 使用的参数。有关默认值和含义,请参阅同名的 pack.* 配置变量。

repack.midxMustContainCruft

当设置为 true 时,当使用 --write-midx 调用时,git-repack[1] 将无条件地在多包索引中包含 cruft pack(如果有)。当为 false 时,cruft pack 仅在必要时(例如,因为它们可能需要与 MIDX 位图形成可达性闭包)才包含在 MIDX 中。默认为 true。

rerere.autoUpdate

当设置为 true 时,git-rerere 在使用先前记录的解决方案干净地解决冲突后,会用结果内容更新索引。默认为 false。

rerere.enabled

激活已解决冲突的记录,以便在再次遇到相同冲突的块时可以自动解决。默认情况下,如果 $GIT_DIR 下存在 rr-cache 目录(例如,如果以前在仓库中使用过“rerere”),则启用 git-rerere[1]

revert.reference

将此变量设置为 true 会使 git revert 的行为如同给定了 --reference 选项。

safe.bareRepository

指定 Git 将使用的裸仓库。当前支持的值是

  • all:Git 适用于所有裸仓库。这是默认设置。

  • explicit:Git 仅适用于通过顶级 --git-dir 命令行选项或 GIT_DIR 环境变量指定的裸仓库(请参阅 git[1])。

    如果您的工作流中不使用裸仓库,那么将全局配置中的 safe.bareRepository 设置为 explicit 可能会很有益。这将保护您免受涉及克隆包含裸仓库的仓库并在该目录中运行 Git 命令的攻击。

    此配置设置仅在受保护配置中受尊重(请参阅 SCOPES)。这可以防止不受信任的仓库篡改此值。

safe.directory

这些配置条目指定了被认为是安全的 Git 跟踪目录,即使它们由非当前用户拥有。默认情况下,Git 会拒绝解析由他人拥有的仓库的 Git 配置,更不用说运行其钩子了,此配置设置允许用户指定例外情况,例如针对有意共享的仓库(请参阅 git-init[1] 中的 --shared 选项)。

这是一个多值设置,即您可以通过 git config --add 添加多个目录。要重置安全目录列表(例如,覆盖系统配置中指定的任何此类目录),请添加一个值为空的 safe.directory 条目。

此配置设置仅在受保护配置中受尊重(请参阅 SCOPES)。这可以防止不受信任的仓库篡改此值。

此设置的值是插值的,即 ~/<path> 扩展为相对于主目录的路径,%(prefix)/<path> 扩展为相对于 Git(运行时)前缀的路径。

要完全退出此安全检查,请将 safe.directory 设置为字符串 *。这将允许所有仓库都被视为其目录已列在 safe.directory 列表中。如果 safe.directory=* 在系统配置中设置,并且您希望重新启用此保护,则在列出您认为安全的仓库之前,请使用空值初始化您的列表。将目录附加 /* 允许访问指定目录下的所有仓库。

如前所述,默认情况下,Git 仅允许您访问由自己(即运行 Git 的用户)拥有的仓库。但是,当 Git 在非 Windows 平台上以 root 身份运行且提供 sudo 时,git 会检查 sudo 创建的 SUDO_UID 环境变量,除了 root 的 id 外,还将允许访问其值中记录的 uid。这是为了方便在安装期间执行常见的序列“make && sudo make install”。在 sudo 下运行的 git 进程以 root 身份运行,但 sudo 命令导出环境变量以记录原始用户具有哪个 id。如果您不希望这样,并希望 git 仅信任由 root 拥有的仓库,那么您可以在调用 git 之前从 root 的环境中删除 SUDO_UID 变量。

sendemail.identity

一个配置身份。给定后,sendemail.<identity> 小节中的值将优先于 sendemail 小节中的值。默认身份是 sendemail.identity 的值。

sendemail.smtpEncryption

有关描述,请参阅 git-send-email[1]。请注意,此设置不受 identity 机制的影响。

sendemail.smtpSSLCertPath

CA 证书的路径(可以是目录或单个文件)。设置为空字符串以禁用证书验证。

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.file。因此,此文件中的条目优先于默认邮件映射位置中的条目。请参阅 gitmailmap[5]

sendemail.mailmap.blob

类似于 sendemail.mailmap.file,但将该值视为仓库中 blob 的引用。sendemail.mailmap.file 中的条目优先于此处的条目。请参阅 gitmailmap[5]

sendemail.aliasesFile

为避免输入冗长的电子邮件地址,请将其指向一个或多个电子邮件别名文件。您还必须提供 sendemail.aliasFileType

sendemail.aliasFileType

sendemail.aliasesFile 中指定的文件格式。必须是 muttmailrcpineelmgnussendmail 之一。

每种格式的别名文件是什么样子,可以在同名电子邮件程序的文档中找到。标准格式的差异和限制如下所述

sendmail
  • 不支持带引号的别名和带引号的地址:包含 " 符号的行将被忽略。

  • 不支持重定向到文件(/path/name)或管道(|command)。

  • 不支持文件包含(:include: /path/name)。

  • 对于任何明确不支持的构造,以及解析器无法识别的任何其他行,都会在标准错误输出上打印警告。

sendemail.annotate
sendemail.bcc
sendemail.cc
sendemail.ccCmd
sendemail.chainReplyTo
sendemail.envelopeSender
sendemail.from
sendemail.headerCmd
sendemail.signedOffByCc
sendemail.smtpPass
sendemail.suppressCc
sendemail.suppressFrom
sendemail.to
sendemail.toCmd
sendemail.smtpDomain
sendemail.smtpServer
sendemail.smtpServerPort
sendemail.smtpServerOption
sendemail.smtpUser
sendemail.imapSentFolder
sendemail.useImapOnly
sendemail.thread
sendemail.transferEncoding
sendemail.validate
sendemail.xmailer

这些配置变量都为 git-send-email[1] 命令行选项提供了默认值。有关详细信息,请参阅其文档。

sendemail.outlookidfix

如果为 true,则使 git-send-email[1] 假定 --outlook-id-fix,如果为 false 则假定 --no-outlook-id-fix。如果未指定,则行为与未指定 --outlook-id-fix 相同。

sendemail.signedOffCc (已弃用)

sendemail.signedOffByCc 的已弃用别名。

sendemail.smtpBatchSize

每个连接发送的消息数,之后将重新登录。如果值为 0 或未定义,则在一个连接中发送所有消息。另请参阅 git-send-email[1]--batch-size 选项。

sendemail.smtpReloginDelay

重新连接到 SMTP 服务器前等待的秒数。另请参阅 git-send-email[1]--relogin-delay 选项。

sendemail.forbidSendmailVariables

为了避免常见的配置错误,如果存在任何 sendmail 的配置选项,git-send-email[1] 将终止并发出警告。设置此变量以绕过此检查。

sequence.editor

git rebase -i 用于编辑变基指令文件的文本编辑器。该值旨在在使用时由 shell 解释。它可以通过 GIT_SEQUENCE_EDITOR 环境变量覆盖。如果未配置,则使用默认提交消息编辑器。

showBranch.default

git-show-branch[1] 的默认分支集。请参阅 git-show-branch[1]

sparse.expectFilesOutsideOfPatterns

通常在稀疏检出中,不匹配任何稀疏模式的文件在索引中被标记为 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 命令的 basename(使用环境变量 GIT_SSHGIT_SSH_COMMAND 或配置设置 core.sshCommand 配置)确定要使用的命令行参数。如果 basename 未被识别,Git 将尝试通过首先使用 -G(打印配置)选项调用配置的 SSH 命令来检测 OpenSSH 选项的支持,然后将使用 OpenSSH 选项(如果成功)或除了主机和远程命令之外不使用任何选项(如果失败)。

可以设置配置变量 ssh.variant 来覆盖此检测。有效值为 ssh(使用 OpenSSH 选项)、plinkputtytortoiseplinksimple(除了主机和远程命令之外不使用任何选项)。可以使用值 auto 显式请求默认自动检测。任何其他值都被视为 ssh。此设置也可以通过环境变量 GIT_SSH_VARIANT 覆盖。

每个变体当前使用的命令行参数如下

  • ssh - [-p port] [-4] [-6] [-o option] [username@]host command

  • simple - [username@]host command

  • plinkputty - [-P port] [-4] [-6] [username@]host command

  • tortoiseplink - [-P port] [-4] [-6] -batch [username@]host command

除了 simple 变体之外,命令行参数可能会随着 Git 获得新功能而改变。

stash.index

如果此项设置为 true,git stash applygit stash pop 将会表现得如同提供了 --index 选项一样。默认为 false。参阅 git-stash[1] 中的描述。

这也会影响通过 git-merge[1]git-rebase[1]git-pull[1] 等命令使用 --autostash 调用 git-stash[1]

stash.showIncludeUntracked

如果此项设置为 true,git stash show 命令将显示储藏条目的未跟踪文件。默认为 false。参阅 git-stash[1] 中 'show' 命令的描述。

stash.showPatch

如果此项设置为 true,不带选项的 git stash show 命令将以补丁形式显示储藏条目。默认为 false。参阅 git-stash[1] 中 'show' 命令的描述。

stash.showStat

如果此项设置为 true,不带选项的 git stash show 命令将显示储藏条目的差异统计。默认为 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

设置为 true 以在 git-status[1] 中默认启用 --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 的命令以及它们是否受此设置支持。

  • checkoutfetchgreppullpushread-treeresetrestoreswitch 始终受支持。

  • clonels-files 不受支持。

  • branch 仅在启用 submodule.propagateBranches 时受支持。

submodule.propagateBranches

[实验性] 一个布尔值,在使用 --recurse-submodulessubmodule.recurse=true 时启用分支支持。启用此功能将允许某些命令接受 --recurse-submodules,并且某些已接受 --recurse-submodules 的命令现在将考虑分支。默认为 false。

submodule.fetchJobs

指定同时获取/克隆的子模块数量。正整数允许最多同时获取该数量的子模块。值为 0 将给出一些合理的默认值。如果未设置,则默认为 1。

submodule.alternateLocation

指定子模块克隆时如何获取 alternates。可能的值有 nosuperproject。默认假定为 no,不添加引用。当值设置为 superproject 时,要克隆的子模块会计算其 alternates 位置相对于超级项目的 alternate。

submodule.alternateErrorStrategy

指定如何处理通过 submodule.alternateLocation 计算的子模块 alternates 错误。可能的值有 ignoreinfodie。默认值为 die。请注意,如果设置为 ignoreinfo,并且计算出的 alternate 存在错误,则克隆会像未指定 alternate 一样继续进行。

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 时,timefilenameline 字段将从 PERF 输出中省略。可能会被 GIT_TRACE2_PERF_BRIEF 环境变量覆盖。默认为 false。

trace2.eventBrief

布尔值。当为 true 时,timefilenameline 字段将从事件输出中省略。可能会被 GIT_TRACE2_EVENT_BRIEF 环境变量覆盖。默认为 false。

trace2.eventNesting

整数。指定事件输出中嵌套区域的所需深度。深度超过此值的区域将被省略。可能会被 GIT_TRACE2_EVENT_NESTING 环境变量覆盖。默认为 2。

trace2.configParams

逗号分隔的“重要”配置设置模式列表,应记录在 trace2 输出中。例如,core.*,remote.*.url 将导致 trace2 输出包含列出每个已配置远程的事件。可能会被 GIT_TRACE2_CONFIG_PARAMS 环境变量覆盖。默认未设置。

trace2.envVars

逗号分隔的“重要”环境变量列表,应记录在 trace2 输出中。例如,GIT_HTTP_USER_AGENT,GIT_CONFIG 将导致 trace2 输出包含列出 HTTP 用户代理和 Git 配置文件位置的覆盖事件(假设已设置)。可能会被 GIT_TRACE2_ENV_VARS 环境变量覆盖。默认未设置。

trace2.destinationDebug

布尔值。当为 true 时,如果跟踪目标无法打开以进行写入,Git 将打印错误消息。默认情况下,这些错误被抑制,跟踪被静默禁用。可能会被 GIT_TRACE2_DST_DEBUG 环境变量覆盖。

trace2.maxFiles

整数。当将跟踪文件写入目标目录时,如果这样做会超过此文件数量,则不写入额外的跟踪。而是写入一个 sentinel 文件,该文件将阻止进一步跟踪到此目录。默认为 0,禁用此检查。

trailer.separators

此选项告诉哪些字符被识别为预告片分隔符。默认情况下,只有 : 被识别为预告片分隔符,但 = 始终在命令行上被接受,以与其它 git 命令兼容。

此选项给出的第一个字符将是默认字符,当在配置中未为该预告片指定另一个分隔符时使用。

例如,如果此选项的值为 "%=$",则只有使用 <key><sep><value> 格式的行,其中 <sep> 包含 %=$ 且后跟空格,才会被视为预告片。并且 % 将是使用的默认分隔符,因此默认情况下预告片将显示为:<key>% <value>(键和值之间将出现一个百分号和一个空格)。

trailer.where

此选项告诉新预告片将添加到何处。

它可以是 end(默认)、startafterbefore

如果它是 end,则每个新预告片将出现在现有预告片的末尾。

如果它是 start,则每个新预告片将出现在现有预告片的开头,而不是末尾。

如果它是 after,则每个新预告片将出现在具有相同 <key> 的最后一个预告片之后。

如果它是 before,则每个新预告片将出现在具有相同 <key> 的第一个预告片之前。

trailer.ifexists

此选项使得可以选择当输入中已存在至少一个具有相同 <key> 的预告片时将执行的操作。

此选项的有效值为:addIfDifferentNeighbor(默认值)、addIfDifferentaddreplacedoNothing

使用 addIfDifferentNeighbor,只有当在将添加新预告片的行上方或下方没有具有相同 (<key>, <value>) 对的预告片时,才会添加新预告片。

使用 addIfDifferent,只有当输入中尚未存在具有相同 (<key>, <value>) 对的预告片时,才会添加新预告片。

使用 add,即使输入中已存在一些具有相同 (<key>, <value>) 对的预告片,也会添加新预告片。

使用 replace,将删除一个具有相同 <key> 的现有预告片,并添加新预告片。删除的预告片将是距离新预告片将添加位置最近的预告片(具有相同 <key>)。

使用 doNothing,将不执行任何操作;也就是说,如果输入中已存在一个具有相同 <key> 的预告片,则不会添加新预告片。

trailer.ifmissing

此选项使得可以选择当输入中尚未存在任何具有相同 <key> 的预告片时将执行的操作。

此选项的有效值为:add(默认值)和 doNothing

使用 add,将添加新预告片。

使用 doNothing,将不执行任何操作。

trailer.<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] 中的“隔离环境”。在获取端,格式不正确的对象将未被引用地留在仓库中。

由于 fetch.fsckObjects 实现的非隔离性质,不能依赖它像 receive.fsckObjects 那样使对象存储干净。

随着对象被解包,它们会被写入对象存储,因此在某些情况下,即使“fetch”失败,恶意对象也会被引入,只在随后的“fetch”成功,因为只检查新的传入对象,而不是已经写入对象存储的对象。这种行为差异不应被依赖。将来,此类对象也可能被“fetch”隔离。

目前,偏执的人需要找到某种方式来模拟隔离环境,如果他们想获得与“push”相同的保护。例如,在内部镜像的情况下,分两步进行镜像,一步获取不受信任的对象,然后进行第二次“push”(将使用隔离)到另一个内部仓库,并让内部客户端使用此推送到的仓库,或者禁止内部获取,并且只在完整的“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] 手册页“安全性”部分中描述的技术窃取目标对象;最好将私有数据保存在单独的仓库中。

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] 的“安全性”部分中的讨论。默认为 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 准备包时可能会有一段安静期。通常它会输出进度信息,但如果 fetch 使用了 --quietpack-objects 将在包数据开始之前完全不输出任何内容。一些客户端和网络可能会认为服务器已挂起并放弃。设置此选项会指示 upload-packuploadpack.keepAlive 秒发送一个空的 keepalive 包。将此选项设置为 0 将完全禁用 keepalive 包。默认值为 5 秒。

uploadpack.packObjectsHook

如果设置此选项,当 upload-pack 运行 git pack-objects 为客户端创建包文件时,它将改为运行此 shell 命令。它 本应 运行的 pack-objects 命令和参数(包括开头的 git pack-objects)将附加到 shell 命令中。钩子的标准输入和标准输出被视为 pack-objects 本身被运行。也就是说,upload-pack 将把 intended for pack-objects 的输入提供给钩子,并期望在标准输出上获得一个完整的包文件。

请注意,此配置变量仅在受保护配置中指定时才有效(参阅 SCOPES)。这是一种防止从不受信任的仓库获取的安全措施。

uploadpack.allowFilter

如果设置此选项,upload-pack 将支持部分克隆和部分获取对象过滤。

uploadpackfilter.allow

为未指定的对象过滤器提供默认值(参阅:以下配置变量)。如果设置为 true,这也将启用未来添加的所有过滤器。默认为 true

uploadpackfilter.<filter>.allow

明确允许或禁止与 <filter> 对应的对象过滤器,其中 <filter> 可以是:blob:noneblob:limitobject:typetreesparse:oidcombine。如果使用组合过滤器,则必须允许 combine 和所有嵌套过滤器类型。默认为 uploadpackfilter.allow

uploadpackfilter.tree.maxDepth

只有当 <n> 不大于 uploadpackfilter.tree.maxDepth 的值时才允许 --filter=tree:<n>。如果设置,这也意味着 uploadpackfilter.tree.allow=true,除非此配置变量已设置。如果未设置,则无效。

uploadpack.allowRefInWant

如果此选项设置为 true,upload-pack 将支持协议版本 2 fetch 命令的 ref-in-want 功能。此功能旨在为负载均衡服务器提供便利,这些服务器由于复制延迟可能对它们的 OID 指向的引用没有相同的视图。

url.<base>.insteadOf

任何以该值开头的 URL 都将被重写,改为以 <base> 开头。在某些网站提供大量仓库、提供多种访问方法且某些用户需要使用不同访问方法的情况下,此功能允许用户指定任何等效的 URL,并让 Git 自动将 URL 重写为最适合特定用户的替代方案,即使是该网站上从未见过的仓库。当多个 insteadOf 字符串匹配给定 URL 时,使用最长匹配。

请注意,任何协议限制都将应用于重写的 URL。如果重写将 URL 更改为使用自定义协议或远程助手,您可能需要调整 protocol.*.allow 配置以允许该请求。特别是,您期望用于子模块的协议必须设置为 always,而不是默认的 user。参阅上面 protocol.allow 的描述。

url.<base>.pushInsteadOf

任何以该值开头的 URL 都不会被推送;相反,它将被重写为以 <base> 开头,并将结果 URL 推送过去。在某些站点提供大量仓库,并且它们提供多种访问方法,其中一些不允许推送的情况下,此功能允许用户指定一个仅拉取 URL,并让 Git 自动使用适当的 URL 进行推送,即使是该站点上从未见过的仓库。当多个 pushInsteadOf 字符串匹配给定 URL 时,使用最长匹配。如果远程仓库有明确的 pushurl,Git 将忽略该远程的此设置。

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

user.nameuser.email 变量决定了提交对象的 authorcommitter 字段中最终显示的内容。如果您需要 authorcommitter 不同,则可以设置 author.nameauthor.emailcommitter.namecommitter.email 变量。所有这些都可以被 GIT_AUTHOR_NAMEGIT_AUTHOR_EMAILGIT_COMMITTER_NAMEGIT_COMMITTER_EMAILEMAIL 环境变量覆盖。

请注意,这些变量的 name 形式通常指某种形式的个人姓名。有关这些设置以及 credential.username 选项(如果您正在寻找身份验证凭据)的更多信息,请参阅 git-commit[1]git[1] 的环境变量部分。

user.useConfigOnly

指示 Git 避免尝试猜测 user.emailuser.name 的默认值,而只从配置中检索这些值。例如,如果您有多个电子邮件地址,并且希望为每个仓库使用不同的电子邮件地址,那么在全局配置中将此配置选项设置为 true 并提供一个名称,Git 将在您在新克隆的仓库中进行新提交之前提示您设置电子邮件。默认为 false

user.signingKey

如果 git-tag[1]git-commit[1] 在创建签名标签或提交时没有自动选择您想要的密钥,您可以使用此变量覆盖默认选择。此选项不变地传递给 gpg 的 --local-user 参数,因此您可以使用 gpg 支持的任何方法指定密钥。如果 gpg.format 设置为 ssh,则此项可以包含您的私有 ssh 密钥或使用 ssh-agent 时的公钥路径。另外,它也可以直接包含以 key:: 为前缀的公钥(例如:“key::ssh-rsa XXXXXX identifier”)。私钥需要通过 ssh-agent 可用。如果未设置,Git 将调用 gpg.ssh.defaultKeyCommand(例如:“ssh-add -L”)并尝试使用可用的第一个密钥。为了向后兼容,以“ssh-”开头的原始密钥,例如“ssh-rsa XXXXXX identifier”,被视为“key::ssh-rsa XXXXXX identifier”,但此形式已弃用;请改用 key:: 形式。

versionsort.prereleaseSuffix (已弃用)

versionsort.suffix 的弃用别名。如果设置了 versionsort.suffix 则忽略。

versionsort.suffix

即使在 git-tag[1] 中使用版本排序,具有相同基本版本但不同后缀的标签名仍按字典顺序排序,导致例如预发布标签出现在主要版本之后(例如“1.0-rc1”在“1.0”之后)。可以指定此变量以确定具有不同后缀的标签名的排序顺序。

通过在此变量中指定单个后缀,任何包含该后缀的标签名都将出现在相应的主要版本之前。例如,如果变量设置为“-rc”,则所有“1.0-rcX”标签将出现在“1.0”之前。如果多次指定,每个后缀一次,则配置中后缀的顺序将决定具有这些后缀的标签名的排序顺序。例如,如果“-pre”在配置中出现在“-rc”之前,则所有“1.0-preX”标签将列在任何“1.0-rcX”标签之前。主要版本标签相对于具有各种后缀的标签的位置可以通过在这些其他后缀中指定空后缀来确定。例如,如果后缀“-rc”、“”、“-ck”和“-bfs”以这种顺序出现在配置中,则所有“v4.8-rcX”标签首先列出,其次是“v4.8”,然后是“v4.8-ckX”,最后是“v4.8-bfsX”。

如果有多个后缀匹配相同的标签名,则该标签名将根据在标签名中最早位置开始的后缀进行排序。如果有多个不同的匹配后缀在该最早位置开始,则该标签名将根据这些后缀中最长的后缀进行排序。如果不同后缀存在于多个配置文件中,则它们之间的排序顺序未定义。

web.browser

指定一些命令可能使用的网页浏览器。目前只有 git-instaweb[1]git-help[1] 可能使用它。

worktree.guessRemote

如果未指定分支且未使用 -b-B--detach,则 git worktree add 默认为从 HEAD 创建新分支。如果 worktree.guessRemote 设置为 true,worktree add 会尝试查找一个名称唯一匹配新分支名称的远程跟踪分支。如果存在这样的分支,它将被检出并设置为新分支的“上游”。如果找不到这样的匹配,它将回退到从当前 HEAD 创建新分支。

worktree.useRelativePaths

使用相对路径(当为“true”时)或绝对路径(当为“false”)链接工作树。这对于仓库和工作树可能在不同位置或环境之间移动的设置特别有用。默认为“false”。

请注意,将 worktree.useRelativePaths 设置为“true”意味着启用 extensions.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] 套件的一部分