English ▾ 主题 ▾ 最新版本 ▾ git-config 最后更新于 2.49.0

名称

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

概要

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

描述

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

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

--type=<type> 选项指示 *git config* 确保传入和传出的值可以在给定的 <type> 下进行规范化。 如果没有给出 --type=<type>,则不会执行规范化。 调用者可以使用 --no-type 取消设置现有的 --type 说明符。

默认情况下,读取时,这些值从系统,全局和仓库本地配置文件中读取,并且选项 --system--global--local--worktree--file <filename> 可以用于告诉命令仅从该位置读取(请参阅文件)。

默认情况下,写入时,新值将写入仓库本地配置文件,并且选项 --system--global--worktree--file <filename> 可用于告诉命令写入到该位置(您可以说 --local,但这是默认设置)。

发生错误时,此命令将以非零状态失败。 一些退出代码是

  • section 或 key 无效 (ret=1),

  • 没有提供 section 或 name (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

将给定的 section 重命名为新名称。

remove-section

从配置文件中删除给定的 section。

edit

打开编辑器以修改指定的配置文件; 可以是 --system--global--local(默认)、--worktree--file <config-file>

选项

--replace-all

默认行为是最多替换一行。 这将替换与键(以及可选的 value-pattern)匹配的所有行。

--append

向选项添加新行而不更改任何现有值。 这与在 set 中提供 _--value=^$_ 相同。

--comment <message>

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

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

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

--regexp

使用 get,将名称解释为正则表达式。 正则表达式匹配当前区分大小写,并且针对键的规范化版本完成,在该版本中,section 和变量名称均为小写,但 subsection 名称不是。

--url=<URL>

当给定一个由两部分组成的 <name> 作为 <section>.<key> 时,返回 <section>.<URL>.<key> 的值,其中 <URL> 部分与给定的 URL 最匹配(如果不存在这样的键,则使用 <section>.<key> 的值作为后备)。 当仅给定 <section> 作为名称时,对 section 中的所有键执行此操作并列出它们。 如果找不到值,则返回错误代码 1。

--global

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

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

另请参阅文件

--system

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

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

另请参阅文件

--local

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

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

另请参阅文件

--worktree

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

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

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

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

另请参阅文件

--blob <blob>

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

--fixed-value

当与 value-pattern 参数一起使用时,将 value-pattern 视为一个精确的字符串而不是正则表达式。这会将匹配的名称/值对限制为仅那些值与 value-pattern 完全相等的情况。

--type <type>

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

有效的 <type> 包括:

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

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

  • bool-or-int:根据 *bool* 或 *int* 进行规范化,如上所述。

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

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

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

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

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

--no-type

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

-z
--null

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

--name-only

仅为 listget 输出配置变量的名称。

--show-origin

使用来源类型(文件、标准输入、blob、命令行)和实际来源(配置文件路径,ref 或 blob id,如果适用)来增强所有查询的配置选项的输出。

--show-scope

类似于 --show-origin,它使用该值的范围(工作区、本地、全局、系统、命令)来增强所有查询的配置选项的输出。

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

查找 <name>(例如 color.diff)的颜色设置,并输出 "true" 或 "false"。 <stdout-is-tty> 应该是 "true" 或 "false",并在配置显示 "auto" 时考虑在内。 如果缺少 <stdout-is-tty>,则检查命令本身的标准输出,如果将使用颜色,则以状态 0 退出,否则以状态 1 退出。 当 name 的颜色设置未定义时,该命令使用 color.ui 作为回退。

--[no-]includes

在查找值时,遵循配置文件中的 include.* 指令。 当给定特定文件时(例如,使用 --file--global 等),默认为 off;当搜索所有配置文件时,默认为 on

--default <value>

当使用 get,并且找不到请求的变量时,表现得好像 <value> 是分配给该变量的值。

已弃用的模式

以下模式已被弃用,取而代之的是子命令。 建议迁移到新语法。

git config <name>

替换为 git config get <name>

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

替换为 git config set [--value=<pattern>] <name> <value>

-l
--list

替换为 git config list

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

替换为 git config get [--value=<pattern>] <name>

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

替换为 git config get [--value=<pattern>] --all <name>

--get-regexp <name-regexp>

替换为 git config get --all --show-names --regexp <name-regexp>

--get-urlmatch <name> <URL>

替换为 git config get --all --show-names --url=<URL> <name>

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

替换为 git config get --type=color [--default=<default>] <name>

--add <name> <value>

替换为 git config set --append <name> <value>

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

替换为 git config unset [--value=<pattern>] <name>

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

替换为 git config unset [--value=<pattern>] --all <name>

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

替换为 git config rename-section <old-name> <new-name>

--remove-section <name>

替换为 git config remove-section <name>

-e
--edit

替换为 git config edit

配置

pager.config 仅在列出配置时才有效,即在使用可能返回多个结果的 listget 时。 默认设置为使用分页器。

文件

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

$(prefix)/etc/gitconfig

系统范围的配置文件。

$XDG_CONFIG_HOME/git/config
~/.gitconfig

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

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

$GIT_DIR/config

存储库特定的配置文件。

$GIT_DIR/config.worktree

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

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

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

这些文件按照上面给出的顺序读取,最后找到的值优先于先前读取的值。 当采用多个值时,将使用来自所有文件的键的所有值。

默认情况下,选项仅写入存储库特定的配置文件。 请注意,这也影响了 setunset 之类的选项。 git config 每次只会更改一个文件

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

范围

每个配置源都属于一个配置范围。 这些范围是:

system

$(prefix)/etc/gitconfig

global

$XDG_CONFIG_HOME/git/config

~/.gitconfig

local

$GIT_DIR/config

worktree

$GIT_DIR/config.worktree

command

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

-c 选项

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

读取选项时,指定范围将仅从该范围内的文件中读取选项。 写入选项时,指定范围将写入该范围内的文件(而不是存储库特定的配置文件)。 有关完整的说明,请参见上面的 OPTIONS

大多数配置选项都有效,而与其定义的范围无关,但是某些选项仅在某些范围内有效。 有关完整的详细信息,请参见各个选项的文档。

受保护的配置

受保护的配置是指 *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

你可以用以下方式将 filemode 设置为 true

% git config set core.filemode true

假设的代理命令条目实际上有一个后缀来区分它们适用的 URL。 以下是如何将 kernel.org 的条目更改为 "ssh"。

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

这确保只替换 kernel.org 的键/值对。

要删除 renames 的条目,执行

% git config unset diff.renames

如果要删除多变量的条目(例如上面的 core.gitproxy),必须提供一个正则表达式,该表达式匹配一行文本的值。

要查询给定键的值,执行

% git config get core.filemode

或者,要查询多变量

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

如果你想知道多变量的所有值,执行

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

如果你喜欢冒险,你可以用一个新的 core.gitproxy 替换**所有**的 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)变量设置为要包含的文件的名称来从另一个文件包含配置文件。 该变量将路径名作为其值,并受波浪号扩展的约束。 这些变量可以多次给出。

包含文件的内容会立即插入,就好像它们在包含指令的位置找到一样。 如果变量的值是相对路径,则该路径被认为是相对于找到包含指令的配置文件而言的。 请参见下面的示例。

条件包含

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

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

gitdir

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

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

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

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

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

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

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

gitdir/i

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

onbranch

关键字 onbranch: 后面的数据被认为是具有标准 globbing 通配符和两个附加通配符 **//** 的模式,它们可以匹配多个路径组件。 如果我们在工作树中,并且当前检出的分支的名称与该模式匹配,则满足包含条件。

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

hasconfig:remote.*.url:

此关键字后面的数据被认为是具有标准 globbing 通配符和两个附加通配符 **//** 的模式,它们可以匹配多个组件。 第一次看到此关键字时,将扫描其余配置文件中的远程 URL(不应用任何值)。 如果存在至少一个与此模式匹配的远程 URL,则满足包含条件。

此选项(直接或间接)包含的文件不允许包含远程 URL。

请注意,与其他 includeIf 条件不同,解决此条件依赖于在读取条件时尚未知的信息。 一个典型的用例是此选项作为系统级或全局级配置存在,而远程 URL 位于本地级配置中; 因此,需要在解析此条件时提前扫描。 为了避免潜在包含的文件可能影响这些文件是否可能包含的先有鸡还是先有蛋的问题,Git 通过禁止这些文件影响这些条件的解析来打破循环(因此,禁止它们声明远程 URL)。

至于此关键字的命名,它是为了与支持更多基于变量的包含条件的命名方案向前兼容,但目前 Git 仅支持上面描述的精确关键字。

关于通过 gitdirgitdir/i 进行匹配的一些补充说明

  • 在匹配之前,不会解析 $GIT_DIR 中的符号链接。

  • $GIT_DIR 之外,路径的符号链接(symlink)和真实路径(realpath)版本都会被匹配。例如,如果 ~/git 是 /mnt/storage/git 的符号链接,那么 gitdir:~/gitgitdir:/mnt/storage/git 都会匹配。

    在 v2.13.0 中首次发布此功能时,情况并非如此,当时只匹配真实路径版本。想要与此功能的初始版本兼容的配置需要仅指定真实路径版本,或者同时指定两个版本。

  • 请注意,“../” 不是特殊的,它会按字面意思匹配,这可能不是你想要的。

示例

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

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

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

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

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

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

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

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

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

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

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

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

boolean(布尔值)

当一个变量被说成接受布尔值时,truefalse 接受许多同义词;这些都是不区分大小写的。

true(真)

布尔真值文字是 yesontrue1。此外,没有使用 = <value> 定义的变量也被认为是 true。

false(假)

布尔假值文字是 noofffalse0 和空字符串。

当使用 --type=bool 类型说明符将值转换为其规范形式时,git config 将确保输出为“true”或“false”(以小写形式拼写)。

integer(整数)

许多指定各种大小的变量的值可以附加 kM…​,分别表示“将数字缩放 1024”、“缩放 1024x1024”等。

color(颜色)

接受颜色的变量的值是一个颜色列表(最多两个,一个用于前景色,一个用于背景色)和属性(可以根据需要添加多个),用空格分隔。

接受的基本颜色是 normalblackredgreenyellowbluemagentacyanwhitedefault。给出的第一个颜色是前景色;第二个是背景色。除了 normaldefault 之外,所有基本颜色都有一个亮色变体,可以通过在颜色前面加上 bright 来指定,例如 brightred

颜色 normal 不会对颜色进行任何更改。它与空字符串相同,但可以在单独指定背景颜色时用作前景色(例如,“normal red”)。

颜色 default 显式地将颜色重置为终端默认值,例如,指定一个清除的背景。虽然这因终端而异,但这通常与设置为“white black”不同。

颜色也可以用 0 到 255 之间的数字表示;这些使用 ANSI 256 色模式(但请注意,并非所有终端都可能支持此模式)。如果你的终端支持,你也可以将 24 位 RGB 值指定为十六进制,例如 #ff0ab3,或 12 位 RGB 值,例如 #f1b,它等效于 24 位颜色 #ff11bb

接受的属性是 bolddimulblinkreverseitalicstrike(用于删除线或“删除线”字母)。任何属性相对于颜色的位置(之前、之后或之间)都无关紧要。可以通过在特定属性前加上 nono- 来关闭它们(例如,noreverseno-ul 等)。

伪属性 reset 在应用指定的着色之前重置所有颜色和属性。例如,reset green 将产生绿色前景和默认背景,没有任何活动属性。

空颜色字符串不会产生任何颜色效果。这可以用于避免为特定元素着色,而无需完全禁用颜色。

对于 git 的预定义颜色槽,属性应在着色输出中每个项目的开头重置。因此,将 color.decorate.branch 设置为 black 将以纯 black 绘制该分支名称,即使同一输出行上的前一个内容(例如,log --decorate 输出中分支名称列表之前的左括号)设置为使用 bold 或其他属性绘制。但是,自定义日志格式可能会执行更复杂和分层的着色,并且否定形式可能在那里有用。

pathname(路径名)

接受路径名值的变量可以给定一个以 "~/" 或 "~user/" 开头的字符串,并且通常的波浪号扩展会应用于这样的字符串:~/ 扩展为 $HOME 的值,而 ~user/ 扩展为指定用户的家目录。

如果路径以 %(prefix)/ 开头,则剩余部分被解释为相对于 Git 的“运行时前缀”的路径,即相对于 Git 本身安装的位置。例如,%(prefix)/bin/ 指的是 Git 可执行文件所在的目录。如果 Git 在编译时没有运行时前缀支持,则会替换编译时内置的前缀。在极不可能需要指定不应扩展的文字路径的情况下,需要使用 ./ 作为前缀,如下所示:./%(prefix)/bin

变量

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

其他与 git 相关的工具可能并且确实使用它们自己的变量。在为自己的工具发明新变量时,请确保它们的名称与 Git 本身和其他流行工具使用的名称不冲突,并在你的文档中描述它们。

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

告诉 git add 在由于索引错误而无法添加某些文件时继续添加文件。等效于 git-add[1]--ignore-errors 选项。add.ignore-errors 已弃用,因为它不遵循配置变量的通常命名约定。

advice.*

这些变量控制各种可选的帮助消息,旨在帮助新用户。当未配置时,Git 将在消息旁边给出有关如何抑制它的说明。你可以通过将相应的变量设置为 false 来告诉 Git 你已经理解了该问题,不再需要特定的帮助消息。

由于它们旨在帮助人类用户,因此这些消息会输出到标准错误。当将 Git 作为子进程运行的工具发现它们具有破坏性时,它们可以在环境中设置 GIT_ADVICE=0 以抑制所有 advice 消息。

addEmbeddedRepo

当用户意外地将一个 git 仓库添加到另一个仓库内部时显示。

addEmptyPathspec

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

addIgnoredFile

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

amWorkDir

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

ambiguousFetchRefspec

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

checkoutAmbiguousRemoteBranchName

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

commitBeforeMerge

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

detachedHead

当用户使用 git-switch[1]git-checkout[1] 移动到分离的 HEAD 状态时显示,以告知用户事后如何创建本地分支。

diverging

当无法进行快进时显示。

fetchShowForcedUpdates

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

forceDeleteBranch

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

ignoredHook

当由于 hook 未设置为可执行文件而忽略 hook 时显示。

implicitIdentity

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

mergeConflict

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

nestedTag

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

pushAlreadyExists

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

pushFetchFirst

git-push[1] 拒绝尝试覆盖指向我们没有的对象的远程 ref 的更新时显示。

pushNeedsForce

git-push[1] 拒绝尝试覆盖指向不是 commit-ish 的对象的远程 ref 的更新,或者使远程 ref 指向不是 commit-ish 的对象的更新时显示。

pushNonFFCurrent

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

pushNonFFMatching

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

pushRefNeedsUpdate

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

pushUnqualifiedRefname

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

pushUpdateRejected

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

rebaseTodoError

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

refSyntax

当用户提供非法 ref 名称时显示,以告知用户有关 ref 语法文档的信息。

resetNoRefresh

git-reset[1] 重置后,如果刷新索引花费超过 2 秒,则会显示此信息,告知用户可以使用 --no-refresh 选项。

resolveConflict

当冲突阻止操作执行时,各种命令会显示此信息。

rmHints

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

sequencerInUse

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

skippedCherryPicks

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

sparseIndexExpanded

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

statusAheadBehind

git-status[1] 计算本地 ref 与其远程跟踪 ref 相比的 ahead/behind 计数,并且该计算花费的时间超出预期时显示。如果 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 将导致第 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 选项为每个分支选择此行为。 有效设置为: false — 不进行自动设置; true — 当起始点是远程跟踪分支时,进行自动设置; always — 当起始点是本地分支或远程跟踪分支时,进行自动设置; inherit — 如果起始点具有跟踪配置,则将其复制到新分支; simple — 仅当起始点是远程跟踪分支并且新分支的名称与远程分支相同时,才进行自动设置。 此选项默认为 true。

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。 它还覆盖用于从分支 <name> 推送的 remote.pushDefault。 当您从一个位置(例如,您的上游)拉取并推送到另一个位置(例如,您自己的发布存储库)时,您可能需要设置 remote.pushDefault 以指定所有分支要推送到的远程仓库,并使用此选项为特定分支覆盖它。

branch.<name>.merge

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

bundle.version

此整数值声明捆绑列表使用的捆绑列表格式的版本。 当前,唯一接受的值是 1

bundle.mode

此字符串值应为 allany。 此值描述了是否需要所有声明的捆绑包才能理解捆绑信息的完整信息 (all),或者是否任何一个列出的捆绑 URI 都足够 (any)。

bundle.heuristic

如果存在此字符串值键,则捆绑列表旨在与增量 git fetch 命令一起使用。 启发式信号表明每个捆绑包都有其他键可用,这些键有助于确定客户端应下载哪些捆绑包子集。 当前唯一理解的值是 creationToken

bundle.<id>.*

bundle.<id>.* 键用于描述捆绑列表中单个项目,这些项目在 <id> 下分组以进行标识。

bundle.<id>.uri

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

checkout.defaultRemote

当您运行 git checkout <something>git switch <something> 且只有一个远程仓库时,它可能会隐式地回退到检出并跟踪,例如 origin/<something>。一旦您有多个具有 <something> 引用的远程仓库,此行为将停止工作。此设置允许您设置一个首选远程仓库的名称,在消除歧义时始终优先选择该仓库。典型的用例是将此设置为 origin

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

checkout.guess

提供 git checkoutgit switch--guess--no-guess 选项的默认值。请参阅 git-switch[1]git-checkout[1]

checkout.workers

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

注意:对于位于 SSD 或 NFS 上的存储库,并行检出通常会提供更好的性能。对于位于旋转磁盘上和/或具有少量核心的机器上的存储库,默认的顺序检出通常表现更好。存储库的大小和压缩级别也可能影响并行版本的性能。

checkout.thresholdForParallelism

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

clean.requireForce

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

clone.defaultRemoteName

克隆存储库时要创建的远程仓库的名称。默认为 origin。可以通过将 --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 转义序列向补丁添加颜色。如果将其设置为 always,则 git-diff[1]git-log[1]git-show[1] 将对所有补丁使用颜色。如果设置为 trueauto,则这些命令仅在输出到终端时才使用颜色。如果未设置,则使用 color.ui 的值(默认为 auto)。

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

color.diff.<slot>

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

color.decorate.<slot>

使用自定义颜色显示 git log --decorate 输出。 <slot>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]。 当您始终希望在日志消息中保留以注释字符 # 开头的行时,更改默认值可能很有用,在这种情况下,您将执行 git config commit.cleanup whitespace(请注意,如果您这样做,则必须自己删除提交日志模板中以 # 开头的帮助行)。

commit.gpgSign

一个布尔值,用于指定是否应对所有提交进行 GPG 签名。 在执行诸如变基之类的操作时使用此选项可能会导致大量提交被签名。 使用代理可能很方便,以避免多次键入您的 GPG 密码。

commit.status

一个布尔值,用于在使用编辑器准备提交消息时启用/禁用在提交消息模板中包含状态信息。 默认为 true

commit.template

指定要用作新提交消息模板的文件的路径名。

commit.verbose

一个布尔值或整数,用于指定 git commit 的详细程度。 有关详细信息,请参阅 git-commit[1]

commitGraph.generationVersion

指定在写入或读取 commit-graph 文件时要使用的生成号版本类型。 如果指定了版本 1,则不会写入或读取更正后的提交日期。 默认为 2。

commitGraph.maxNewFilters

指定 git commit-graph write--max-new-filters 选项的默认值(参见 git-commit-graph[1])。

commitGraph.readChangedPaths

已弃用。 如果为 true,则等效于 commitGraph.changedPathsVersion=-1;如果为 false,则等效于 commitGraph.changedPathsVersion=0。(如果还设置了 commitGraph.changedPathVersion,则 commitGraph.changedPathsVersion 优先。)

commitGraph.changedPathsVersion

指定 Git 将读取和写入的已更改路径 Bloom 过滤器的版本。 可以为 -1、0、1 或 2。 请注意,大于 1 的值可能与尚未了解这些版本的旧版本 Git 不兼容。 在混合版本环境中操作时请务必小心。

默认为 -1。

如果为 -1,Git 将使用存储库中已更改路径 Bloom 过滤器的版本,如果没有,则默认为 1。

如果为 0,Git 将不会读取任何 Bloom 过滤器,并且在指示写入时将写入版本 1 Bloom 过滤器。

如果为 1,Git 将仅读取版本 1 Bloom 过滤器,并将写入版本 1 Bloom 过滤器。

如果为 2,Git 将仅读取版本 2 Bloom 过滤器,并将写入版本 2 Bloom 过滤器。

有关更多信息,请参阅 git-commit-graph[1]

completion.commands

这仅由 git-completion.bash 使用,用于从已完成命令的列表中添加或删除命令。 通常,只有瓷器命令和少数其他选定命令会被完成。 您可以在此变量中添加更多命令,以空格分隔。 在命令前加上 - 将从现有列表中删除它。

core.fileMode

告知 Git 是否要遵守工作树中文件的可执行位。

某些文件系统在检出标记为可执行文件的文件时,或者检出启用了可执行位的不可执行文件时,会丢失可执行位。 git-clone[1]git-init[1] 会探测文件系统以查看它是否正确处理可执行位,并且此变量会自动根据需要进行设置。

但是,存储库可能位于正确处理文件模式的文件系统上,并且此变量在创建时设置为 true,但稍后可能会从另一个丢失文件模式的环境访问(例如,通过 CIFS 挂载导出 ext4,使用 Windows 版 Git 或 Eclipse 访问 Cygwin 创建的存储库)。 在这种情况下,可能需要将此变量设置为 false。 请参阅 git-update-index[1]

默认值为 true(当未在配置文件中指定 core.filemode 时)。

core.hideDotFiles

(仅限 Windows)如果为 true,则将名称以点开头的新创建的目录和文件标记为隐藏。 如果为 dotGitOnly,则仅隐藏 .git/ 目录,但不隐藏任何其他以点开头的文件。 默认模式为 dotGitOnly

core.ignoreCase

内部变量,它启用各种解决方法,以使 Git 在不区分大小写的文件系统(如 APFS、HFS+、FAT、NTFS 等)上更好地工作。 例如,如果目录列表在 Git 期望“Makefile”时找到“makefile”,Git 将假定它实际上是同一个文件,并继续将其记住为“Makefile”。

默认值为 false,除非 git-clone[1]git-init[1] 将探测并在创建存储库时适当地将 core.ignoreCase 设置为 true。

Git 依赖于此变量的正确配置以用于您的操作系统和文件系统。 修改此值可能会导致意外行为。

core.precomposeUnicode

此选项仅由 Git 的 Mac OS 实现使用。 当 core.precomposeUnicode=true 时,Git 会还原 Mac OS 完成的 filenames 的 unicode 分解。 这在 Mac OS 与 Linux 或 Windows 之间共享存储库时非常有用。 (需要 Windows 版 Git 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 "short" 名称冲突。 在 Windows 上默认为 true,在其他地方默认为 false

core.fsmonitor

如果设置为 true,则为此工作目录启用内置的文件系统监视器守护程序(git-fsmonitor--daemon[1])。

与基于钩子的文件系统监视器类似,内置的文件系统监视器可以加速 Git 命令,这些命令需要在包含大量文件的工作目录中刷新 Git 索引(例如 git status)。内置监视器无需安装和维护外部第三方工具。

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

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

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

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

请注意,如果您同时使用多个 Git 版本,例如命令行中的一个版本和 IDE 工具中的另一个版本,则 core.fsmonitor 的定义已扩展为允许布尔值以及钩子路径名。 Git 2.35.1 及更早版本将无法理解布尔值,并将 "true" 或 "false" 值视为要调用的钩子路径名。 Git 2.26 到 2.35.1 版本默认为钩子协议 V2,如果失败,则会回退到没有 fsmonitor(完整扫描)。 Git 2.26 之前的版本默认为钩子协议 V1,并且会静默地假设没有要报告的更改(不扫描),因此状态命令可能会报告不完整的结果。 因此,最好在使用内置文件系统监视器之前升级所有 Git 版本。

core.fsmonitorHookVersion

设置调用 "fsmonitor" 钩子时要使用的协议版本。

目前有版本 1 和版本 2。 如果未设置此选项,将首先尝试版本 2,如果失败,则尝试版本 1。 版本 1 使用时间戳作为输入来确定自该时间以来哪些文件发生了更改,但某些监视器(如 Watchman)在与时间戳一起使用时存在竞争条件。 版本 2 使用不透明的字符串,以便监视器可以返回一些可用于确定哪些文件已更改而没有竞争条件的内容。

core.trustctime

如果为 false,则忽略索引和工作树之间的 ctime 差异;当 inode 更改时间经常被 Git 外部的东西修改时(文件系统爬虫和一些备份系统),这很有用。 请参阅 git-update-index[1]。 默认为 True。

core.splitIndex

如果为 true,将使用索引的拆分索引功能。 请参阅 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-files, diff) 将引用路径名中的“不寻常”字符,方法是用双引号将路径名括起来,并以 C 转义控制字符(例如,\t 表示 TAB,\n 表示 LF,\\ 表示反斜杠)或值大于 0x80 的字节(例如,八进制 \302\265 表示 UTF-8 中的“micro”)的相同方式,使用反斜杠转义这些字符。 如果此变量设置为 false,则高于 0x80 的字节不再被认为是“不寻常”的。 无论此变量的设置如何,双引号、反斜杠和控制字符始终会被转义。 简单的空格字符不被认为是“不寻常的”。 许多命令可以使用 -z 选项完全逐字输出路径名。 默认值为 true。

core.eol

设置在工作目录中用于标记为文本的文件(通过设置 text 属性,或者通过 text=auto 并让 Git 自动检测内容为文本)的行尾类型。 替代方法是 lf, crlfnative, 这会使用平台的本机行尾符。 默认值为 native。 有关行尾转换的更多信息,请参阅 gitattributes[5]。 请注意,如果 core.autocrlf 设置为 trueinput,则会忽略此值。

core.safecrlf

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

CRLF 转换存在损坏数据的轻微可能性。 启用后,Git 将在提交期间将 CRLF 转换为 LF,并在检出期间将 LF 转换为 CRLF。 包含 LF 和 CRLF 混合的文件在提交之前无法由 Git 重新创建。 对于文本文件,这是正确的做法:它纠正了行尾符,以便我们在存储库中只有 LF 行尾符。 但是对于意外分类为文本的二进制文件,转换可能会损坏数据。

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

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

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

core.autocrlf

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

core.checkRoundtripEncoding

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

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

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

core.gitProxy

一个“代理命令”,用于执行(作为command host port)而不是在使用 Git 协议进行获取时建立与远程服务器的直接连接。 如果变量值的格式为“COMMAND for DOMAIN”,则该命令仅应用于以指定域字符串结尾的主机名。 可以多次设置此变量,并按给定的顺序匹配; 第一个匹配获胜。

可以被 GIT_PROXY_COMMAND 环境变量覆盖(该变量始终普遍适用,没有特殊的“for”处理)。

特殊字符串 none 可以用作代理命令,以指定不将代理用于给定的域模式。 这对于从代理使用中排除防火墙内的服务器,同时默认为外部域的公共代理很有用。

core.sshCommand

如果设置了此变量,则 git fetchgit push 在需要连接到远程系统时将使用指定的命令而不是 ssh。 该命令的格式与 GIT_SSH_COMMAND 环境变量相同,并且在设置环境变量时会被覆盖。

core.ignoreStat

如果为 true,则 Git 将避免使用 lstat() 调用来检测文件是否已更改,方法是为那些它在索引和工作树中以相同方式更新的被跟踪文件设置“assume-unchanged”位。

当在 Git 外部修改文件时,用户需要显式暂存已修改的文件(例如,请参阅 git-update-index[1] 中的示例部分)。 Git 通常不会检测到对这些文件的更改。

这在 lstat() 调用非常慢的系统上很有用,例如 CIFS/Microsoft Windows。

默认为 False。

core.preferSymlinkRefs

不使用 HEAD 和其他符号引用文件的默认 "symref" 格式,而是使用符号链接。有时需要这样做才能与期望 HEAD 是符号链接的旧脚本兼容。

core.alternateRefsCommand

当从备用仓库发布可用历史记录的提示时,使用 shell 执行指定的命令,而不是 git-for-each-ref[1]。第一个参数是备用仓库的绝对路径。输出必须包含每行一个十六进制对象 ID (即与 git for-each-ref --format='%(objectname)' 产生的输出相同)。

请注意,通常不能将 git for-each-ref 直接放入配置值中,因为它不接受仓库路径作为参数(但您可以将上面的命令包装在 shell 脚本中)。

core.alternateRefsPrefixes

当列出备用仓库的引用时,仅列出以给定前缀开头的引用。前缀的匹配方式与作为 git-for-each-ref[1] 的参数给出时相同。要列出多个前缀,请用空格分隔它们。如果设置了 core.alternateRefsCommand,则设置 core.alternateRefsPrefixes 无效。

core.bare

如果为 true,则假定此仓库为裸仓库,并且没有与之关联的工作目录。如果这种情况发生,则会禁用许多需要工作目录的命令,例如 git-add[1]git-merge[1]

此设置由 git-clone[1]git-init[1] 在创建仓库时自动猜测。默认情况下,以 "/.git" 结尾的仓库被假定为非裸仓库(bare = false),而所有其他仓库被假定为裸仓库(bare = true)。

core.worktree

设置工作树根目录的路径。如果设置了 GIT_COMMON_DIR 环境变量,则忽略 core.worktree,并且不使用它来确定工作树的根目录。可以通过 GIT_WORK_TREE 环境变量和 --work-tree 命令行选项来覆盖此设置。该值可以是绝对路径,也可以是相对于 .git 目录路径的相对路径,该路径由 --git-dir 或 GIT_DIR 指定,或者自动发现。如果指定了 --git-dir 或 GIT_DIR,但没有指定 --work-tree、GIT_WORK_TREE 和 core.worktree 中的任何一个,则当前工作目录被视为工作树的顶层目录。

请注意,即使在目录的 ".git" 子目录中的配置文件中设置了此变量,并且其值与后一个目录不同(例如,"/path/to/.git/config" 将 core.worktree 设置为 "/different/path"),该变量仍然有效,这很可能是一个错误配置。在 "/path/to" 目录中运行 Git 命令仍将使用 "/different/path" 作为工作树的根目录,并且可能会造成混淆,除非您知道自己在做什么(例如,您正在创建一个与仓库的常用工作树位置不同的同一索引的只读快照)。

core.logAllRefUpdates

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

此信息可用于确定分支 "2 days ago" 的尖端提交是什么。

默认情况下,在与工作目录关联的仓库中,此值为 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 的常用单位后缀。

超过配置限制的文件将是

  • 以 deflated 方式存储在包文件中,而不尝试增量压缩。

    默认限制主要是在考虑此用例的情况下设置的。 使用它,大多数项目将对其源代码和其他文本文件进行增量压缩,但不压缩较大的二进制媒体文件。

    存储没有增量压缩的大文件可以避免过度使用内存,但会略微增加磁盘使用量。

  • 将被视为已标记为“二进制”(请参见 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。 如果未设置或为空,则使用 $HOME/.config/git/ignore。 请参见 gitignore[5]

core.askPass

一些命令(例如 svn 和 http 接口)以交互方式询问密码,可以告诉它们使用通过此变量的值给出的外部程序。 可以被 GIT_ASKPASS 环境变量覆盖。 如果未设置,则回退到 SSH_ASKPASS 环境变量的值,如果失败,则回退到简单的密码提示。 外部程序应以命令行参数的形式给出适当的提示,并在其 STDOUT 上写入密码。

core.attributesFile

除了 .gitattributes (每个目录) 和 .git/info/attributes 之外,Git 还会在此文件中查找属性 (请参阅 gitattributes[5])。路径扩展的方式与 core.excludesFile 相同。其默认值为 $XDG_CONFIG_HOME/git/attributes。如果 $XDG_CONFIG_HOME 未设置或为空,则使用 $HOME/.config/git/attributes 代替。

core.hooksPath

默认情况下,Git 将在 $GIT_DIR/hooks 目录中查找您的钩子。将其设置为不同的路径,例如 /etc/git/hooks,Git 将尝试在该目录中查找您的钩子,例如 /etc/git/hooks/pre-receive 而不是 $GIT_DIR/hooks/pre-receive

该路径可以是绝对路径或相对路径。相对路径被视为相对于运行钩子的目录(请参阅 githooks[5] 的“描述”部分)。

如果您希望集中配置您的 Git 钩子,而不是基于每个存储库进行配置,或者作为 init.templateDir 的更灵活和集中的替代方案(您已经在其中更改了默认钩子),则此配置变量非常有用。

core.editor

诸如 committag 之类的命令,允许您通过启动编辑器来编辑消息,当此变量设置并且环境变量 GIT_EDITOR 未设置时,将使用此变量的值。请参阅 git-var[1]

core.commentChar
core.commentString

诸如 committag 之类的命令,允许您编辑消息,并且会将以此字符开头的行视为注释,并在编辑器返回后将其删除(默认为 *#*)。

如果设置为 "auto",则 git-commit 将选择一个字符,该字符不是现有提交消息中任何行的起始字符。

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

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

尝试锁定单个引用时重试的时间长度(以毫秒为单位)。值 0 表示根本不重试; -1 表示无限期重试。 默认值为 100(即,重试 100 毫秒)。

core.packedRefsTimeout

尝试锁定 packed-refs 文件时重试的时间长度(以毫秒为单位)。值 0 表示根本不重试; -1 表示无限期重试。 默认值为 1000(即,重试 1 秒)。

core.pager

Git 命令使用的文本查看器(例如,less)。该值应由 shell 解释。优先级顺序为 $GIT_PAGER 环境变量,然后是 core.pager 配置,然后是 $PAGER,然后是编译时选择的默认值(通常是 less)。

LESS 环境变量未设置时,Git 会将其设置为 FRX(如果 LESS 环境变量已设置,Git 则根本不会更改它)。如果您想有选择地覆盖 Git 对 LESS 的默认设置,您可以将 core.pager 设置为例如 less -S。这将被 Git 传递给 shell,shell 会将最终命令转换为 LESS=FRX less -S。 环境不会设置 S 选项,但命令行会设置,指示 less 截断长行。 类似地,将 core.pager 设置为 less -+F 将从命令行禁用由环境指定的 F 选项,从而禁用 less 的“如果一屏则退出”行为。 可以专门为特定命令激活某些标志:例如,将 pager.blame 设置为 less -S 仅为 git blame 启用行截断。

同样,当 LV 环境变量未设置时,Git 会将其设置为 -c。您可以通过导出 LV 并使用另一个值或将 core.pager 设置为 lv +c 来覆盖此设置。

core.whitespace

要注意的常见空格问题的逗号分隔列表。 git diff 将使用 color.diff.whitespace 来突出显示它们,而 git apply --whitespace=error 会将它们视为错误。 您可以添加 - 前缀来禁用其中任何一个(例如 -trailing-space

  • blank-at-eol 将行尾的尾随空格视为错误(默认启用)。

  • space-before-tab 将行初始缩进部分中紧接在制表符之前的空格字符视为错误(默认启用)。

  • indent-with-non-tab 将使用空格字符而不是等效制表符缩进的行视为错误(默认不启用)。

  • tab-in-indent 将行初始缩进部分中的制表符视为错误(默认不启用)。

  • blank-at-eof 将添加到文件末尾的空白行视为错误(默认启用)。

  • trailing-space 是涵盖 blank-at-eolblank-at-eof 的简写形式。

  • cr-at-eol 将行尾的回车符视为行终止符的一部分,也就是说,如果此类回车符之前的字符不是空格,则 trailing-space 不会触发(默认不启用)。

  • tabwidth=<n> 指示制表符占据多少个字符位置;这与 indent-with-non-tab 相关,以及 Git 何时修复 tab-in-indent 错误。 默认制表符宽度为 8。允许的值为 1 到 63。

core.fsync

应通过 core.fsyncMethod 加固的存储库组件的逗号分隔列表(在创建或修改时)。您可以通过在任何组件前加上 *-* 来禁用对该组件的加固。如果系统发生不干净的关机,未加固的项目可能会丢失。除非您有特殊要求,否则建议您将此选项留空或选择 committedaddedall 之一。

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

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

  • none 清除 fsync 组件集。

  • loose-object 加固以 loose-object 形式添加到存储库的对象。

  • pack 加固以 packfile 形式添加到存储库的对象。

  • pack-metadata 加固 packfile 位图和索引。

  • commit-graph 加固 commit-graph 文件。

  • index 在索引被修改时加固索引。

  • objects 是一个聚合选项,相当于 loose-object,pack

  • reference 加固在存储库中修改的引用。

  • derived-metadata 是一个聚合选项,相当于 pack-metadata,commit-graph

  • committed 是一个聚合选项,目前相当于 objects。 这种模式牺牲了一些性能,以确保使用 git commit 或类似命令提交到存储库的工作得到加固。

  • added 是一个聚合选项,目前相当于 committed,index。 这种模式牺牲了额外的性能,以确保像 git add 和类似操作的结果得到加固。

  • all 是一个聚合选项,用于同步上述所有单个组件。

core.fsyncMethod

一个值,指示 Git 将使用哪种策略来使用 fsync 和相关原语来加固存储库数据。

  • fsync 使用 fsync() 系统调用或平台等效项。

  • writeout-only 发出 pagecache 写回请求,但根据文件系统和存储硬件,添加到存储库的数据在系统崩溃时可能无法持久。 这是 macOS 上的默认模式。

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

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

core.fsyncObjectFiles

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

此设置会影响以 loose-object 形式添加到 Git 存储库的数据。 当设置为 true 时,Git 将发出 fsync 或类似的系统调用来刷新缓存,以便 loose-objects 在系统发生不干净的关机时保持一致。

core.preloadIndex

启用并行索引预加载,用于像 _git diff_ 这样的操作

这可以加快 _git diff_ 和 _git status_ 等操作,尤其是在像 NFS 这样的文件系统上,这些文件系统的缓存语义较弱,因此 IO 延迟相对较高。 启用后,Git 将并行执行索引与文件系统数据的比较,从而允许 IO 重叠。 默认为 true。

core.unsetenvvars

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

core.restrictinheritedhandles

仅限 Windows:覆盖生成的进程是否仅继承标准文件句柄(stdinstdoutstderr)或所有句柄。 可以是 autotruefalse。 默认为 auto,这意味着在 Windows 7 及更高版本上为 true,在较旧的 Windows 版本上为 false

core.createObject

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

在某些文件系统/操作系统组合上,此设置可能不可靠。请将此配置项设置为rename;但是,这将移除用于确保现有目标文件不会被覆盖的检查。

core.notesRef

在显示提交消息时,也显示存储在给定 ref 中的注释。该 ref 必须是完全限定的。如果给定的 ref 不存在,则不会报错,而是表示不应打印任何注释。

此设置默认为 "refs/notes/commits",并且可以通过 GIT_NOTES_REF 环境变量覆盖。请参阅 git-notes[1]

core.commitGraph

如果为 true,则 Git 将读取 commit-graph 文件(如果存在)来解析提交的图结构。默认为 true。有关更多信息,请参阅 git-commit-graph[1]

core.useReplaceRefs

如果设置为 false,则表现得好像在命令行中给出了 --no-replace-objects 选项一样。有关更多信息,请参阅 git[1]git-replace[1]

core.multiPackIndex

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

core.sparseCheckout

启用 "sparse checkout" 功能。有关更多信息,请参阅 git-sparse-checkout[1]

core.sparseCheckoutCone

启用 sparse checkout 功能的 "cone 模式"。 当 sparse-checkout 文件包含有限的模式集合时,此模式可提供显著的性能优势。 可以通过将此变量设置为 *false* 来请求 "non-cone 模式" 以允许指定更灵活的模式。 有关更多信息,请参阅 git-sparse-checkout[1]

core.abbrev

设置对象名称的缩写长度。 如果未指定或设置为 "auto",则会根据存储库中打包对象的大致数量计算一个适当的值,希望这个值足以使缩写的对象名称在一段时间内保持唯一。 如果设置为 "no",则不进行缩写,并以完整长度显示对象名称。 最小长度为 4。

core.maxTreeDepth

Git 在遍历树时愿意递归的最大深度(例如,"a/b/cde/f" 的深度为 4)。 这是一个故障安全措施,允许 Git 干净地中止,通常不需要调整。 当 Git 使用 MSVC 编译时,默认值为 512。 否则,默认值为 2048。

credential.helper

指定一个外部 helper,当需要用户名或密码凭据时调用它;该 helper 可能会查阅外部存储以避免提示用户输入凭据。 这通常是凭据 helper 的名称,可能带有参数,但也可能是带有参数的绝对路径,或者,如果以 ! 开头,则是 shell 命令。

请注意,可以定义多个 helper。 有关详细信息和示例,请参见 gitcredentials[7]

credential.interactive

默认情况下,当需要新凭据时,Git 和任何已配置的凭据 helper 将要求用户输入。 如果这些凭据仍然有效,则许多这些 helper 将基于存储的凭据成功。 为了避免 Git 的用户交互,请设置 credential.interactive=false。 某些凭据助手也遵循此选项。

credential.useHttpPath

获取凭据时,认为 http 或 https URL 的 "path" 组件很重要。 默认为 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 的高级命令,而不影响较低级别的 diff 命令(例如 git diff-files)。

diff.dirstat

一个逗号分隔的 --dirstat 参数列表,指定 git-diff[1] 及其同类命令的 --dirstat 选项的默认行为。 默认值可以在命令行中覆盖(使用 --dirstat=<param>,...)。 备用默认值(当 diff.dirstat 未更改时)为 changes,noncumulative,3。 以下参数可用

changes

通过统计从源中删除或添加到目标的行来计算 dirstat 数字。 这会忽略文件中的纯代码移动量。 换句话说,重新排列文件中的行与进行其他更改的计数方式不同。 这是未给出任何参数时的默认行为。

lines

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

files

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

cumulative

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

<limit>

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

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

diff.statNameWidth

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

diff.statGraphWidth

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

diff.context

生成带有 <n> 行上下文的 diff,而不是默认的 3 行。 此值被 -U 选项覆盖。

diff.interHunkContext

显示 diff hunk 之间的上下文,最多为指定的行数,从而融合彼此靠近的 hunk。 该值用作 --inter-hunk-context 命令行选项的默认值。

diff.external

如果设置了此配置变量,则不会使用内部 diff 机制执行 diff 生成,而是使用给定的命令。 可以使用 GIT_EXTERNAL_DIFF 环境变量覆盖。 使用 git[1] 中 "git Diffs" 下描述的参数调用该命令。 注意:如果只想对文件的一个子集使用外部 diff 程序,则可能需要使用 gitattributes[5]

diff.trustExitCode

如果此布尔值设置为 true,则 diff.external 命令应返回退出代码 0(如果它认为输入文件相等)或 1(如果它认为它们不同),如 diff(1) 所述。 如果设置为 false(这是默认值),则该命令应返回退出代码 0,无论是否相等。 任何其他退出代码都会导致 Git 报告致命错误。

diff.ignoreSubmodules

设置 --ignore-submodules 的默认值。 请注意,这仅影响 git diff 的高级命令,而不影响较低级别的 diff 命令(例如 git diff-files)。 当报告未提交的更改时,git checkoutgit switch 也接受此设置。 将其设置为 all 会禁用 git commitgit status 通常显示的子模块摘要(当 status.submoduleSummary 设置时),除非使用 --ignore-submodules 命令行选项覆盖它。 git submodule 命令不受此设置的影响。 默认情况下,这设置为 untracked,以便忽略任何未跟踪的子模块。

diff.mnemonicPrefix

如果设置,git diff 使用的 prefix 对不同于标准的 a/b/,具体取决于比较的内容。 当此配置生效时,反向 diff 输出也会交换前缀的顺序

git diff

比较 (i)ndex 和 (w)ork tree;

git diff HEAD

比较 (c)ommit 和 (w)ork tree;

git diff --cached

比较 (c)ommit 和 (i)ndex;

git diff HEAD:<file1> <file2>

比较 (o)bject 和 (w)ork tree 实体;

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

比较两个非 Git 对象 <a><b>

diff.noPrefix

如果设置,git diff 不会显示任何源或目标前缀。

diff.srcPrefix

如果设置,git diff 使用此源前缀。默认为 a/

diff.dstPrefix

如果设置,git diff 使用此目标前缀。默认为 b/

diff.relative

如果设置为 truegit diff 不显示目录外的更改,并显示相对于当前目录的路径名。

diff.orderFile

文件,指示如何在差异中对文件进行排序。 有关详细信息,请参阅 git-diff[1]-O 选项。 如果 diff.orderFile 是相对路径名,则将其视为相对于工作树的顶部。

diff.renameLimit

在复制/重命名检测的详尽部分中要考虑的文件数; 等效于 git diff 选项 -l。 如果未设置,则默认值当前为 1000。 如果关闭了重命名检测,则此设置无效。

diff.renames

Git 是否以及如何检测重命名。 如果设置为 false,则禁用重命名检测。 如果设置为 true,则启用基本重命名检测。 如果设置为 copiescopy,Git 也会检测副本。 默认为 true。 请注意,这仅影响 git-diff[1]git-log[1]git diff 瓷器,而不影响 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

diff 驱动程序应用于识别块标头的正则表达式。 也可以使用内置模式。 有关详细信息,请参见 gitattributes[5]

diff.<driver>.binary

将此选项设置为 true 以使 diff 驱动程序将文件视为二进制文件。 有关详细信息,请参见 gitattributes[5]

diff.<driver>.textconv

diff 驱动程序应调用以生成文件的文本转换版本的命令。 转换的结果用于生成人类可读的差异。 有关详细信息,请参见 gitattributes[5]

diff.<driver>.wordRegex

diff 驱动程序应用于拆分行中单词的正则表达式。 有关详细信息,请参见 gitattributes[5]

diff.<driver>.cachetextconv

将此选项设置为 true 以使 diff 驱动程序缓存文本转换输出。 有关详细信息,请参见 gitattributes[5]

diff.indentHeuristic

将此选项设置为 false 以禁用默认启发式算法,该算法会移动差异块边界以使补丁更易于阅读。

diff.algorithm

选择一种差异算法。 变体如下:

default
myers

基本贪婪差异算法。 当前,这是默认值。

minimal

花费额外的时间以确保生成尽可能小的差异。

patience

生成补丁时使用“耐心差异”算法。

histogram

此算法扩展了耐心算法以“支持低频常见元素”。

diff.wsErrorHighlight

突出显示差异的 contextoldnew 行中的空格错误。 多个值以逗号分隔,none 重置先前的值,default 将列表重置为 newallold,new,context 的简写。 空格错误以 color.diff.whitespace 着色。 命令行选项 --ws-error-highlight=<kind> 覆盖此设置。

diff.colorMoved

如果设置为有效的 <mode>true 值,则差异中移动的行将以不同的颜色显示。 有关有效模式的详细信息,请参见 git-diff[1] 中的 --color-moved。 如果仅设置为 true,则将使用默认颜色模式。 设置为 false 时,移动的行不会着色。

diff.colorMovedWS

当使用例如 diff.colorMoved 设置对移动的行进行着色时,此选项控制空格的处理模式。 有关有效模式的详细信息,请参见 git-diff[1] 中的 --color-moved-ws

diff.tool

控制 git-difftool[1] 使用的差异工具。 此变量会覆盖 merge.tool 中配置的值。 下面的列表显示了有效的内置值。 任何其他值都被视为自定义差异工具,并且需要定义相应的 difftool.<tool>.cmd 变量。

diff.guitool

当指定 -g/--gui 标志时,控制 git-difftool[1] 使用的差异工具。 此变量会覆盖 merge.guitool 中配置的值。 下面的列表显示了有效的内置值。 任何其他值都被视为自定义差异工具,并且需要定义相应的 difftool.<guitool>.cmd 变量。

  • araxis

  • bc

  • codecompare

  • deltawalker

  • diffmerge

  • diffuse

  • ecmerge

  • emerge

  • examdiff

  • guiffy

  • gvimdiff

  • kdiff3

  • kompare

  • meld

  • nvimdiff

  • opendiff

  • p4merge

  • smerge

  • tkdiff

  • vimdiff

  • vscode

  • winmerge

  • xxdiff

difftool.<tool>.cmd

指定调用指定差异工具的命令。 指定的命令在 shell 中使用以下变量进行评估:LOCAL 设置为包含差异 pre-image 内容的临时文件的名称,REMOTE 设置为包含差异 post-image 内容的临时文件的名称。

有关更多详细信息,请参见 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 仓库之间进行互操作,这些仓库的 objectFormat 与此 compatObjectFormat 匹配。 特别是,当完全实现后,从 objectFormat 与 compatObjectFormat 匹配的仓库推送和拉取。 除了能够使用以 objectFormat 编码的 oid 外,还能够使用以 compatObjectFormat 编码的 oid 来本地指定对象。

noop

此扩展完全不改变 git 的行为。它仅用于测试 format-1 兼容性。

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

noop-v1

此扩展完全不改变 git 的行为。它仅用于测试 format-1 兼容性。

objectFormat

指定要使用的哈希算法。可接受的值为 sha1sha256。如果未指定,则假定为 sha1

请注意,此设置应仅由 git-init[1]git-clone[1] 设置。尝试在初始化后更改它将不起作用,并且会产生难以诊断的问题。

partialClone

启用后,表示仓库是通过部分克隆创建的(或稍后执行了部分获取),并且远程可能省略了发送某些不需要的对象。 这样的远程调用称为“承诺者远程”,它承诺将来可以从中获取所有此类省略的对象。

此键的值是承诺者远程的名称。

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

preciousObjects

如果启用,则表示仓库中的对象绝对不能被删除(例如,通过 git-prunegit repack -d)。

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

refStorage

指定要使用的 ref 存储格式。可接受的值为

  • files 用于带有 packed-refs 的松散文件。 这是默认设置。

  • reftable 用于 reftable 格式。 此格式是实验性的,其内部结构可能会发生变化。

请注意,此设置应仅由 git-init[1]git-clone[1] 设置。尝试在初始化后更改它将不起作用,并且会产生难以诊断的问题。

relativeWorktrees

如果启用,则表示至少有一个工作区已与相对路径链接。 如果使用 --relative-paths 选项或将 worktree.useRelativePaths 配置设置为 true 创建或修复了工作区,则会自动设置。

worktreeConfig

如果启用,则工作区将从 $GIT_DIR/config.worktree 文件以及 $GIT_COMMON_DIR/config 文件加载配置设置。 请注意,对于主工作树,$GIT_COMMON_DIR$GIT_DIR 是相同的,而其他工作树的 $GIT_DIR 等于 $GIT_COMMON_DIR/worktrees/<id>/config.worktree 文件中的设置将覆盖任何其他配置文件中的设置。

启用此扩展时,如果存在,则必须小心地将某些值从公共配置文件移动到主工作树的 config.worktree 文件中

  • 必须将 core.worktree$GIT_COMMON_DIR/config 移动到 $GIT_COMMON_DIR/config.worktree

  • 如果 core.bare 为 true,则必须将其从 $GIT_COMMON_DIR/config 移动到 $GIT_COMMON_DIR/config.worktree

根据您对每个工作区可自定义的稀疏检出设置的需求,调整 core.sparseCheckoutcore.sparseCheckoutCone 的位置也可能是有益的。 默认情况下,git sparse-checkout 内置命令启用此扩展,在每个工作区的基础上分配这些配置值,并使用 $GIT_DIR/info/sparse-checkout 文件来独立指定每个工作区的稀疏性。 有关更多详细信息,请参见 git-sparse-checkout[1]

+ 由于历史原因,无论 core.repositoryFormatVersion 设置如何,此扩展都有效。

fastimport.unpackLimit

如果 git-fast-import[1] 导入的对象数量低于此限制,则这些对象将被解压缩到松散对象文件中。 但是,如果导入的对象的数量等于或超过此限制,则该 pack 将存储为一个 pack。 从快速导入存储 pack 可以使导入操作更快地完成,尤其是在慢速文件系统上。 如果未设置,则使用 transfer.unpackLimit 的值代替。

feature.*

feature. 开头的配置设置会修改一组其他配置设置的默认值。 这些组由 Git 开发人员社区创建,作为推荐的默认值,并且可能会发生更改。 特别是,可能会添加具有不同默认值的新配置选项。

feature.experimental

启用 Git 新增的配置选项,这些选项正在考虑作为未来的默认值。 此处包含的配置设置可能会在每个版本(包括次要版本更新)中添加或删除。 由于这些设置是全新的,因此可能会产生意外的交互。 如果您有兴趣提供有关实验性功能的反馈,请启用此设置。 新的默认值为

  • fetch.negotiationAlgorithm=skipping 可能会通过一次跳过更多提交来缩短获取协商时间,从而减少往返次数。

  • pack.useBitmapBoundaryTraversal=true 可能会通过减少遍历的对象来缩短位图遍历时间。

  • pack.allowPackReuse=multi 可能会通过重用来自多个 pack 而不仅仅是一个 pack 的对象来缩短创建 pack 所需的时间。

feature.manyFiles

启用针对工作目录中包含大量文件的仓库进行优化的配置选项。 如果有很多文件,则 git statusgit checkout 等命令可能会很慢,而这些新默认值可以提高性能

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

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

  • core.untrackedCache=true 启用未跟踪缓存。 此设置假定 mtime 在您的计算机上有效。

fetch.recurseSubmodules

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

fetch.fsckObjects

如果设置为 true,则 git-fetch-pack 将检查所有获取的对象。 有关检查的内容,请参见 transfer.fsckObjects。 默认为 false。 如果未设置,则使用 transfer.fsckObjects 的值代替。

fetch.fsck.<msg-id>

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

fetch.fsck.skipList

行为类似于 fsck.skipList,但由 git-fetch-pack[1] 而不是 git-fsck[1] 使用。 有关详细信息,请参见 fsck.skipList 文档。

fetch.unpackLimit

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

fetch.prune

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

fetch.pruneTags

如果为 true,则当进行修剪时,fetch 将自动表现得好像提供了 refs/tags/*:refs/tags/* refspec(如果尚未设置)。 这样可以同时设置此选项和 fetch.prune,以保持与上游 refs 的 1=1 映射。 另请参见 remote.<name>.pruneTagsgit-fetch[1] 的 PRUNING 部分。

fetch.all

如果为 true,则 fetch 将尝试更新所有可用的远程仓库。 可以通过传递 --no-all 或显式指定一个或多个要从中获取的远程仓库来覆盖此行为。 默认为 false。

fetch.output

控制如何打印 ref 更新状态。 有效值为 fullcompact。 默认值为 full。 有关详细信息,请参见 git-fetch[1] 中的 OUTPUT 部分。

fetch.negotiationAlgorithm

控制在协商要由服务器发送的 packfile 的内容时,如何发送有关本地仓库中提交的信息。 设置为“consecutive”以使用一种算法,该算法遍历连续的提交并检查每个提交。 设置为“skipping”以使用一种算法,该算法跳过提交以努力更快地收敛,但可能会导致大于必需的 packfile; 或设置为“noop”以不发送任何信息,这将几乎肯定会导致大于必需的 packfile,但会跳过协商步骤。 设置为“default”以覆盖先前所做的设置并使用默认行为。 默认值通常为“consecutive”,但如果 feature.experimental 为 true,则默认值为“skipping”。 未知值将导致 *git fetch* 报错。

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

fetch.showForcedUpdates

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

fetch.parallel

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

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

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

fetch.writeCommitGraph

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

fetch.bundleURI

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

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

fetch.bundleCreationToken

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

创建 token 值由提供特定 bundle URI 的提供程序选择。如果您在 fetch.bundleURI 处修改 URI,请务必在获取之前删除 fetch.bundleCreationToken 值。

filter.<driver>.clean

用于在检入时将工作区文件的内容转换为 blob 的命令。有关详细信息,请参见 gitattributes[5]

filter.<driver>.smudge

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

format.attach

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

format.from

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

format.forceInBodyFrom

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

format.numbered

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

format.headers

要包含在通过邮件提交的补丁中的其他电子邮件标头。请参见 git-format-patch[1]

format.to
format.cc

要包含在通过邮件提交的补丁中的其他收件人。请参见 git-format-patch[1] 中的 --to 和 --cc 选项。

format.subjectPrefix

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

format.coverFromDescription

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

format.signature

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

format.signatureFile

工作方式与 format.signature 类似,不同之处在于,此变量指定的文件内容将用作签名。

format.suffix

format-patch 的默认设置是输出带有后缀 .patch 的文件。使用此变量更改该后缀(如果要包含点,请确保包含该点)。

format.encodeEmailHeaders

使用 "Q-encoding"(在 RFC 2047 中描述)对具有非 ASCII 字符的电子邮件标头进行编码,以便进行电子邮件传输。默认为 true。

format.pretty

log/show/whatchanged 命令的默认漂亮格式。请参见 git-log[1]git-show[1]git-whatchanged[1]

format.thread

git format-patch 的默认线程样式。可以是布尔值,也可以是 shallowdeepshallow 线程将每封邮件都回复到系列的头部,其中头部按封面信、--in-reply-to 和第一封补丁邮件的顺序选择。deep 线程使每封邮件都回复到前一封邮件。true 布尔值与 shallow 相同,false 值禁用线程。

format.signOff

一个布尔值,可让您默认启用 format-patch 的 -s/--signoff 选项。 注意:Signed-off-by 预告片添加到补丁应该是一个有意识的行为,这意味着您证明您有权在相同的开源许可下提交此工作。 请参阅 *SubmittingPatches* 文档以进行进一步讨论。

format.coverLetter

一个布尔值,用于控制在调用 format-patch 时是否生成封面信,此外还可以设置为“auto”,仅当有多个补丁时才生成封面信。默认为 false。

format.outputDirectory

设置一个自定义目录来存储结果文件,而不是当前工作目录。将创建所有目录组件。

format.filenameMaxLength

format-patch 命令生成的输出文件名的最大长度;默认为 64。可以被 --filename-max-length=<n> 命令行选项覆盖。

format.useAutoBase

一个布尔值,可让您默认启用 format-patch 的 --base=auto 选项。 也可以设置为“whenAble”,以允许在可以使用合适的 base 时启用 --base=auto,否则跳过添加 base 信息而不导致 format 崩溃。

format.notes

为 format-patch 的 --notes 选项提供默认值。接受布尔值或指定从何处获取注释的 ref。如果为 false,则 format-patch 默认为 --no-notes。如果为 true,则 format-patch 默认为 --notes。如果设置为非布尔值,则 format-patch 默认为 --notes=<ref>,其中 ref 是非布尔值。默认为 false。

如果要使用 ref refs/notes/true,请使用该文字。

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

例如,

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

将仅显示来自 refs/notes/bar 的注释。

format.mboxrd

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

format.noprefix

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

fsck.<msg-id>

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

设置 fsck.<msg-id> 会被 git-fsck[1] 识别,但要接受推送此类数据,请改用 receive.fsck.<msg-id> 设置;要克隆或抓取此类数据,请使用 fetch.fsck.<msg-id> 设置。

本文档的其余部分为了简洁起见,讨论的是 fsck.*,但同样的原理也适用于对应的 receive.fsck.*fetch.fsck.* 变量。

color.uicore.editor 等变量不同,如果未设置 receive.fsck.<msg-id>fetch.fsck.<msg-id> 变量,它们不会回退到 fsck.<msg-id> 配置。要在不同情况下统一配置相同的 fsck 设置,所有这三个变量都必须设置为相同的值。

设置 fsck.<msg-id> 后,可以通过配置 fsck.<msg-id> 设置将错误切换为警告,反之亦然,其中 <msg-id> 是 fsck 消息 ID,该值为 errorwarnignore 之一。为了方便起见,fsck 在错误/警告前添加了消息 ID 前缀,例如,“missingEmail: invalid author/committer line - missing email” 表示设置 fsck.missingEmail = ignore 将隐藏该问题。

一般来说,最好使用 fsck.skipList 枚举现有存在问题的对象,而不是列出这些问题对象共享的、需要忽略的断裂类型,因为这样做会导致相同断裂类型的新实例被忽略。

设置未知的 fsck.<msg-id> 值会导致 fsck 退出,但对 receive.fsck.<msg-id>fetch.fsck.<msg-id> 执行相同的操作只会导致 Git 发出警告。

有关 <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 使用的增量压缩算法中使用的深度参数。 默认值为 50,这是未使用 --aggressive--depth 选项的默认值。

有关更多详细信息,请参见 git-repack[1]--depth 选项的文档。

gc.aggressiveWindow

git gc --aggressive 使用的增量压缩算法中使用的窗口大小参数。 默认值为 250,这比默认的 --window 值 10 更激进。

有关更多详细信息,请参见 git-repack[1]--window 选项的文档。

gc.auto

当仓库中大约存在超过此数量的松散对象时,git gc --auto 会将它们打包。 一些 Porcelain 命令会不时使用此命令执行轻量级的垃圾回收。 默认值为 6700。

将此值设置为 0 不仅会禁用基于松散对象数量的自动打包,还会禁用 git gc --auto 将使用的任何其他启发式方法,以确定是否存在要完成的工作,例如 gc.autoPackLimit

gc.autoPackLimit

当仓库中存在超过此数量的未用 *.keep 文件标记的包时,git gc --auto 会将它们合并为一个更大的包。 默认值为 50。 将此值设置为 0 会禁用它。 将 gc.auto 设置为 0 也会禁用此功能。

请参阅下面的 gc.bigPackThreshold 配置变量。 使用时,它会影响自动打包限制的工作方式。

gc.autoDetach

如果系统支持,则使 git gc --auto 立即返回并在后台运行。 默认值为 true。 此配置变量在未设置 maintenance.autoDetach 的情况下充当回退。

gc.bigPackThreshold

如果非零,则在运行 git gc 时,会保留所有大于此限制的非 cruft 包。 这与 --keep-largest-pack 非常相似,只不过会保留所有满足阈值的非 cruft 包,而不仅仅是最大的包。 默认为零。 支持常用的单位后缀 kmg

请注意,如果保留的包数大于 gc.autoPackLimit,则将忽略此配置变量,除了基本包之外的所有包都将被重新打包。 之后,包的数量应低于 gc.autoPackLimit,并且应再次遵守 gc.bigPackThreshold。

如果估计的 git repack 平稳运行所需的内存量不可用,并且未设置 gc.bigPackThreshold,则也会排除最大的包(这等效于运行带有 --keep-largest-packgit gc)。

gc.writeCommitGraph

如果为 true,则在运行 git-gc[1] 时,gc 将重写 commit-graph 文件。 使用 git gc --auto 时,如果需要进行内务管理,则将更新 commit-graph。 默认值为 true。 有关详细信息,请参见 git-commit-graph[1]

gc.logExpiry

如果文件 gc.log 存在,则 git gc --auto 将打印其内容并以状态零退出,除非该文件超过 gc.logExpiry 天。 默认为 "1.day"。 有关指定其值的更多方法,请参见 gc.pruneExpire

gc.packRefs

在仓库中运行 git pack-refs 会导致 1.5.1.2 之前的 Git 版本无法通过 HTTP 等简易传输协议克隆它。 此变量确定 git gc 是否运行 git pack-refs。 可以将其设置为 notbare 以在所有非裸仓库中启用它,也可以将其设置为布尔值。 默认值为 true

gc.cruftPacks

将无法访问的对象存储在 cruft 包中(请参见 git-repack[1]),而不是作为松散对象。 默认值为 true

gc.maxCruftSize

重新打包时限制新 cruft 包的大小。 如果除了 --max-cruft-size 之外还指定了此值,则命令行选项优先。 请参见 git-repack[1]--max-cruft-size 选项。

gc.pruneExpire

运行 git gc 时,它将调用 prune --expire 2.weeks.ago(如果使用 cruft 包,则通过 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.<模式>.reflogExpireUnreachable

git reflog expire 删除早于此时间且无法从当前 tip 访问的 reflog 条目;默认为 30 天。“now” 值会立即过期所有条目,“never” 值会完全禁止过期。如果中间存在 “<模式>”(例如,“refs/stash”),则该设置仅适用于与 <模式> 匹配的引用。

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

gc.recentObjectsHook

在考虑是否删除对象时(无论是在生成 cruft pack 还是将无法访问的对象存储为 loose 对象),使用 shell 执行指定的命令。将其输出解释为对象 ID,Git 将这些 ID 视为“最近”的,无论其存在时间长短。通过将其 mtime 视为 “now”,输出中提到的任何对象(及其后代)都将被保留,而不管它们的真实存在时间。

输出必须每行仅包含一个十六进制对象 ID,并且不能包含其他内容。无法在存储库中找到的对象将被忽略。支持多个钩子,但所有钩子都必须成功退出,否则操作(生成 cruft pack 或解包无法访问的对象)将停止。

gc.repackFilter

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

gc.repackFilterTo

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

gc.rerereResolved

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

gc.rerereUnresolved

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

gitcvs.commitMsgAnnotation

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

gitcvs.enabled

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

gitcvs.logFile

日志文件的路径,CVS 服务器接口会在其中记录各种内容。请参阅 git-cvsserver[1]

gitcvs.usecrlfattr

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

gitcvs.allBinary

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

gitcvs.dbName

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

gitcvs.dbDriver

使用的 Perl DBI 驱动程序。您可以在此处指定任何可用的驱动程序,但它可能无法正常工作。git-cvsserver 经过 DBD::SQLite 测试,报告可以使用 DBD::Pg,并且报告无法使用 DBD::mysql。实验性功能。不得包含双冒号 (:)。默认值:SQLite。请参阅 git-cvsserver[1]

gitcvs.dbUser, gitcvs.dbPass

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

gitcvs.dbTableNamePrefix

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

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

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

请参阅 gitweb[1] 以获取说明。

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

请参阅 gitweb.conf[5] 以获取说明。

gpg.program

在制作或验证 PGP 签名时,使用此自定义程序而不是在 $PATH 上找到的 "gpg"。该程序必须支持与 GPG 相同的命令行接口,即,要验证分离的签名,运行 "gpg --verify $signature - <$file",并且该程序应通过以代码 0 退出来表示签名良好。要生成 ASCII 编码的分离签名,将 "gpg -bsau $key" 的标准输入提供要签名的内容,并且该程序应将其结果发送到其标准输出。

gpg.format

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

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

gpg.<格式>.program

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

gpg.minTrustLevel

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

  • undefined

  • never

  • marginal

  • fully

  • ultimate

gpg.ssh.defaultKeyCommand

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

gpg.ssh.allowedSignersFile

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

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

可以将此文件设置为存储库外部的位置,并且每个开发人员维护他们自己的信任存储。中央存储库服务器可以从具有推送访问权限的 ssh 密钥自动生成此文件,以验证代码。在公司环境中,此文件可能从已经处理开发人员 ssh 密钥的自动化程序在全局位置生成。

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

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

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

gpg.ssh.revocationFile

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

grep.lineNumber

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

grep.column

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

grep.patternType

设置默认的匹配行为。使用 basicextendedfixedperl 值将分别启用 --basic-regexp--extended-regexp--fixed-strings--perl-regexp 选项,而 default 值将使用 grep.extendedRegexp 选项来选择 basicextended 之间的一个。

grep.extendedRegexp

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

grep.threads

要使用的 grep 工作线程数。如果未设置(或设置为 0),Git 将使用与可用逻辑内核数一样多的线程。

grep.fullName

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

grep.fallbackToNoIndex

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

gui.commitMsgWidth

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

gui.diffContext

指定 git-gui[1] 所做的 diff 调用中应使用多少上下文行。默认为 "5"。

gui.displayUntracked

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

gui.encoding

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

gui.matchTrackingBranch

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

gui.newBranchTemplate

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

gui.pruneDuringFetch

如果 git-gui[1] 应在执行 fetch 时修剪远程跟踪分支,则为 "true"。默认值为 "false"。

gui.trustmtime

确定 git-gui[1] 是否应信任文件修改时间戳。默认情况下,时间戳是不被信任的。

gui.spellingDictionary

指定用于在 git-gui[1] 中拼写检查提交消息的字典。设置为 "none" 时,拼写检查将被关闭。

gui.fastCopyBlame

如果为 true,则 *git gui blame* 使用 -C 而不是 -C -C 进行原始位置检测。这使得在大型仓库上 blame 显著更快,但代价是较不彻底的复制检测。

gui.copyBlameThreshold

指定在 *git gui blame* 原始位置检测中使用的阈值,以字母数字字符衡量。有关复制检测的更多信息,请参见 git-blame[1] 手册。

gui.blamehistoryctx

指定当从 *git gui blame* 调用 Show History Context 菜单项时,在 gitk[1] 中为所选提交显示的以天为单位的历史上下文的半径。如果此变量设置为零,则显示整个历史记录。

guitool.<name>.cmd

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

guitool.<name>.needsFile

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

guitool.<name>.noConsole

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

guitool.<name>.noRescan

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

guitool.<name>.confirm

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

guitool.<name>.argPrompt

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

guitool.<name>.revPrompt

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

guitool.<name>.revUnmerged

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

guitool.<name>.title

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

guitool.<name>.prompt

指定要在对话框顶部的常规提示字符串,在 *argPrompt* 和 *revPrompt* 的子部分之前显示。默认值包括实际命令。

help.browser

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

help.format

覆盖 git-help[1] 使用的默认帮助格式。支持 *man*、*info*、*web* 和 *html* 值。*man* 是默认值。*web* 和 *html* 相同。

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_proxy*、*https_proxy* 和 *all_proxy* 环境变量进行配置(参见 curl(1))。除了 curl 理解的语法之外,还可以指定一个带有用户名但没有密码的代理字符串,在这种情况下,git 将尝试以与其他凭据相同的方式获取密码。参见 gitcredentials[7] 了解更多信息。因此,语法为 *[protocol://][user[:password]@]proxyhost[:port][/path]*。这可以在每个远程的基础上被覆盖;参见 remote.<name>.proxy

任何代理,无论如何配置,都必须是完全透明的,并且不得以任何方式修改、转换或缓冲请求或响应。已知非完全透明的代理会导致 Git 出现各种形式的故障。

http.proxyAuthMethod

设置用于对 HTTP 代理进行身份验证的方法。这仅在配置的代理字符串包含用户名部分(即,形式为 *user@host* 或 *user@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

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

http.proxySSLCAInfo

包含证书包的文件路径名,该证书包应用于在使用 HTTPS 代理时验证代理。可以被 GIT_PROXY_SSL_CAINFO 环境变量覆盖。

http.emptyAuth

尝试在不寻求用户名或密码的情况下进行身份验证。这可以用于尝试 GSS-Negotiate 身份验证,而无需在 URL 中指定用户名,因为 libcurl 通常需要用户名才能进行身份验证。

http.proactiveAuth

尝试在不首先进行未经身份验证的尝试并接收 401 响应的情况下进行身份验证。这可以用于确保所有请求都经过身份验证。如果 http.emptyAuth 设置为 true,则此值无效。

如果使用的凭据助手指定了一种身份验证方案(即,通过 authtype 字段),则将使用该值;如果在没有方案的情况下提供了用户名和密码,则使用基本身份验证。该选项的值确定从助手请求的方案。可能的值是

  • basic - 从助手请求基本身份验证。

  • auto - 允许助手选择合适的方案。

  • none - 禁用主动身份验证。

请注意,在这种配置下应始终使用 TLS,否则如果选择了 Basic 身份验证,很容易意外暴露明文凭据。

http.delegation

控制 GSSAPI 凭据委派。自 libcurl 7.21.7 版本起,默认禁用委派。设置此参数以告知服务器在用户凭据方面允许委派的内容。与 GSS/kerberos 一起使用。可能的值有:

  • none - 不允许任何委派。

  • policy - 仅当 Kerberos 服务票证中设置了 OK-AS-DELEGATE 标志时才委派,这取决于域策略。

  • always - 无条件地允许服务器委派。

http.extraHeader

与服务器通信时传递额外的 HTTP 标头。如果存在多个此类条目,则会将它们全部添加为额外标头。为了允许覆盖从系统配置继承的设置,空值会将额外标头重置为空列表。

http.cookieFile

包含先前存储的 cookie 行的文件路径名,如果它们与服务器匹配,则应在 Git http 会话中使用。要从中读取 cookie 的文件格式应为纯 HTTP 标头或 Netscape/Mozilla cookie 文件格式(请参阅curl(1))。将其设置为空字符串,以仅接受来自服务器的新 cookie,并在同一连接中的后续请求中将其发回。请注意,除非设置了 http.saveCookies,否则 http.cookieFile 指定的文件仅用作输入。

http.saveCookies

如果设置,则将请求期间收到的 cookie 存储到 http.cookieFile 指定的文件中。如果 http.cookieFile 未设置或设置为空字符串,则无效。

http.version

与服务器通信时使用指定的 HTTP 协议版本。如果您想强制使用默认值。可用和默认版本取决于 libcurl。目前,此选项的可能值为:

  • HTTP/2

  • HTTP/1.1

http.curloptResolve

主机名解析信息,libcurl 在发送 HTTP 请求时将首先使用它。此信息应采用以下格式之一:

  • [+]HOST:PORT:ADDRESS[,ADDRESS]

  • -HOST:PORT

第一种格式将所有对给定 HOST:PORT 的请求重定向到提供的 ADDRESS。第二种格式清除该 HOST:PORT 组合的所有先前配置值。为了允许轻松覆盖从系统配置继承的所有设置,空值会将所有解析信息重置为空列表。

http.sslVersion

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

  • sslv2

  • sslv3

  • tlsv1

  • tlsv1.0

  • tlsv1.1

  • tlsv1.2

  • tlsv1.3

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

http.sslCipherList

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

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

http.sslVerify

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

http.sslCert

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

http.sslKey

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

http.sslCertPasswordProtected

为 SSL 证书启用 Git 的密码提示。否则,如果证书或私钥已加密,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 获取或推送时使用的客户端证书的类型。当使用 openssl 或 gnutls 后端时,支持“PEM”、“DER”。在“openssl”、“schannel”、“securetransport”和 gnutls 8.11+ 上支持“P12”。另请参阅 libcurl CURLOPT_SSLCERTTYPE。可以被 GIT_SSL_CERT_TYPE 环境变量覆盖。

http.sslKeyType

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

http.schannelCheckRevoke

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

http.schannelUseSSLCAInfo

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

http.pinnedPubkey

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

http.sslTry

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

http.maxRequests

并行启动多少个 HTTP 请求。可以被 GIT_HTTP_MAX_REQUESTS 环境变量覆盖。默认为 5。

http.minSessions

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

http.postBuffer

智能 HTTP 传输在将数据 POST 到远程系统时使用的缓冲区的最大大小(以字节为单位)。对于大于此缓冲区大小的请求,使用 HTTP/1.1 和 Transfer-Encoding: chunked 来避免在本地创建大型 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.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.Drafts"、"INBOX/Drafts" 或 "[Gmail]/Drafts"。必需。

imap.tunnel

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

imap.host

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

imap.user

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

imap.pass

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

imap.port

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

imap.sslverify

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

imap.preformattedHTML

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

imap.authMethod

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

include.path
includeIf.<condition>.path

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

index.recordEndOfIndexEntries

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

index.recordOffsetTable

指定索引文件是否应包含“索引条目偏移表”部分。这可以减少多处理器计算机上的索引加载时间,但在使用 2.20 之前的 Git 版本读取索引时会产生消息“忽略 IEOT 扩展”。如果已显式启用 index.threads,则默认为 *true*,否则为 *false*。

index.sparse

启用后,使用稀疏目录条目写入索引。除非同时启用 core.sparseCheckoutcore.sparseCheckoutCone,否则此设置无效。默认为 *false*。

index.threads

指定加载索引时要产生的线程数。这是为了减少多处理器计算机上的索引加载时间。指定 0 或 *true* 将导致 Git 自动检测 CPU 数量并相应地设置线程数。指定 1 或 *false* 将禁用多线程。默认为 *true*。

index.version

指定初始化新索引文件时应使用的版本。这不会影响现有仓库。如果启用了 feature.manyFiles,则默认为 4。

index.skipHash

启用后,不计算索引文件的尾随哈希。这会加速操作索引的 Git 命令,例如 git addgit commitgit status。而是存储校验和,并写入一组值为零的尾随字节,表示已跳过计算。

如果您启用 index.skipHash,则低于 2.13.0 的 Git 客户端将拒绝解析索引,而低于 2.40.0 的 Git 客户端将在 git fsck 期间报告错误。

init.templateDir

指定将从中复制模板的目录。(请参阅 git-init[1] 的“TEMPLATE DIRECTORY”部分。)

init.defaultBranch

允许覆盖默认分支名称,例如在初始化新仓库时。

init.defaultObjectFormat

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

init.defaultRefFormat

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

instaweb.browser

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

instaweb.httpd

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

instaweb.local

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

instaweb.modulePath

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

instaweb.port

将 gitweb httpd 绑定到的端口号。请参阅 git-instaweb[1]

interactive.singleKey

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

interactive.diffFilter

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

log.abbrevCommit

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

log.date

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

如果格式设置为 "auto:foo" 并且使用了分页器,则日期格式将使用格式 "foo"。否则,将使用 "default"。

log.decorate

打印由 log 命令显示的任何提交的 ref 名称。如果指定了 *short*,则不打印 ref 名称前缀 *refs/heads/*、*refs/tags/* 和 *refs/remotes/*。如果指定了 *full*,则将打印完整的 ref 名称(包括前缀)。如果指定了 *auto*,则如果输出到终端,则 ref 名称的显示方式如同给定了 *short* 一样,否则不显示 ref 名称。这与 git log--decorate 选项相同。

log.initialDecorationSet

默认情况下,git log 仅显示某些已知 ref 命名空间的修饰。如果指定了 *all*,则显示所有 refs 作为修饰。

log.excludeDecoration

从日志修饰中排除指定的模式。这类似于 --decorate-refs-exclude 命令行选项,但配置选项可以被 --decorate-refs 选项覆盖。

log.diffMerges

设置当指定 --diff-merges=on 时使用的差异格式,有关详细信息,请参阅 git-log[1] 中的 --diff-merges。默认为 separate

log.follow

如果为 true,则当给出单个 <path> 时,git log 的行为就像使用了 --follow 选项一样。这具有与 --follow 相同的限制,即它不能用于跟踪多个文件,并且在非线性历史记录中效果不佳。

log.graphColors

一个颜色列表,以逗号分隔,可用于在 git log --graph 中绘制历史记录线。

log.showRoot

如果为 true,则初始提交将显示为一个大型创建事件。这等效于针对空树的差异。像 git-log[1]git-whatchanged[1] 这样的工具,通常会隐藏根提交,现在将显示它。默认为 true。

log.showSignature

如果为 true,则让 git-log[1]git-show[1]git-whatchanged[1] 假定使用 --show-signature

log.mailmap

如果为 true,则让 git-log[1]git-show[1]git-whatchanged[1] 假定使用 --use-mailmap,否则假定使用 --no-use-mailmap。默认为 true。

lsrefs.unborn

可以是 "advertise" (默认)、"allow" 或 "ignore"。 如果是 "advertise",服务器将响应客户端发送 "unborn" (如 gitprotocol-v2[5] 中所述),并且将在协议 v2 功能通告期间通告对此功能的支持。"allow" 与 "advertise" 相同,只不过服务器不会通告对此功能的支持;这对于无法原子更新的负载均衡服务器(例如)很有用,因为管理员可以配置 "allow",然后在延迟一段时间后配置 "advertise"。

mailinfo.scissors

如果为 true,则使 git-mailinfo[1](以及因此 git-am[1])默认情况下像提供了 --scissors 选项一样运行。 激活后,此功能会从消息正文中删除剪刀线(即主要由 ">8"、"8<" 和 "-" 组成)之前的所有内容。

mailmap.file

增强 mailmap 文件的位置。首先加载位于存储库根目录中的默认 mailmap,然后加载此变量指向的 mailmap 文件。 mailmap 文件的位置可能位于存储库子目录中,也可能位于存储库本身之外的某个位置。 请参阅 git-shortlog[1]git-blame[1]

mailmap.blob

mailmap.file 类似,但将该值视为对存储库中 blob 的引用。如果同时给出了 mailmap.filemailmap.blob,则会解析两者,其中来自 mailmap.file 的条目优先。在裸存储库中,这默认为 HEAD:.mailmap。在非裸存储库中,它默认为空。

maintenance.auto

此布尔配置选项控制某些命令在完成其正常工作后是否运行 git maintenance run --auto。默认为 true。

maintenance.autoDetach

许多 Git 命令在将数据写入存储库后会触发自动维护。此布尔配置选项控制此自动维护应在前台发生,还是维护进程应分离并在后台继续运行。

如果未设置,则 gc.autoDetach 的值用作备用。如果两者都未设置,则默认为 true,这意味着维护进程将分离。

maintenance.strategy

此字符串配置选项提供了一种方法来指定用于后台维护的几个推荐计划之一。这仅影响在 git maintenance run --schedule=X 命令期间运行哪些任务,前提是没有提供 --task=<task> 参数。此外,如果设置了 maintenance.<task>.schedule 配置值,则使用该值而不是 maintenance.strategy 提供的值。可能的策略字符串是

  • none:此默认设置意味着在任何计划中都不会运行任何任务。

  • incremental:此设置优化用于执行不删除任何数据的少量维护活动。这不会安排 gc 任务,但会每小时运行 prefetchcommit-graph 任务,每天运行 loose-objectsincremental-repack 任务,每周运行 pack-refs 任务。

maintenance.<task>.enabled

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

maintenance.<task>.schedule

此配置选项控制给定的 <task> 是否在 git maintenance run --schedule=<frequency> 命令期间运行。该值必须是“hourly”、“daily”或“weekly”之一。

maintenance.commit-graph.auto

此整数配置选项控制作为 git maintenance run --auto 的一部分运行 commit-graph 任务的频率。如果为零,则 commit-graph 任务将不使用 --auto 选项运行。负值将强制任务每次都运行。否则,正值意味着当不在 commit-graph 文件中的可到达提交的数量至少为 maintenance.commit-graph.auto 的值时,该命令应运行。默认值为 100。

maintenance.loose-objects.auto

此整数配置选项控制作为 git maintenance run --auto 的一部分运行 loose-objects 任务的频率。如果为零,则 loose-objects 任务将不使用 --auto 选项运行。负值将强制任务每次都运行。否则,正值意味着当松散对象的数量至少为 maintenance.loose-objects.auto 的值时,该命令应运行。默认值为 100。

maintenance.incremental-repack.auto

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

man.viewer

指定可以用于以 *man* 格式显示帮助的程序。请参阅 git-help[1]

man.<tool>.cmd

指定调用指定 man 查看器的命令。指定的命令在 shell 中进行评估,并将 man 页面作为参数传递。(请参阅 git-help[1]。)

man.<tool>.path

覆盖可以用于以 *man* 格式显示帮助的给定工具的路径。请参阅 git-help[1]

merge.conflictStyle

指定在合并时,将冲突的块写入工作树文件的样式。默认值为“merge”,它显示一个 <<<<<<< 冲突标记,一方所做的更改,一个 ======= 标记,另一方所做的更改,然后是一个 >>>>>>> 标记。另一种样式“diff3”添加了一个 ||||||| 标记以及 ======= 标记之前的原始文本。“merge”样式倾向于产生比 diff3 更小的冲突区域,这既是因为排除了原始文本,也是因为当两个侧面的行子集匹配时,它们只是从冲突区域中提取出来。 另一种替代样式 "zdiff3" 与 diff3 类似,但在冲突区域的开头或结尾附近出现时,会从冲突区域中删除双方的匹配行。

merge.defaultToUpstream

如果在没有 commit 参数的情况下调用 merge,则通过使用存储在远程跟踪分支中的最新观察值,合并为当前分支配置的上游分支。将查阅 branch.<current branch>.merge 的值,该值命名了在由 branch.<current branch>.remote 命名的远程分支中的分支,然后它们通过 remote.<remote>.fetch 映射到其相应的远程跟踪分支,并且合并这些跟踪分支的顶端。默认为 true。

merge.ff

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

merge.verifySignatures

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

merge.branchdesc

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

merge.log

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

merge.suppressDest

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

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

merge.renameLimit

在合并期间重命名检测的详尽部分中要考虑的文件数量。如果未指定,则默认为 diff.renameLimit 的值。如果未指定 merge.renameLimit 和 diff.renameLimit,则当前默认为 7000。如果禁用重命名检测,则此设置无效。

merge.renames

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

merge.directoryRenames

Git 是否检测目录重命名,从而影响在历史记录的一侧将新文件添加到目录,而该目录在历史记录的另一侧被重命名时,合并时发生的情况。如果 merge.directoryRenames 设置为“false”,则禁用目录重命名检测,这意味着这些新文件将留在旧目录中。如果设置为“true”,则启用目录重命名检测,这意味着这些新文件将移动到新目录中。如果设置为“conflict”,则将报告此类路径的冲突。如果 merge.renames 为 false,则忽略 merge.directoryRenames 并将其视为 false。默认为“conflict”。

merge.renormalize

告诉 Git 存储库中文件的规范表示形式随着时间的推移而发生了变化(例如,较早的 commit 记录了具有 CRLF 行尾的文本文件,但最近的 commit 使用了 LF 行尾)。在此类存储库中,对于每个需要三向内容合并的文件,Git 可以在执行合并之前将 commit 中记录的数据转换为规范形式,以减少不必要的冲突。有关更多信息,请参阅 gitattributes[5] 中的“合并具有不同签入/签出属性的分支”部分。

merge.stat

是否在合并结束时打印 ORIG_HEAD 和合并结果之间的 diffstat。默认为 True。

merge.autoStash

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

merge.tool

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

merge.guitool

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

  • araxis

  • bc

  • codecompare

  • deltawalker

  • diffmerge

  • diffuse

  • ecmerge

  • emerge

  • examdiff

  • guiffy

  • gvimdiff

  • kdiff3

  • meld

  • nvimdiff

  • opendiff

  • p4merge

  • smerge

  • tkdiff

  • tortoisemerge

  • vimdiff

  • vscode

  • winmerge

  • xxdiff

merge.verbosity

控制递归合并策略显示的输出量。级别 0 不输出任何内容,除非检测到冲突时输出最终错误消息。级别 1 仅输出冲突,2 输出冲突和文件更改。级别 5 及以上输出调试信息。默认为级别 2。可以被 GIT_MERGE_VERBOSITY 环境变量覆盖。

merge.<driver>.name

为自定义底层合并驱动程序定义一个人类可读的名称。有关详细信息,请参阅 gitattributes[5]

merge.<driver>.driver

定义实现自定义底层合并驱动程序的命令。有关详细信息,请参阅 gitattributes[5]

merge.<driver>.recursive

命名一个底层合并驱动程序,用于在公共祖先之间执行内部合并时使用。有关详细信息,请参阅 gitattributes[5]

mergetool.<tool>.path

覆盖给定工具的路径。 如果您的工具不在 PATH 中,这将很有用。

mergetool.<tool>.cmd

指定调用指定合并工具的命令。指定的命令在 shell 中进行评估,并提供以下变量:BASE 是一个临时文件的名称,该文件包含要合并的文件的公共基础(如果可用);LOCAL 是一个临时文件的名称,该文件包含当前分支上文件的内容;REMOTE 是一个临时文件的名称,该文件包含要合并的分支中的文件的内容;MERGED 包含合并工具应将成功合并的结果写入的文件名。

mergetool.<tool>.hideResolved

允许用户覆盖特定工具的全局 mergetool.hideResolved 值。有关完整说明,请参阅 mergetool.hideResolved

mergetool.<tool>.trustExitCode

对于自定义合并命令,指定是否可以使用合并命令的退出代码来确定合并是否成功。如果未将其设置为 true,则会检查合并目标文件时间戳,如果该文件已更新,则假定合并已成功;否则,将提示用户指示合并的成功。

mergetool.meld.hasOutput

较旧版本的 meld 不支持 --output 选项。 Git 将尝试通过检查 meld --help 的输出来检测 meld 是否支持 --output。配置 mergetool.meld.hasOutput 将使 Git 跳过这些检查并使用配置的值。将 mergetool.meld.hasOutput 设置为 true 告诉 Git 无条件地使用 --output 选项,而 false 则避免使用 --output

mergetool.meld.useAutoMerge

当给出 --auto-merge 时,meld 将自动合并所有非冲突部分,突出显示冲突部分,并等待用户决定。将 mergetool.meld.useAutoMerge 设置为 true 告诉 Git 无条件地将 --auto-merge 选项与 meld 一起使用。将此值设置为 auto 使 git 检测是否支持 --auto-merge 并且仅在可用时才使用 --auto-merge。值 false 避免完全使用 --auto-merge,并且是默认值。

mergetool.<vimdiff variant>.layout

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

mergetool.hideResolved

在合并期间,Git 将自动解决尽可能多的冲突,并将包含冲突标记的 MERGED 文件写入到它无法解决的任何冲突周围;LOCALREMOTE 通常表示来自 Git 冲突解决之前的文件的版本。此标志导致覆盖 LOCALREMOTE,以便仅将未解决的冲突呈现给合并工具。可以通过 mergetool.<tool>.hideResolved 配置变量按工具配置。默认为 false

mergetool.keepBackup

执行合并后,可以将带有冲突标记的原始文件保存为带有 .orig 扩展名的文件。如果此变量设置为 false,则不会保留此文件。默认为 true(即保留备份文件)。

mergetool.keepTemporaries

调用自定义合并工具时,Git 使用一组临时文件传递给该工具。如果该工具返回错误并且此变量设置为 true,则将保留这些临时文件;否则,它们将在该工具退出后被删除。默认为 false

mergetool.writeToTemp

默认情况下,Git 将冲突文件的临时 BASELOCALREMOTE 版本写入工作区。如果设置为 true,Git 将尝试使用临时目录来存储这些文件。默认为 false

mergetool.prompt

在每次调用合并解决程序之前提示。

mergetool.guiDefault

设为 true 时,默认使用 merge.guitool(相当于指定 --gui 参数),设为 auto 时,则根据 DISPLAY 环境变量的值选择 merge.guitoolmerge.tool。默认值为 false,此时必须显式提供 --gui 参数才能使用 merge.guitool

notes.mergeStrategy

解决 notes 冲突时,默认选择哪种合并策略。必须是 manualourstheirsunioncat_sort_uniq 之一。默认为 manual。有关每种策略的更多信息,请参阅 git-notes[1] 的“NOTES MERGE STRATEGIES”部分。

可以通过将 --strategy 选项传递给 git-notes[1] 来覆盖此设置。

notes.<name>.mergeStrategy

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

notes.displayRef

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

可以使用 GIT_NOTES_DISPLAY_REF 环境变量覆盖此设置,该变量必须是以冒号分隔的 refs 或 globs 列表。

如果 ref 不存在,将发出警告,但如果 glob 不匹配任何 ref,则会被静默忽略。

可以通过 git-log[1] 系列命令的 --no-notes 选项或这些命令接受的 --notes=<ref> 选项禁用此设置。

core.notesRef(可能被 GIT_NOTES_REF 覆盖)的有效值也会隐式添加到要显示的 refs 列表中。

notes.rewrite.<command>

当使用 *<command>*(当前为 amendrebase)重写提交时,如果此变量为 false,则 git 不会将 notes 从原始提交复制到重写后的提交。默认为 true。另请参阅下面的 notes.rewriteRef

可以使用 GIT_NOTES_REWRITE_REF 环境变量覆盖此设置,该变量必须是以冒号分隔的 refs 或 globs 列表。

notes.rewriteMode

在重写期间复制 notes 时(请参阅 notes.rewrite.<command> 选项),确定如果目标提交已经有 note 时该怎么做。必须是 overwriteconcatenatecat_sort_uniqignore 之一。默认为 concatenate

可以使用 GIT_NOTES_REWRITE_MODE 环境变量覆盖此设置。

notes.rewriteRef

在重写期间复制 notes 时,指定应复制其 notes 的(完全限定的)ref。 可以是 glob,在这种情况下,将复制所有匹配 refs 中的 notes。 您也可以多次指定此配置。

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

可以使用 GIT_NOTES_REWRITE_REF 环境变量覆盖。有关其格式的进一步说明,请参阅上面的 notes.rewrite.<command>

pack.window

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

pack.depth

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

pack.windowMemory

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

pack.compression

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

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

pack.allowPackReuse

当为 true 或 “single”,且启用了可达性位图时,pack-objects 将尝试原封不动地发送位图 packfile 的部分内容。当为 “multi”,且提供了多 pack 可达性位图时,pack-objects 将尝试发送 MIDX 中所有 pack 的部分内容。

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

pack.island

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

pack.islandCore

指定一个 island 名称,该 island 的对象将首先被打包。这在某个 pack 的前面创建了一种伪 pack,因此来自指定 island 的对象有望更快地复制到应提供给请求这些对象的用户的任何 pack 中。实际上,这意味着指定的 island 应该很可能对应于 repo 中最常被克隆的内容。另请参阅 git-pack-objects[1] 中的 "DELTA ISLANDS"。

pack.deltaCacheSize

在将 deltas 写入 pack 之前,用于在 git-pack-objects[1] 中缓存 deltas 的最大内存(以字节为单位)。 此缓存用于加速写入对象阶段,而无需在找到所有对象的最佳匹配后重新计算最终 delta 结果。 但是,在内存紧张的机器上重新打包大型存储库可能会受到严重影响,特别是如果此缓存将系统推入交换。 值为 0 表示没有限制。 最小大小 1 字节可用于实际禁用此缓存。 默认为 256 MiB。

pack.deltaCacheLimit

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

pack.threads

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

pack.indexVersion

指定默认的 pack 索引版本。 有效值为 1,表示 1.5.2 之前的 Git 版本使用的旧版 pack 索引,以及 2,表示新的 pack 索引,该索引具有处理大于 4 GB 的 pack 以及适当保护免受损坏的 pack 重新打包的功能。 版本 2 是默认值。 请注意,每当相应的 pack 大于 2 GB 时,都会强制使用版本 2,并且会忽略此配置选项。

如果您有一个旧的 Git,它不理解版本 2 的 *.idx 文件,那么通过非原生协议(例如“http”)克隆或获取将从另一侧复制 *.pack 文件和相应的 *.idx 文件,可能会为您提供一个无法通过您的旧版本 Git 访问的存储库。 但是,如果 *.pack 文件小于 2 GB,则可以使用 git-index-pack[1] 在 *.pack 文件上重新生成 *.idx 文件。

pack.packSizeLimit

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

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

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

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

pack.useBitmaps

如果为 true,则在打包到 stdout 时(例如,在 fetch 的服务器端期间),git 将使用 pack 位图(如果可用)。 默认为 true。 通常,您不需要关闭此选项,除非您正在调试 pack 位图。

pack.useBitmapBoundaryTraversal

如果为 true,Git 将使用一种实验性算法来计算使用位图的可达性查询。 不再为所有取反的 tips 构建完整的位图,然后将它们 OR 在一起,而是将带有现有位图的取反的 tips 视为附加的(即,如果它们存在则将它们 OR 到结果中,否则忽略它们),并在边界处构建位图。

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

在许多情况下,与精确算法相比,这可以提供加速,尤其是在查询的取反侧位图覆盖率较差时。

pack.useSparse

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

pack.preferBitmapTips

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

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

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

pack.writeBitmaps(已弃用)

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

pack.writeBitmapHashCache

如果为 true,则 git 将在位图索引(如果已写入)中包含一个“哈希缓存”部分。 此缓存可用于为 git 的 delta 启发法提供数据,从而可能在位图对象和非位图对象之间产生更好的 delta(例如,在提供较旧的位图包和自上次 gc 以来已推送的对象之间的 fetch 时)。 缺点是它每个对象占用 4 字节的磁盘空间。 默认为 true。

在写入多包可达性位图时,不会计算新的 namehash;相反,写入新位图时,存储在现有位图中的任何 namehash 都会被置换到其适当的位置。

pack.writeBitmapLookupTable

如果为 true,则 Git 将在位图索引(如果已写入)中包含一个“查找表”部分。 此表用于尽可能延迟加载单个位图。 这对于具有相对较大的位图索引的存储库可能是有益的。 默认为 false。

pack.readReverseIndex

如果为 true,则 git 将读取任何可能可用的 .rev 文件(请参阅:gitformat-pack[5])。 如果为 false,则反向索引将从头开始生成并存储在内存中。 默认为 true。

pack.writeReverseIndex

如果为 true,则 git 将为它写入的每个新 packfile 编写相应的 .rev 文件(请参阅:gitformat-pack[5]),除了在 git-fast-import[1] 和批量签入机制中。 默认为 true。

pager.<cmd>

如果该值是布尔值,则在写入 tty 时,打开或关闭特定 Git 子命令输出的分页。 否则,使用 pager.<cmd> 的值指定的 pager 打开子命令的分页。 如果在命令行上指定了 --paginate--no-pager,则它优先于此选项。 要禁用所有命令的分页,请将 core.pagerGIT_PAGER 设置为 cat

pretty.<name>

--pretty= 格式字符串的别名,如 git-log[1] 中所述。 此处定义的任何别名都可以像内置的 pretty 格式一样使用。 例如,运行 git config pretty.changelog "format:* %H %s" 将导致调用 git log --pretty=changelog 等效于运行 git log "--pretty=format:* %H %s"。 请注意,与内置格式具有相同名称的别名将被静默忽略。

promisor.quiet

如果设置为 "true",则在为部分克隆获取其他对象时,假定使用 --quiet

promisor.advertise

如果设置为 "true",服务器将使用 "promisor-remote" 功能,请参阅 gitprotocol-v2[5],来广播它正在使用的 promisor 远程仓库(如果它使用某些 promisor 远程仓库)。 默认值为 "false",这意味着不广播 "promisor-remote" 功能。

promisor.acceptFromServer

如果设置为 "all",客户端将接受服务器可能使用 "promisor-remote" 功能广播的所有 promisor 远程仓库。 如果设置为 "knownName",客户端将接受已在客户端上配置的、并且与客户端广播的 promisor 远程仓库具有相同名称的 promisor 远程仓库。 这不是很安全,但可以在公司设置中使用,在这种设置中,服务器和客户端被信任不会切换名称和 URL。 如果设置为 "knownUrl",客户端将接受在客户端上配置的、并且与服务器广播的名称和 URL 具有相同名称和相同 URL 的 promisor 远程仓库。 这比 "all" 或 "knownName" 更安全,因此如果可能,应使用此选项而不是这些选项。 默认值为 "none",这意味着将不接受服务器广播的任何 promisor 远程仓库。 通过接受 promisor 远程仓库,客户端同意服务器可能会从其对客户端的 "fetch" 和 "clone" 请求的响应中省略可以从此 promisor 远程仓库延迟获取的对象。 请参阅 gitprotocol-v2[5]

protocol.allow

如果设置,则为所有没有明确策略的协议(protocol.<name>.allow)提供用户定义的默认策略。 默认情况下,如果未设置,已知安全协议(http、https、git、ssh)的默认策略为 always,已知危险协议(ext)的默认策略为 never,所有其他协议(包括 file)的默认策略为 user。 支持的策略

  • always - 协议始终可以使用。

  • never - 协议永远不能使用。

  • user - 只有当 GIT_PROTOCOL_FROM_USER 未设置或值为 1 时,协议才能使用。 当您希望用户直接使用协议,但不希望命令在没有用户输入的情况下执行 clone/fetch/push 命令(例如,递归子模块初始化)时,应使用此策略。

protocol.<name>.allow

设置一个策略,供协议 <name> 与 clone/fetch/push 命令一起使用。 有关可用策略,请参阅上面的 protocol.allow

git 当前使用的协议名称为

  • file: 任何基于本地文件的路径(包括 file:// URL 或本地路径)

  • git: 通过直接 TCP 连接(或代理,如果已配置)的匿名 git 协议

  • ssh: 通过 ssh 的 git(包括 host:path 语法、ssh:// 等)。

  • http: 通过 http 的 git,包括 "smart http" 和 "dumb 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,以便本地合并提交包含在 rebase 中(有关详细信息,请参阅 git-rebase[1])。

当值为 interactive(或仅 i)时,rebase 以交互模式运行。

注意:这可能是一个危险的操作; 在您了解其含义之前,请勿 使用它(有关详细信息,请参阅 git-rebase[1])。

pull.octopus

一次拉取多个分支时要使用的默认合并策略。

pull.twohead

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

push.autoSetupRemote

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

push.default

定义如果没有给出 refspec(无论是从命令行、配置还是其他地方),git push 应该采取的操作。 不同的值非常适合特定的工作流程;例如,在纯粹的中心工作流程中(即,fetch 源等于推送目标),upstream 可能是您想要的。 可能的值包括

  • nothing - 不推送任何内容(出错),除非给出 refspec。 这主要是为那些希望通过始终明确来避免错误的人准备的。

  • current - 推送当前分支以更新接收端具有相同名称的分支。 在中心和非中心工作流程中都有效。

  • upstream - 将当前分支推送回其更改通常集成到当前分支的分支(称为 @{upstream})。 只有在您推送到您通常从中拉取的同一个存储库时(即中心工作流程),此模式才有意义。

  • tracking - 这是 upstream 的已弃用同义词。

  • simple - 推送当前分支,使其在远程仓库上具有相同的名称。

    如果您正在处理中心工作流程(推送到您从中拉取的同一个存储库,通常是 origin),那么您需要配置一个具有相同名称的上游分支。

    自 Git 2.0 以来,此模式是默认设置,并且是最适合初学者的最安全选项。

  • matching - 推送两端都具有相同名称的所有分支。 这会使您要推送到的存储库记住将要推送的分支集(例如,如果您始终推送 maintmaster 并且没有其他分支,则您要推送到的存储库将具有这两个分支,并且您的本地 maintmaster 将被推送到那里)。

    要有效地使用此模式,您必须确保在运行 git push 之前,您要推送的所有分支都已准备好被推送,因为此模式的全部意义在于允许您一次推送所有分支。 如果您通常只完成一个分支的工作并推送结果,而其他分支未完成,则此模式不适合您。 此外,此模式不适合推送到共享的中心存储库,因为其他人可能会在那里添加新分支,或者在您无法控制的情况下更新现有分支的顶端。

    这曾经是默认设置,但自 Git 2.0 以来不是(simple 是新的默认设置)。

push.followTags

如果设置为 true,则默认启用 --follow-tags 选项。 您可以在推送时通过指定 --no-follow-tags 来覆盖此配置。

push.gpgSign

可以设置为布尔值或字符串 if-asked。 true 值会导致所有推送都经过 GPG 签名,就像将 --signed 传递给 git-push[1] 一样。 字符串 if-asked 会导致在服务器支持的情况下对推送进行签名,就像将 --signed=if-asked 传递给 git push 一样。 false 值可能会覆盖来自优先级较低的配置文件的值。 显式命令行标志始终覆盖此配置选项。

push.pushOption

如果没有从命令行给出 --push-option=<option> 参数,则 git push 的行为就像是将此变量的每个 <value> 都作为 --push-option=<value> 给出一样。

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

Example:

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

~/.gitconfig
  push.pushoption = c

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

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

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

push.useForceIfIncludes

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

push.negotiate

如果设置为 "true",则尝试通过客户端和服务器尝试查找共同提交的协商轮次来减小发送的 packfile 的大小。如果为 "false",则 Git 将仅依靠服务器的 ref 公告来查找共同的提交。

push.useBitmaps

如果设置为 "false",则禁用 "git push" 的位图使用,即使 pack.useBitmaps 为 "true",也不会阻止其他 git 操作使用位图。默认为 true。

rebase.backend

用于 rebase 的默认后端。可能的选择是 *apply* 或 *merge*。将来,如果 merge 后端获得 apply 后端的所有剩余功能,则此设置可能不会使用。

rebase.stat

是否显示自上次 rebase 以来 upstream 中发生的变化的 diffstat。默认为 False。

rebase.autoSquash

如果设置为 true,则默认情况下为交互模式启用 git-rebase[1]--autosquash 选项。可以使用 --no-autosquash 选项覆盖此设置。

rebase.autoStash

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

rebase.updateRefs

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

rebase.missingCommitsCheck

如果设置为 "warn",则 git rebase -i 将在删除某些提交(例如,删除了某行)时打印警告,但是 rebase 仍将继续。如果设置为 "error",则它将打印先前的警告并停止 rebase,然后可以使用 *git rebase --edit-todo* 来纠正错误。如果设置为 "ignore",则不执行任何检查。要删除提交而不发出警告或错误,请在 todo 列表中使用 drop 命令。默认为 "ignore"。

rebase.instructionFormat

一个格式字符串,如 git-log[1] 中指定的,用于交互式 rebase 期间的 todo 列表。该格式将自动将提交哈希前置于该格式。

rebase.abbreviateCommands

如果设置为 true,则 git rebase 将在 todo 列表中使用缩写的命令名称,从而产生如下内容

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

代替

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

默认为 false。

rebase.rescheduleFailedExec

自动重新安排失败的 exec 命令。这仅在交互模式下(或提供了 --exec 选项时)才有意义。这与指定 --reschedule-failed-exec 选项相同。

rebase.forkPoint

如果设置为 false,则默认设置 --no-fork-point 选项。

rebase.rebaseMerges

是否以及如何默认设置 --rebase-merges 选项。可以是 rebase-cousinsno-rebase-cousins 或布尔值。设置为 true 或 no-rebase-cousins 等同于 --rebase-merges=no-rebase-cousins,设置为 rebase-cousins 等同于 --rebase-merges=rebase-cousins,设置为 false 等同于 --no-rebase-merges。在命令行上传递 --rebase-merges(无论是否带有参数)都将覆盖任何 rebase.rebaseMerges 配置。

rebase.maxLabelLength

从提交主题生成标签名称时,将名称截断为此长度。默认情况下,名称会被截断为略小于 NAME_MAX(以允许例如为相应的松散引用写入 .lock 文件)。

receive.advertiseAtomic

默认情况下,git-receive-pack 将向其客户端公告 atomic push 功能。如果您不想公告此功能,请将此变量设置为 false。

receive.advertisePushOptions

如果设置为 true,则 git-receive-pack 将向其客户端公告 push options 功能。默认为 False。

receive.autogc

默认情况下,git-receive-pack 将在接收到来自 git-push 的数据并更新 ref 之后运行 "git maintenance run --auto"。您可以通过将此变量设置为 false 来停止它。

receive.certNonceSeed

通过将此变量设置为字符串,git receive-pack 将接受 git push --signed 并通过使用 HMAC 保护的“nonce”进行验证,并使用此字符串作为密钥。

receive.certNonceSlop

git push --signed 发送一个带有 "nonce" 的 push 证书,该 "nonce" 是在相同存储库中提供服务的 receive-pack 在此期间发出的,将证书中找到的 "nonce" 导出到 GIT_PUSH_CERT_NONCE 到 hooks(而不是 receive-pack 要求发送方包含的内容)。这可以更容易地在 pre-receivepost-receive 中编写检查。他们只需要检查 GIT_PUSH_CERT_NONCE_STATUS 是否为 OK,而不是检查记录 nonce 过期时间的 GIT_PUSH_CERT_NONCE_SLOP 环境变量来决定是否要接受证书。

receive.fsckObjects

如果设置为 true,则 git-receive-pack 将检查所有接收到的对象。有关检查的内容,请参见 transfer.fsckObjects。默认为 false。如果未设置,则使用 transfer.fsckObjects 的值。

receive.fsck.<msg-id>

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

receive.fsck.skipList

类似于 fsck.skipList,但由 git-receive-pack[1] 而不是 git-fsck[1] 使用。 有关详细信息,请参见 fsck.skipList 文档。

receive.keepAlive

从客户端接收到 pack 之后,receive-pack 在处理 pack 时可能不会产生任何输出(如果指定了 --quiet),这会导致某些网络断开 TCP 连接。设置此选项后,如果 receive-pack 在此阶段的 receive.keepAlive 秒内未传输任何数据,它将发送一个简短的 keepalive 数据包。默认为 5 秒;设置为 0 可完全禁用 keepalive。

receive.unpackLimit

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

receive.maxInputSize

如果传入的 pack 流的大小大于此限制,则 git-receive-pack 将出错,而不是接受 pack 文件。如果未设置或设置为 0,则大小不受限制。

receive.denyDeletes

如果设置为 true,则 git-receive-pack 将拒绝删除 ref 的 ref 更新。使用此功能可以防止通过推送删除此类 ref。

receive.denyDeleteCurrent

如果设置为 true,则 git-receive-pack 将拒绝删除非裸存储库的当前检出分支的 ref 更新。

receive.denyCurrentBranch

如果设置为 true 或 "refuse",则 git-receive-pack 将拒绝更新非裸存储库的当前检出分支。 这样的推送存在潜在的危险,因为它使 HEAD 与索引和工作树不同步。 如果设置为 "warn",则将此类推送的警告打印到 stderr,但允许继续推送。 如果设置为 false 或 "ignore",则允许此类推送,而不显示任何消息。 默认为 "refuse"。

另一种选择是 "updateInstead",如果推送到当前分支,它将更新工作树。 此选项旨在同步工作目录,当一侧无法通过交互式 ssh 轻松访问时(例如,一个活动的网站,因此要求工作目录是干净的)。 在虚拟机中开发以测试和修复不同操作系统上的代码时,此模式也很方便。

默认情况下,如果工作树或索引与 HEAD 有任何差异,"updateInstead" 将拒绝推送,但是可以使用 push-to-checkout 钩子自定义此行为。 请参见 githooks[5]

receive.denyNonFastForwards

如果设置为 true,则 git-receive-pack 将拒绝不是快进的 ref 更新。 使用此功能可以防止通过推送进行此类更新,即使强制执行了该推送。 初始化共享存储库时,将设置此配置变量。

receive.hideRefs

此变量与 transfer.hideRefs 相同,但仅适用于 receive-pack(因此会影响推送,但不影响提取)。 尝试通过 git push 更新或删除隐藏的 ref 将被拒绝。

receive.procReceiveRefs

这是一个多值变量,用于定义引用前缀以匹配 receive-pack 中的命令。匹配此前缀的命令将由外部钩子 "proc-receive" 执行,而不是内部的 execute_commands 函数。 如果未定义此变量,则永远不会使用 "proc-receive" 钩子,所有命令都将由内部的 execute_commands 函数执行。

例如,如果此变量设置为 "refs/for",则推送到诸如 "refs/for/master" 之类的引用将不会创建或更新名为 "refs/for/master" 的引用,但可能会通过运行 "proc-receive" 钩子直接创建或更新 pull request。

可选的修饰符可以在值的开头提供,以过滤特定操作的命令:创建 (a),修改 (m),删除 (d)。 可以在修饰符中包含 ! 来否定引用前缀条目。例如:

git config --system --add receive.procReceiveRefs ad:refs/heads
git config --system --add receive.procReceiveRefs !:refs/heads
receive.updateServerInfo

如果设置为 true,git-receive-pack 将在从 git-push 接收数据并更新 refs 后运行 git-update-server-info。

receive.shallowUpdate

如果设置为 true,当新的 refs 需要新的 shallow roots 时,可以更新 .git/shallow。 否则,这些 refs 将被拒绝。

reftable.blockSize

reftable 后端写入块时使用的字节大小。 块大小由写入器确定,不必是 2 的幂。 块大小必须大于存储库中使用的最长引用名称或日志条目,因为引用不能跨越块。

建议使用对虚拟内存系统或文件系统友好的 2 的幂(例如 4kB 或 8kB)。 较大的尺寸 (64kB) 可以产生更好的压缩效果,但读者在访问期间可能会增加成本。

最大块大小为 16777215 字节 (15.99 MiB)。 默认值为 4096 字节 (4kB)。 值为 0 将使用默认值。

reftable.restartInterval

创建重启点的时间间隔。 reftable 后端在文件创建时确定重启点。 每 16 个可能更适合较小的块大小(4k 或 8k),每 64 个更适合较大的块大小(64k)。

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

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

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

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

reftable.indexObjects

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

默认值为 true

reftable.geometricFactor

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

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

reftable.lockTimeout

每当 reftable 后端将新表附加到堆栈时,它必须先锁定中央 "tables.list" 文件,然后才能对其进行更新。 此配置控制进程在另一个进程已经获取锁的情况下,等待获取锁的时间。 值 0 表示根本不重试;-1 表示无限期尝试。 默认为 100(即,重试 100 毫秒)。

remote.pushDefault

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

remote.<name>.url

远程仓库的 URL。 请参阅 git-fetch[1]git-push[1]。 配置的远程仓库可以有多个 URL;在这种情况下,第一个用于获取,所有 URL 都用于推送(假设没有定义 remote.<name>.pushurl)。 将此键设置为空字符串会清除 URL 列表,允许您覆盖之前的配置。

remote.<name>.pushurl

远程仓库的推送 URL。 请参阅 git-push[1]。 如果配置的远程仓库中存在 pushurl 选项,则在推送时使用它代替 remote.<name>.url。 配置的远程仓库可以有多个推送 URL;在这种情况下,推送会发送到所有 URL。 将此键设置为空字符串会清除 URL 列表,允许您覆盖之前的配置。

remote.<name>.proxy

对于需要 curl (http, https 和 ftp) 的远程仓库,这是用于该远程仓库的代理 URL。 设置为空字符串可禁用该远程仓库的代理。

remote.<name>.proxyAuthMethod

对于需要 curl(http、https 和 ftp)的远程仓库,这是用于对正在使用的代理进行身份验证的方法(可能在 remote.<name>.proxy 中设置)。 请参阅 http.proxyAuthMethod

remote.<name>.fetch

git-fetch[1] 的默认 "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] 的 PRUNING 部分。

remote.<name>.promisor

设置为 true 时,此远程仓库将用于获取 promisor 对象。

remote.<name>.partialclonefilter

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

remote.<name>.serverOption

从此远程仓库获取时使用的默认服务器选项集。 这些服务器选项可以被 --server-option= 命令行参数覆盖。

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

remote.<name>.followRemoteHEAD

git-fetch[1] 应如何处理 remotes/<name>/HEAD 的更新。 默认值为 "create",如果 remotes/<name>/HEAD 存在于远程仓库上,但不存在于本地,则将创建它; 这不会触及已存在的本地引用。 将其设置为 "warn" 将在远程仓库具有与本地仓库不同的值时打印一条消息; 如果没有本地引用,它的行为类似于 "create"。 "warn" 的变体是 "warn-if-not-$branch",它的行为类似于 "warn",但如果远程仓库上的 HEAD$branch,它将保持静默。 将其设置为 "always" 会以静默方式将 remotes/<name>/HEAD 更新为远程仓库上的值。 最后,将其设置为 "never" 将永远不会更改或创建本地引用。

remotes.<group>

由 "git remote update <group>" 获取的远程仓库列表。 请参阅 git-remote[1]

repack.useDeltaBaseOffset

默认情况下,git-repack[1] 创建使用 delta-base offset 的包。 如果您需要与低于 1.4.4 版本的 Git 共享您的存储库,无论是直接还是通过 http 等简单协议,则需要将此选项设置为 "false" 并重新打包。 从旧 Git 版本通过原生协议访问不受此选项的影响。

repack.packKeptObjects

如果设置为 true,则使 git repack 的行为就像传递了 --pack-kept-objects 一样。 有关详细信息,请参阅 git-repack[1]。 通常默认为 false,但如果正在写入位图索引(通过 --write-bitmap-indexrepack.writeBitmaps),则默认为 true

repack.useDeltaIslands

如果设置为 true,则使 git repack 的行为就像传递了 --delta-islands 一样。 默认为 false

repack.writeBitmaps

如果设为 true,当将所有对象打包到磁盘时(例如,当运行 git repack -a 时),git 会写入一个位图索引。此索引可以加快为克隆和获取创建的后续包的“计数对象”阶段,但会牺牲一些磁盘空间和花费额外的初始重新打包时间。如果创建了多个包文件,则此设置无效。默认情况下,在裸仓库上为 true,否则为 false。

repack.updateServerInfo

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

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

生成 cruft 包时 git-pack-objects[1] 使用的参数,并且相应的参数未通过命令行给出。有关默认值和含义,请参见类似命名的 pack.* 配置变量。

rerere.autoUpdate

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

rerere.enabled

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

revert.reference

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

safe.bareRepository

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

  • all:Git 可以与所有裸仓库一起使用。这是默认值。

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

    如果在您的工作流程中未使用裸仓库,则最好在您的全局配置中将 safe.bareRepository 设置为 explicit。 这将保护您免受涉及克隆包含裸仓库的存储库并在该目录中运行 Git 命令的攻击。

    此配置设置仅在受保护的配置中有效(请参见 SCOPES)。 这样可以防止不受信任的存储库篡改此值。

safe.directory

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

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

此配置设置仅在受保护的配置中有效(请参见 SCOPES)。 这样可以防止不受信任的存储库篡改此值。

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

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

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

sendemail.identity

一个配置标识。 如果给定,会导致 sendemail.<identity> 子节中的值优先于 sendemail 节中的值。 默认标识是 sendemail.identity 的值。

sendemail.smtpEncryption

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

sendemail.smtpSSLCertPath

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

sendemail.<identity>.*

下面找到的 sendemail.* 参数的特定于标识的版本,当通过命令行或 sendemail.identity 选择此标识时,优先于这些参数。

sendemail.multiEdit

如果为 true(默认),则会生成单个编辑器实例来编辑您必须编辑的文件(当使用 --annotate 时为补丁,当使用 --compose 时为摘要)。 如果为 false,则将一个接一个地编辑文件,每次生成一个新的编辑器。

sendemail.confirm

设置发送前是否确认的默认值。 必须是 *always*、*never*、*cc*、*compose* 或 *auto* 之一。 有关这些值的含义,请参见 git-send-email[1] 文档中的 --confirm

sendemail.mailmap

如果为 true,则使 git-send-email[1] 假定 --mailmap,否则假定 --no-mailmap。 默认为 False。

sendemail.mailmap.file

git-send-email[1] 特定的补充 mailmap 文件的位置。 默认 mailmap 和 mailmap.file 首先加载。 因此,此文件中的条目优先于默认 mailmap 位置中的条目。 参见 gitmailmap[5]

sendemail.mailmap.blob

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

sendemail.aliasesFile

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

sendemail.aliasFileType

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

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

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

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

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

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

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

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

sendemail.signedOffCc (已弃用)

已弃用的 sendemail.signedOffByCc 别名。

sendemail.smtpBatchSize

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

sendemail.smtpReloginDelay

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

sendemail.forbidSendmailVariables

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

sequence.editor

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

showBranch.default

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

sparse.expectFilesOutsideOfPatterns

通常,使用稀疏检出时,与任何稀疏模式都不匹配的文件将在索引中标记 SKIP_WORKTREE 位,并且从工作目录中缺失。因此,Git 通常会检查具有 SKIP_WORKTREE 位的檔案是否实际存在于工作目录中,与预期相反。如果 Git 找到任何此类文件,它会通过清除相关的 SKIP_WORKTREE 位来将这些路径标记为存在。可以使用此选项告诉 Git,这种存在但被跳过的文件是预期的,并停止检查它们。

默认值为 false,这允许 Git 自动从索引和工作目录中的文件列表不同步的状态中恢复。

如果您的设置中存在一些外部因素可以解除 Git 维护工作目录文件存在与稀疏模式之间一致性的责任,请将其设置为 true。例如,如果您有一个支持 Git 的虚拟文件系统,该系统具有强大的机制,可以根据访问模式保持工作目录和稀疏模式的最新状态。

无论此设置如何,除非启用了稀疏检出,否则 Git 不会检查存在但被跳过的文件,因此除非 core.sparseCheckouttrue,否则此配置选项不起作用。

splitIndex.maxPercentChange

当使用拆分索引功能时,此选项指定拆分索引可以包含的条目百分比,与拆分索引和共享索引中的条目总数相比。该值应介于 0 到 100 之间。如果该值为 0,则总是写入一个新的共享索引;如果该值为 100,则永远不会写入新的共享索引。默认情况下,该值为 20,因此如果拆分索引中的条目数大于条目总数的 20%,则会写入一个新的共享索引。请参阅 git-update-index[1]

splitIndex.sharedIndexExpire

当使用拆分索引功能时,自从此变量指定的时间以来未修改的共享索引文件将在创建新的共享索引文件时被删除。“now”值会立即过期所有条目,而“never”会完全禁止过期。默认值为“2.weeks.ago”。请注意,每次基于共享索引创建新的拆分索引文件或从中读取时,共享索引文件都被认为是已修改的(为了过期的目的)。请参阅 git-update-index[1]

ssh.variant

默认情况下,Git 根据配置的 SSH 命令的基本名称(使用环境变量 GIT_SSHGIT_SSH_COMMAND 或配置设置 core.sshCommand 进行配置)来确定要使用的命令行参数。如果基本名称无法识别,Git 将尝试通过首先使用 -G(打印配置)选项调用配置的 SSH 命令来检测 OpenSSH 选项的支持,随后将使用 OpenSSH 选项(如果成功)或除了主机和远程命令之外没有选项(如果失败)。

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

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

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

  • simple - [username@]host command

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

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

除了 simple 变体,随着 git 获得新功能,命令行参数很可能会更改。

stash.showIncludeUntracked

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

stash.showPatch

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

stash.showStat

如果设置为 true,则不带选项的 git stash show 命令将显示 stash 条目的 diffstat。默认为 true。请参阅 git-stash[1] 中 _show_ 命令的描述。

status.relativePaths

默认情况下,git-status[1] 显示相对于当前目录的路径。将此变量设置为 false 会显示相对于存储库根目录的路径(这是 Git v1.5.4 之前的默认行为)。

status.short

设置为 true 以默认在 git-status[1] 中启用 --short。选项 --no-short 优先于此变量。

status.branch

设置为 true 以默认在 git-status[1] 中启用 --branch。选项 --no-branch 优先于此变量。

status.aheadBehind

设置为 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 的子模块,摘要输出命令将被禁止。该规则的唯一例外是状态和提交将显示暂存的子模块更改。要同时查看已忽略子模块的摘要,可以使用 --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 不受支持。

  • 仅当启用 submodule.propagateBranches 时,才支持 branch

submodule.propagateBranches

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

submodule.fetchJobs

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

submodule.alternateLocation

指定在克隆子模块时,子模块如何获取备用对象。可能的值为 nosuperproject。默认情况下,假定为 no,这不会添加引用。当值设置为 superproject 时,要克隆的子模块将计算其备用对象位置,该位置相对于超级项目的备用对象。

submodule.alternateErrorStrategy

指定如何处理通过 submodule.alternateLocation 计算的子模块的备用对象错误。可能的值为 ignoreinfodie。默认值为 die。请注意,如果设置为 ignoreinfo,并且计算出的备用对象出现错误,则克隆将继续,就像未指定备用对象一样。

tag.forceSignAnnotated

一个布尔值,用于指定是否应对创建的带注释的标签进行 GPG 签名。如果在命令行上指定了 --annotate,则它优先于此选项。

tag.sort

此变量控制 git-tag[1] 显示标签时的排序方式。如果没有提供 "--sort=<value>" 选项,则将使用此变量的值作为默认值。

tag.gpgSign

一个布尔值,用于指定是否应对所有标签进行 GPG 签名。在自动化脚本中运行使用此选项会导致大量标签被签名。因此,使用代理来避免多次键入 gpg 密码短语是很方便的。请注意,此选项不会影响由 "-u <keyid>" 或 "--local-user=<keyid>" 选项启用的标签签名行为。

tar.umask

此变量可用于限制 tar 归档条目的权限位。默认值为 0002,它关闭了世界写入位。特殊值 "user" 指示将使用归档用户的 umask。请参阅 umask(2) 和 git-archive[1]

Trace2 配置设置仅从系统和全局配置文件中读取;存储库本地和工作树配置文件以及 -c 命令行参数不受尊重。

trace2.normalTarget

此变量控制正常目标目标。它可以被 GIT_TRACE2 环境变量覆盖。下表显示了可能的值。

trace2.perfTarget

此变量控制性能目标目标。它可以被 GIT_TRACE2_PERF 环境变量覆盖。下表显示了可能的值。

trace2.eventTarget

此变量控制事件目标目标。它可以被 GIT_TRACE2_EVENT 环境变量覆盖。下表显示了可能的值。

  • 0false - 禁用目标。

  • 1true - 写入 STDERR

  • [2-9] - 写入已打开的文件描述符。

  • <absolute-pathname> - 以追加模式写入文件。如果目标已存在且是一个目录,则跟踪将写入给定目录下的文件(每个进程一个文件)。

  • af_unix:[<socket-type>:]<absolute-pathname> - 写入 Unix 域套接字(在支持它们的平台上)。套接字类型可以是 streamdgram;如果省略,Git 将尝试两者。

trace2.normalBrief

布尔值。如果为 true,则从正常输出中省略 timefilenameline 字段。可以被 GIT_TRACE2_BRIEF 环境变量覆盖。默认为 false。

trace2.perfBrief

布尔值。如果为 true,则从 PERF 输出中省略 timefilenameline 字段。可以被 GIT_TRACE2_PERF_BRIEF 环境变量覆盖。默认为 false。

trace2.eventBrief

布尔值。如果为 true,则从事件输出中省略 timefilenameline 字段。可以被 GIT_TRACE2_EVENT_BRIEF 环境变量覆盖。默认为 false。

trace2.eventNesting

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

trace2.configParams

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

trace2.envVars

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

trace2.destinationDebug

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

trace2.maxFiles

整数。当将跟踪文件写入目标目录时,如果这样做将超过这么多文件,则不要写入其他跟踪。相反,写入一个 sentinel 文件,该文件将阻止进一步跟踪到该目录。默认为 0,这会禁用此检查。

trailer.separators

此选项告诉哪些字符被识别为尾部 (trailer) 分隔符。默认情况下,只有 : 被识别为尾部分隔符,但 = 始终在命令行上接受,以与其他 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> 的 trailer 时,将执行什么操作。

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

使用 add,将添加一个新的 trailer。

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

trailer.<keyAlias>.key

为 <key> 定义一个 <keyAlias>。 <keyAlias> 必须是 <key> 的一个前缀(大小写无关)。 例如,在 git config trailer.ack.key "Acked-by" 中,“Acked-by” 是 <key>,而 “ack” 是 <keyAlias>。 此配置允许在命令行中使用较短的 --trailer "ack:..." 调用,使用 “ack” <keyAlias> 代替较长的 --trailer "Acked-by:..."

在 <key> 的末尾,可以出现一个分隔符,然后是一些空格字符。 默认情况下,唯一有效的分隔符是:,但可以使用 trailer.separators 配置变量来更改此分隔符。

如果 key 中存在分隔符,则在添加 trailer 时,它将覆盖默认分隔符。

trailer.<keyAlias>.where

此选项接受与 trailer.where 配置变量相同的值,并且它会覆盖该选项为具有指定 <keyAlias> 的 trailer 指定的值。

trailer.<keyAlias>.ifexists

此选项接受与 trailer.ifexists 配置变量相同的值,并且它会覆盖该选项为具有指定 <keyAlias> 的 trailer 指定的值。

trailer.<keyAlias>.ifmissing

此选项接受与 trailer.ifmissing 配置变量相同的值,并且它会覆盖该选项为具有指定 <keyAlias> 的 trailer 指定的值。

trailer.<keyAlias>.command

已弃用,请改用 trailer.<keyAlias>.cmd。 此选项的行为与 trailer.<keyAlias>.cmd 相同,不同之处在于它不会将任何内容作为参数传递给指定的命令。 而是,子字符串 $ARG 的第一次出现将被 <value> 替换,该 <value> 将作为参数传递。

请注意,用户命令中的 $ARG 仅被替换一次,并且替换 $ARG 的原始方法是不安全的。

当同一个 <keyAlias> 同时给出 trailer.<keyAlias>.cmdtrailer.<keyAlias>.command 时,将使用 trailer.<keyAlias>.cmd,而忽略 trailer.<keyAlias>.command

trailer.<keyAlias>.cmd

此选项可用于指定一个 shell 命令,该命令将被调用一次以自动添加具有指定 <keyAlias> 的 trailer,然后每次指定 --trailer <keyAlias>=<value> 参数以修改此选项将生成的 trailer 的 <value> 时,都会再次调用该命令。

当首次调用指定的命令以添加具有指定 <keyAlias> 的 trailer 时,其行为就像在 "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:当 Git 解析具有明文凭据的 URL 时,它会将警告消息写入 stderr

  • die:当 Git 解析具有明文凭据的 URL 时,它会将失败消息写入 stderr

transfer.fsckObjects

当未设置 fetch.fsckObjectsreceive.fsckObjects 时,将改用此变量的值。 默认为 false。

设置后,如果存在格式错误的object或指向不存在的object的链接,则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"(将使用隔离)到另一个内部 repo,并让内部客户端使用这个推送到的存储库,或者禁止内部fetch,并且只有在运行完整的 "fsck" 之后(并且在此期间没有发生新的fetch)才允许它们。

transfer.hideRefs

字符串(s) 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(因此仅影响fetch,不影响push)。 尝试通过 git fetch 获取隐藏的引用将会失败。 另请参阅 uploadpack.allowTipSHA1InWant

uploadpack.allowTipSHA1InWant

uploadpack.hideRefs 生效时,允许 upload-pack 接受一个提取请求,该请求请求隐藏 ref 顶端的对象(默认情况下,此类请求会被拒绝)。另请参阅 uploadpack.hideRefs。即使此项设置为 false,客户端也可能通过 gitnamespaces[7] 手册页的“SECURITY”部分中描述的技术窃取对象;最好将私有数据保存在单独的仓库中。

uploadpack.allowReachableSHA1InWant

允许 upload-pack 接受一个提取请求,该请求请求从任何 ref 顶端可访问的对象。但是,请注意,计算对象可达性在计算上非常昂贵。默认为 false。即使此项设置为 false,客户端也可能通过 gitnamespaces[7] 手册页的“SECURITY”部分中描述的技术窃取对象;最好将私有数据保存在单独的仓库中。

uploadpack.allowAnySHA1InWant

允许 upload-pack 接受一个提取请求,该请求请求任何对象。它暗示了 uploadpack.allowTipSHA1InWantuploadpack.allowReachableSHA1InWant。如果设置为 true,它将启用两者;如果设置为 false,它将禁用两者。默认情况下未设置。

uploadpack.keepAlive

upload-pack 启动 pack-objects 时,在 pack-objects 准备 pack 文件时,可能会有一段静默期。通常它会输出进度信息,但如果提取使用了 --quietpack-objects 将不会输出任何内容,直到 pack 数据开始。某些客户端和网络可能会认为服务器挂起并放弃。设置此选项会指示 upload-pack 每隔 uploadpack.keepAlive 秒发送一个空的 keepalive 数据包。将此选项设置为 0 将完全禁用 keepalive 数据包。默认值为 5 秒。

uploadpack.packObjectsHook

如果设置了此选项,当 upload-pack 运行 git pack-objects 为客户端创建一个 pack 文件时,它将改为运行此 shell 命令。pack-objects 命令及其 将要 运行的参数(包括开头的 git pack-objects)会附加到 shell 命令中。hook 的 stdin 和 stdout 被视为 pack-objects 本身已运行。也就是说,upload-pack 将把预定用于 pack-objects 的输入提供给 hook,并期望在 stdout 上找到已完成的 pack 文件。

请注意,只有在受保护的配置中指定此配置变量时,它才会被尊重(请参阅 SCOPES)。这是一种安全措施,可以防止从不受信任的仓库中提取。

uploadpack.allowFilter

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

uploadpackfilter.allow

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

uploadpackfilter.<filter>.allow

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

uploadpackfilter.tree.maxDepth

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

uploadpack.allowRefInWant

如果设置了此选项,upload-pack 将支持协议版本 2 fetch 命令的 ref-in-want 功能。此功能旨在使负载均衡的服务器受益,由于复制延迟,这些服务器可能对其 refs 指向的 OID 具有不同的视图。

url.<base>.insteadOf

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

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

url.<base>.pushInsteadOf

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

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

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

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

user.useConfigOnly

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

user.signingKey

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

versionsort.prereleaseSuffix (deprecated)

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”意味着启用 extension.relativeWorktrees 配置(请参阅 git-config[1]),因此使其与旧版本的 Git 不兼容。

BUG

当使用已弃用的 [section.subsection] 语法时,如果子部分至少包含一个大写字符,更改一个值将导致添加一个多行键,而不是更改。例如,当配置看起来像

  [section.subsection]
    key = value1

并且运行 git config section.Subsection.key value2 将导致

  [section.subsection]
    key = value1
    key = value2

GIT

属于 git[1] 套件的一部分

scroll-to-top