简体中文 ▾ 主题 ▾ 最新版本 ▾ git-config 最后更新于 2.52.0

名称

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

概要

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

描述

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

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

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

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

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

此命令在出错时将以非零状态失败。一些退出码是

  • 部分或键无效(返回码=1),

  • 未提供部分或名称(返回码=2),

  • 配置文件无效(返回码=3),

  • 配置文件无法写入(返回码=4),

  • 您尝试取消设置一个不存在的选项(返回码=5),

  • 您尝试取消设置/设置一个有多个行匹配的选项(返回码=5),或

  • 您尝试使用无效的正则表达式(返回码=6)。

成功时,命令返回退出码 0。

可以使用 git help --config 命令获取所有可用配置变量的列表。

命令

list

列出配置文件中设置的所有变量及其值。

get

发出指定键的值。如果键在配置中出现多次,则发出最后一个值。如果指定了 --all,则发出与键关联的所有值。如果键不存在,则返回错误码 1。

set

设置一个或多个配置选项的值。默认情况下,此命令拒绝写入多值配置选项。传递 --all 将用新值替换所有多值配置选项,而 --value= 将替换所有值与给定模式匹配的配置选项。

unset

取消设置一个或多个配置选项的值。默认情况下,此命令拒绝取消设置多值键。传递 --all 将取消设置所有多值配置选项,而 --value 将取消设置所有值与给定模式匹配的配置选项。

rename-section

将给定部分重命名为新名称。

remove-section

从配置文件中删除给定部分。

edit

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

选项

--replace-all

默认行为是最多替换一行。此选项替换所有匹配键(以及可选的 --value=<pattern>)的行。

--append

在不更改任何现有值的情况下向选项添加新行。这等同于在 set 中提供 --value=^$

--comment <message>

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

如果 <message> 以一个或多个空格后跟“”开头,则按原样使用。如果以“”开头,则在其前面加上一个空格。否则,会在其前面加上字符串“ # ”(一个空格后跟一个哈希后跟一个空格)。然后将生成的字符串放在定义变量的值之后。<message> 不能包含换行符(不允许多行注释)。

--all

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

--regexp

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

--url=<URL>

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

--global

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

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

另请参阅 文件

--system

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

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

另请参阅 文件

--local

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

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

另请参阅 文件

--worktree

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

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

写入选项时:写入指定的配置文件,而不是仓库 .git/config 文件。

读取选项时:仅从指定的配置文件读取,而不是从所有可用文件中读取。

另请参阅 文件

--blob <blob>

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

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

使用 getsetunset 时,仅根据 <pattern> 进行匹配。除非提供了 --fixed-value,否则模式是扩展正则表达式。

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

--fixed-value

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

--type <type>

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

有效的 <type> 包括

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

  • int: 将值规范化为简单的十进制数字。可选的后缀 kmg 将导致输入时值乘以 1024、1048576 或 1073741824。

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

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

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

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

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

选择类型说明符的历史选项。优先使用 --type(见上文)。

--no-type

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

-z
--null

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

--name-only

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

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

使用 get 时,除值外还显示配置键。默认是 --no-show-names,除非给出 --url 且 <name> 中没有子部分。

--show-origin

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

--show-scope

类似于 --show-origin,因为它通过该值的范围(worktree、local、global、system、command)来增强所有查询配置选项的输出。

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

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

--includes
--no-includes

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

--default <value>

使用 get 时,如果找不到请求的变量,则表现得好像已为其分配了 <value>。

已弃用的模式

以下模式已弃用,建议使用子命令。建议迁移到新语法。

git config <name>

已替换为 git config get <name>

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

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

-l
--list

已替换为 git config list

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

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

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

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

--get-regexp <name-regexp>

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

--get-urlmatch <name> <URL>

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

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

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

--add <name> <value>

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

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

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

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

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

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

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

--remove-section <name>

已替换为 git config remove-section <name>

-e
--edit

已替换为 git config edit

配置

pager.config 仅在列出配置时生效,即使用 listget(可能返回多个结果)时。默认使用分页器。

文件

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

$(prefix)/etc/gitconfig

系统范围的配置文件。

$XDG_CONFIG_HOME/git/config
~/.gitconfig

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

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

$GIT_DIR/config

仓库特定的配置文件。

$GIT_DIR/config.worktree

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

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

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

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

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

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

作用域

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

system

$(prefix)/etc/gitconfig

global

$XDG_CONFIG_HOME/git/config

~/.gitconfig

local

$GIT_DIR/config

worktree

$GIT_DIR/config.worktree

command

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

-c 选项

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

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

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

受保护的配置

受保护的配置是指 systemglobalcommand 作用域。出于安全原因,某些选项仅在受保护配置中指定时才被尊重,否则将被忽略。

Git 将这些作用域视为由用户或受信任的管理员控制。这是因为控制这些作用域的攻击者可以在不使用 Git 的情况下造成严重损害,因此假定用户的环境能够保护这些作用域免受攻击。

环境变量

GIT_CONFIG_GLOBAL
GIT_CONFIG_SYSTEM

从给定的文件中获取配置,而不是从全局或系统级别的配置中获取。有关详细信息,请参阅 git[1]

GIT_CONFIG_NOSYSTEM

是否跳过从系统范围的 $(prefix)/etc/gitconfig 文件读取设置。有关详细信息,请参阅 git[1]

另请参阅 文件

GIT_CONFIG_COUNT
GIT_CONFIG_KEY_<n>
GIT_CONFIG_VALUE_<n>

如果 GIT_CONFIG_COUNT 设置为正数,则所有环境变量对 GIT_CONFIG_KEY_<n> 和 GIT_CONFIG_VALUE_<n>(最多为该数字)将被添加到进程的运行时配置中。配置对是零索引的。任何缺失的键或值都将被视为错误。空的 GIT_CONFIG_COUNT 被视为与 GIT_CONFIG_COUNT=0 相同,即不处理任何对。这些环境变量将覆盖配置文件中的值,但会被通过 git -c 传递的任何显式选项覆盖。

这对于您想要使用通用配置生成多个 git 命令但又无法依赖配置文件的情况很有用,例如在编写脚本时。

GIT_CONFIG

如果未向 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

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

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

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

要删除 renames 的条目,请执行

% git config unset diff.renames

如果你想删除一个多值变量(如上面的 core.gitproxy)的条目,你必须提供一个匹配确切一行值的正则表达式。

要查询给定键的值,请执行

% git config get core.filemode

或者,查询一个多值变量

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

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

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

如果你喜欢冒险,你可以通过以下方式将 **所有** core.gitproxy 替换为一个新的

% git config set --all core.gitproxy ssh

但是,如果你确实只想替换默认代理的行,即没有 "for …​" 后缀的那个,请执行如下操作

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

要实际只匹配带有感叹号的值,你必须

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

要添加一个新的代理,而不改变任何现有代理,请使用

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

一个示例,如何在你的脚本中使用配置中自定义的颜色

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

对于 https://weak.example.com 中的 URL,http.sslVerify 被设置为 false,而对于所有其他 URL,它被设置为 true

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

配置文件

Git 配置文件包含许多影响 Git 命令行为的变量。每个仓库中的 .git/config 文件以及可选的 config.worktree 文件(请参阅 git-worktree[1] 的 "CONFIGURATION FILE" 部分)用于存储该仓库的配置,而 $HOME/.gitconfig 用于存储每个用户的配置,作为 .git/config 文件的回退值。文件 /etc/gitconfig 可用于存储系统范围的默认配置。

配置变量由 Git 的底层命令和用户命令共同使用。变量被划分为不同的节,其中变量本身的完整限定名是最后一个点分隔的段,节名是最后一个点之前的所有内容。变量名不区分大小写,只允许使用字母数字字符和 -,并且必须以字母开头。有些变量可能出现多次;我们称此时该变量是多值的。

语法

语法非常灵活且容错性好。在此上下文中,空格字符,即空格(SP)和水平制表符(HT),大部分都被忽略。 #; 字符表示行尾注释。空行被忽略。

文件由节和变量组成。节以方括号中的节名开始,并一直持续到下一个节开始。节名不区分大小写。节名中只允许使用字母数字字符、-.。每个变量必须属于某个节,这意味着变量的第一个设置之前必须有一个节头。

节可以进一步划分为子节。要开始一个子节,请在节头中将子节名放在双引号内,并与节名用空格分隔,如下面的示例所示

	[section "subsection"]

子节名区分大小写,并且可以包含除了换行符和空字节之外的任何字符。双引号 " 和反斜杠可以通过转义为 \"\\ 来包含。读取时,反斜杠后面的其他字符将被删除;例如,\t 被读取为 t,而 \0 被读取为 0。节头不能跨越多行。变量可以直接属于一个节或一个给定的子节。如果你有 [section "subsection"],你也可以有 [section],但不是必须的。

还有一个已弃用的 [section.subsection] 语法。使用此语法,子节名将被转换为小写,并且区分大小写进行比较。这些子节名遵循与节名相同的限制。

所有其他行(以及节头之后的行的剩余部分)被识别为设置变量,形式为 name = value(或仅 name,这是表示该变量为布尔值 "true" 的简写)。变量名不区分大小写,只允许使用字母数字字符和 -,并且必须以字母开头。

围绕 name=value 的空格字符将被丢弃。value 中的内部空格字符将按原样保留。以 #; 开头并延伸到行尾的注释将被丢弃。可以通过以反斜杠 (\) 结尾来将定义值的行延续到下一行;反斜杠和行尾字符将被丢弃。

如果 value 需要包含前导或尾随空格字符,则必须将其用双引号 (") 括起来。在双引号内,双引号 (") 和反斜杠 (\) 字符必须进行转义:使用 \" 表示 ",使用 \\ 表示 \

除了 \"\\ 之外,还识别以下转义序列:\n 表示换行符(NL),\t 表示水平制表符(HT,TAB),\b 表示退格符(BS)。其他字符转义序列(包括八进制转义序列)无效。

包含

includeincludeIf 节允许你从其他来源包含配置指令。这些节彼此的行为完全相同,不同之处在于 includeIf 节在条件不求值为 true 时可能会被忽略;请参阅下面的 "条件包含"。

你可以通过设置特殊变量 include.path(或 includeIf.*.path)为要包含的文件名来包含另一个配置文件。该变量的值是一个路径名,并且会进行波浪号扩展。这些变量可以多次指定。

包含文件的内容将被立即插入,就好像它们位于 include 指令的位置一样。如果变量的值是相对路径,则该路径被视为相对于包含 include 指令的配置文件。请参阅下面的示例。

条件包含

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

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

gitdir

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

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

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

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

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

  • 如果模式既不以 ~/./ 也不以 / 开头,则会自动在前面加上 **/。例如,模式 foo/bar 变为 **/foo/bar,它将匹配 /any/path/to/foo/bar

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

gitdir/i

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

onbranch

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

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

hasconfig:remote.*.url

此关键字和冒号之后的数据被视为一个模式,包含标准的 globbing 通配符以及另外两个通配符 **//**,它们可以匹配多个组件。第一次看到此关键字时,将扫描其余的配置文件以查找远程 URL(不应用任何值)。如果存在至少一个匹配此模式的远程 URL,则满足包含条件。

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

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

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

关于通过 gitdirgitdir/i 进行匹配的更多说明

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

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

    这在 v2.13.0 中该功能的初始版本中并非如此,它只匹配真实路径版本。想要与该功能初始版本兼容的配置需要指定真实路径版本,或同时指定两个版本。

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

示例

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

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

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

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

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

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

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

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

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

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

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

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

布尔值

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

true

布尔值 true 的字面量是 yesontrue1。另外,没有 = <value> 定义的变量被视为 true。

false

布尔值 false 的字面量是 noofffalse0 和空字符串。

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

整数

许多指定各种大小的变量的值可以加上 kM 等后缀,以表示 "乘以 1024"、"乘以 1024x1024" 等。

颜色

接受颜色值的变量的值是颜色列表(最多两个,一个前景色和一个背景色)和属性(任意数量),用空格分隔。

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

normal 颜色不会改变颜色。它与空字符串相同,但在单独指定背景色时可以用作前景色(例如,"normal red")。

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

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

接受的属性有 bolddimulblinkreverseitalicstrike(用于划掉或 "删除线" 的字母)。任何属性相对于颜色的位置(之前、之后或之间)都不重要。特定的属性可以通过在前面加上 nono- 来关闭(例如,noreverseno-ul 等)。

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

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

对于 Git 预定义的颜色槽,属性旨在在彩色输出的每个项目的开头重置。因此,将 color.decorate.branch 设置为 black 将以纯 black 绘制该分支名,即使在同一输出行的前一个内容(例如,log --decorate 输出中的分支名称列表前的开括号)被设置为 bold 或其他属性。

路径名

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

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

如果以 ":(optional)" 作为前缀,那么如果命名的路径不存在,该配置变量将被视为不存在。

变量

请注意,此列表不详尽,也不一定完整。对于特定命令的变量,你可以在相应的手册页中找到更详细的描述。

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

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

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

advice.*

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

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

addEmbeddedRepo

当用户意外地在一个 Git 仓库中添加另一个 Git 仓库时显示。

addEmptyPathspec

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

addIgnoredFile

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

amWorkDir

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

ambiguousFetchRefspec

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

checkoutAmbiguousRemoteBranchName

git-checkout[1]git-switch[1] 的参数模糊地解析到多个远程的远程跟踪分支,而在某些情况下,一个明确的参数原本会引起远程跟踪分支被检出时显示。请参阅 checkout.defaultRemote 配置变量,了解如何在某些情况下设置默认使用的远程,此时会打印此建议。

commitBeforeMerge

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

detachedHead

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

diverging

当无法进行快进合并时显示。

fetchShowForcedUpdates

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

forceDeleteBranch

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

ignoredHook

当一个 hook 被忽略,因为它没有被设置为可执行文件时显示。

implicitIdentity

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

mergeConflict

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

nestedTag

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

pushAlreadyExists

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

pushFetchFirst

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

pushNeedsForce

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

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

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

rebaseTodoError

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

refSyntax

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

resetNoRefresh

git-reset[1] 花费超过 2 秒来刷新索引(在 reset 之后)时显示,用于告知用户可以使用 --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 别名是一个包含多个命令(例如在管道中)的“单行”脚本,引用多个参数,或者无法处理在末尾添加的位置参数,则应谨慎使用。例如:alias.cmd = "!echo $1 | grep $2" 调用方式为 git cmd 1 2 将执行为 *echo $1 | grep $2 1 2*,这并非您所期望的。

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

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

am.keepcr

如果为 true,git-am 将使用参数 --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 时,回退到 3 路合并(相当于从命令行提供 --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

指向存储库中的一个 tree,用于读取属性,而不是工作树中的 .gitattributes 文件。如果该值无法解析为有效的 tree 对象,则改用空 tree。当使用 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 输出的着色方案。它可以是 *repeatedLines*、*highlightRecent*,或者 *none*(默认值)。

blame.date

指定用于在 git-blame[1] 中输出日期的格式。如果未设置,则使用 iso 格式。支持的值请参阅 git-log[1]--date 选项的讨论。

blame.showEmail

git-blame[1] 中显示作者电子邮件而不是作者姓名。此选项默认为 false。

blame.showRoot

git-blame[1] 中不将根提交视为边界。此选项默认为 false。

blame.ignoreRevsFile

git-blame[1] 中忽略文件中列出的修订版本,每行一个未缩写的对象名称。空格和以 # 开头的注释将被忽略。此选项可以重复多次。空文件名将重置被忽略的修订版本列表。此选项将在命令行选项 --ignore-revs-file 之前处理。

blame.markUnblamableLines

git-blame[1] 的输出中,用 *星号* 标记由被忽略的、但我们无法归因于其他提交的修订版本更改的行。

blame.markIgnoredLines

git-blame[1] 的输出中,用 *问号* 标记由被忽略的、但我们归因于其他提交的修订版本更改的行。

branch.autoSetupMerge

告诉 git branchgit switchgit checkout 设置新分支,以便 git-pull[1] 可以适当地从起始点分支合并。请注意,即使未设置此选项,也可以通过 --track--no-track 选项为每个分支选择此行为。此选项默认为 true。有效设置为:

false

不执行自动设置

true

当起始点是远程跟踪分支时执行自动设置

always

当起始点是本地分支或远程跟踪分支时执行自动设置

inherit

如果起始点具有跟踪配置,则将其复制到新分支

simple

当起始点是远程跟踪分支且新分支与远程分支同名时执行自动设置。

branch.autoSetupRebase

当使用 git branchgit switchgit checkout 创建一个跟踪另一个分支的新分支时,此变量告诉 Git 设置 pull 以 rebase 而不是 merge(请参阅 branch.<name>.rebase)。有效设置为:

never

rebase 永远不会自动设置为 true。

local

rebase 设置为 true,用于其他本地分支的跟踪分支。

remote

rebase 设置为 true,用于远程跟踪分支的跟踪分支。

always

rebase 将设置为 true,用于所有跟踪分支。

请参阅 branch.autoSetupMerge 以了解如何设置分支以跟踪另一个分支的详细信息。此选项默认为 never

branch.sort

此变量控制 git-branch[1] 显示分支时的排序顺序。如果不提供 --sort=<value> 选项,则将使用此变量的值作为默认值。请参阅 git-for-each-ref[1] 字段名称以获取有效值。

branch.<name>.remote

当在分支 *<name>* 上时,它告诉 git fetchgit push 从哪个远程拉取或推送到哪个远程。要推送到哪个远程可以通过 remote.pushDefault(适用于所有分支)进行覆盖。要推送到哪个远程,对于当前分支,可以通过 branch.<name>.pushRemote 进一步覆盖。如果没有配置远程,或者您不在任何分支上且存储库中定义了多个远程,则默认情况下为 origin 用于获取,remote.pushDefault 用于推送。此外,.(一个点)是当前本地存储库(一个点存储库),请参阅 branch.<name>.merge 的最后注释。

branch.<name>.pushRemote

当在分支 *<name>* 上时,它会覆盖 branch.<name>.remote 进行推送。它还会覆盖 remote.pushDefault 以从分支 *<name>* 进行推送。当您从一个地方(例如您的上游)拉取并在另一个地方(例如您自己的发布存储库)推送时,您应该设置 remote.pushDefault 来指定所有分支的推送远程,并使用此选项来覆盖特定分支的设置。

branch.<name>.merge

branch.<name>.remote 一起,定义了给定分支的上游分支。它告诉 git fetch/git pull/git rebase 要合并哪个分支,并且也可能影响 git push(请参阅 push.default)。当在分支 *<name>* 上时,它告诉 git fetch 默认的 refspec 在 FETCH_HEAD 中标记用于合并。该值被处理为 refspec 的远程部分,并且必须匹配从 branch.<name>.remote 指定的远程获取的 ref。合并信息由 git pull(它首先调用 git fetch)用于查找默认的合并分支。没有此选项,git pull 默认合并第一个获取的 refspec。指定多个值以执行 octopus merge。如果您希望设置 git pull 以便它从本地存储库中的另一个分支合并到 *<name>*,您可以将 branch.<name>.merge 指向所需分支,并为 branch.<name>.remote 使用相对路径设置 .(一个点)。

branch.<name>.mergeOptions

设置合并到分支 *<name>* 的默认选项。语法和支持的选项与 git-merge[1] 的相同,但包含空格字符的选项值目前不受支持。

branch.<name>.rebase

如果为 true,则在运行 git pull 时,将分支 *<name>* 变基(rebase)到已获取的分支之上,而不是合并默认远程的默认分支。请参阅 pull.rebase 以在非分支特定方式下执行此操作。

当值为 merges(或仅 m)时,将 --rebase-merges 选项传递给 git rebase,以便将本地合并提交包含在变基中(有关详细信息,请参阅 git-rebase[1])。

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

注意:这是一个可能危险的操作;除非您了解其含义,否则请**不要**使用它(有关详细信息,请参阅 git-rebase[1])。

branch.<name>.description

分支描述,可以使用 git branch --edit-description 进行编辑。分支描述会自动添加到 format-patch 的封面信或 request-pull 摘要中。

browser.<tool>.cmd

指定用于调用指定浏览器的命令。指定的命令将在 shell 中进行评估,URL 将作为参数传递。(请参阅 git-web--browse[1]。)

browser.<tool>.path

覆盖用于浏览 HTML 帮助(请参阅 git-help[1] 中的 -w 选项)或 gitweb 中的工作存储库(请参阅 git-instaweb[1])的工具路径。

bundle.*

bundle.* 键可能出现在通过 git clone --bundle-uri 选项找到的 bundle 列表文件中。这些键目前在存储库配置文件中无效,但未来可能会更改。有关更多详细信息,请参阅 bundle URI 设计文档

bundle.version

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

bundle.mode

此字符串值应为 allany。此值描述了 unbundle 完整信息是否需要所有声明的 bundle(all),还是列出的任何一个 bundle URI 都足够(any)。

bundle.heuristic

如果此字符串值键存在,则 bundle 列表旨在与增量 git fetch 命令配合使用。此启发式方法表明每个 bundle 都有额外的键,这些键有助于确定客户端应下载哪些 bundle 子集。目前唯一理解的值是 creationToken

bundle.<id>.*

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

bundle.<id>.uri

此字符串值定义了 Git 可以通过该 URI 访问此 *<id>* 内容。此 URI 可以是 bundle 文件或其他 bundle 列表。

checkout.defaultRemote

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

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

checkout.guess

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

checkout.workers

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

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

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

clean.requireForce

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

clone.defaultRemoteName

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

clone.rejectShallow

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

clone.filterSubmodules

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

color.advice

一个布尔值,用于启用/禁用提示(例如,当 push 失败时,参见 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(本地分支)、remoterefs/remotes/ 中的远程跟踪分支)、upstream(上游跟踪分支)、plain(其他引用)。

color.diff

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

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

color.diff.<slot>

使用自定义颜色进行 diff 着色。 <slot> 指定要使用指定颜色的补丁部分,可以是以下之一:context(上下文文本 - plain 是一个历史同义词)、meta(元信息)、frag(块头)、func(块头中的函数)、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(分别用于本地分支、远程跟踪分支、标签、stash 和 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

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

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

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

color.push.error

当 push 错误时使用自定义颜色。

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>

使用自定义颜色进行 status 着色。 <slot> 是以下之一:header(status 消息的标题文本)、addedupdated(已添加但未提交的文件)、changed(已更改但未添加到索引的文件)、untracked(未被 Git 跟踪的文件)、branch(当前分支)、nobranch(显示 no branch 警告的颜色,默认为红色)、localBranchremoteBranch(在 status 简短格式中显示分支和跟踪信息时的本地和远程分支名称,分别是)、或 unmerged(具有未合并更改的文件)。

color.transport

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

color.transport.rejected

当 push 被拒绝时使用自定义颜色。

color.ui

此变量确定 color.diffcolor.grep 等控制每个命令族颜色使用的变量的默认值。随着越来越多的命令支持配置来设置 --color 选项的默认值,其范围将会扩大。如果希望 Git 命令除非通过其他配置或 --color 选项明确启用,否则不使用颜色,请将其设置为 falsenever。如果您希望所有不用于机器消费的输出都使用颜色,请将其设置为 always。如果您希望此类输出在写入终端时使用颜色,请将其设置为 trueauto(自 Git 1.8.4 起为默认值)。

column.ui

指定支持的命令是否应以列的形式输出。此变量包含由空格或逗号分隔的标记列表。

这些选项控制何时启用该功能(默认为 never)。

always

始终以列形式显示。

never

从不以列形式显示。

auto

如果输出到终端,则以列形式显示。

这些选项控制布局(默认为 column)。设置其中任何一个都意味着 always,如果未指定 alwaysneverauto 中的任何一个。

column

先填充列再填充行。

row

先填充行再填充列。

plain

以单列显示。

最后,这些选项可以与布局选项结合使用(默认为 nodense)。

dense

使不等宽的列利用更多空间。

nodense

使等宽的列。

column.branch

指定是否在 git branch 中以列形式输出分支列表。参见 column.ui 以获取详细信息。

column.clean

指定在列出 git clean -i 中的项目时使用的布局,它始终以列形式显示文件和目录。参见 column.ui 以获取详细信息。

column.status

指定是否在 git status 中以列形式输出未跟踪的文件。参见 column.ui 以获取详细信息。

column.tag

指定是否在 git tag 中以列形式输出标签列表。参见 column.ui 以获取详细信息。

commit.cleanup

此设置会覆盖 git commit 命令中 --cleanup 选项的默认值。有关详细信息,请参阅 git-commit[1]。更改默认值在您总是希望在日志消息中保留以注释字符(core.commentChar,默认为 #)开头的行时很有用,在这种情况下,您可以执行 git config commit.cleanup whitespace(请注意,如果您这样做,您需要自己删除提交日志模板中以注释字符开头的帮助行)。

commit.gpgSign

一个布尔值,用于指定是否应为所有提交进行 GPG 签名。在执行 rebase 等操作时使用此选项可能会导致大量提交被签名。使用代理程序可以避免多次输入 GPG 密码。

commit.status

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

commit.template

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

commit.verbose

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

commitGraph.generationVersion

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

commitGraph.maxNewFilters

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

commitGraph.changedPaths

如果为 true,则 git commit-graph write 将默认计算并写入更改路径 Bloom 过滤器,相当于传递 --changed-paths。如果为 false 或未设置,则仅当过滤器已存在于当前 commit-graph 文件中时,在 git commit-graph write 期间才会写入更改路径 Bloom 过滤器。这匹配 git commit-graph write 在没有任何 --[no-]changed-paths 选项时的默认行为。要重写没有过滤器的 commit-graph 文件,请使用 --no-changed-paths 选项。命令行选项 --[no-]changed-paths 始终优先于此配置。默认为未设置。

commitGraph.readChangedPaths

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

commitGraph.changedPathsVersion

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

默认为 -1。

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

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

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

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

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

completion.commands

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

core.fileMode

告诉 Git 是否要考虑工作树中文件的可执行位。

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

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

默认为 true(当 config 文件中未指定 core.filemode 时)。

core.hideDotFiles

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

core.ignoreCase

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

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

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

core.precomposeUnicode

此选项仅由 Mac OS 的 Git 实现使用。当 core.precomposeUnicode=true 时,Git 会撤消 Mac OS 对文件名执行的 Unicode 分解。这在 Mac OS 和 Linux 或 Windows 之间共享存储库时很有用。(需要 Git for Windows 1.7.10 或更高版本,或 Cygwin 1.7 下的 Git)。当为 false 时,文件名由 Git 完全透明处理,这与旧版本 Git 向后兼容。

core.protectHFS

如果设置为 true,则不允许签出在 HFS+ 文件系统上将被视为等同于 .git 的路径。在 Mac OS 上默认为 true,在其他地方默认为 false

core.protectNTFS

如果设置为 true,则不允许签出可能导致 NTFS 文件系统出现问题(例如,与 8.3 “短”名称冲突)的路径。在 Windows 上默认为 true,在其他地方默认为 false

core.fsmonitor

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

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

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

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

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

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

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

core.fsmonitorHookVersion

设置调用“fsmonitor”hook 时使用的协议版本。

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

core.trustctime

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

core.splitIndex

如果为真,将使用索引的 split-index 特性。请参阅 git-update-index[1]。默认为假。

core.untrackedCache

确定如何处理索引的未跟踪缓存功能。如果此变量未设置或设置为 keep,则将保留它。如果设置为 true,它将自动添加。如果设置为 false,它将自动删除。在将其设置为 true 之前,您应该检查 mtime 在您的系统上是否正常工作。请参阅 git-update-index[1]。默认值为 keep,除非启用了 feature.manyFiles,在这种情况下,此设置默认为 true

core.checkStat

当缺失或设置为 default 时,将检查 stat 结构中的许多字段,以检测文件自 Git 查看它以来是否已被修改。当此配置变量设置为 minimal 时,mtime 和 ctime 的亚秒部分、文件的所有者的 uid 和 gid、inode 编号(以及 Git 编译时使用它的设备编号),将从这些字段的检查中排除,只留下 mtime(以及 ctime,如果 core.trustCtime 设置了)的整数秒部分和文件大小供检查。

Git 有一些实现(例如 JGit)不会在某些字段中留下可用的值;通过从比较中排除这些字段,minimal 模式可以在同一存储库被这些其他系统同时使用时,有助于互操作性。

core.quotePath

输出路径的命令(例如 ls-filesdiff)将通过将路径名括在双引号中并像 C 转义控制字符一样用反斜杠转义这些字符(例如,\t 表示 TAB,\n 表示 LF,\\ 表示反斜杠)或值大于 0x80 的字节(例如,UTF-8 中的“微”的八进制 \302\265)来引用路径名中的“不寻常”字符。如果此变量设置为 false,则大于 0x80 的字节不再被视为“不寻常”。双引号、反斜杠和控制字符始终被转义,无论此变量的设置如何。简单的空格字符不被视为“不寻常”。许多命令可以使用 -z 选项完全按原样输出路径名。默认值为 true。

core.eol

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

core.safecrlf

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

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

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

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

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

core.autocrlf

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

core.checkRoundtripEncoding

如果 working-tree-encoding 属性(请参阅 gitattributes[5])使用这些编码,Git 将对其进行 UTF-8 往返检查。该变量是一个由逗号和/或空格分隔的编码列表。默认值为 SHIFT-JIS

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

默认值为 true,除非 git-clone[1]git-init[1] 在创建存储库时根据需要探测并设置 core.symlinks 为 false。

core.gitProxy

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

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

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

core.sshCommand

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

core.ignoreStat

如果为 true,Git 将通过为已更新相同内容(在索引和工作树中)的跟踪文件设置“assume-unchanged”位,来避免使用 lstat() 调用来检测文件是否已更改。

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

这对于 lstat() 调用非常慢的系统(如 CIFS/Microsoft Windows)很有用。

默认为假。

core.preferSymlinkRefs

代替默认的 HEAD 和其他符号引用文件的“symref”格式,使用符号链接。这有时对于与期望 HEAD 是符号链接的旧脚本一起工作是必需的。

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

core.alternateRefsCommand

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

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

core.alternateRefsPrefixes

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

core.bare

如果为 true,则假定此存储库是裸存储库,并且没有关联的工作目录。如果是这种情况,一些需要工作目录的命令将被禁用,例如 git-add[1]git-merge[1]

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

core.worktree

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

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

core.logAllRefUpdates

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

这些信息可用于确定“2 天前”一个分支的提示提交是什么。

在具有关联工作目录的存储库中,此值默认为 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]。默认为假。

core.warnAmbiguousRefs

如果为 true,Git 将在您传递的 ref 名称含糊不清且可能匹配存储库中的多个 ref 时警告您。默认为 true。

core.compression

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

core.looseCompression

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

core.packedGitWindowSize

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

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

支持常用的单位后缀 kmg

core.packedGitLimit

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

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

支持常用的单位后缀 kmg

core.deltaBaseCacheLimit

每个线程为缓存可能被多个增量对象引用的基础对象保留的最大字节数。通过将整个已解压的基础对象存储在缓存中,Git 可以避免多次解压和解压常用基础对象。

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

支持常用的单位后缀 kmg

core.bigFileThreshold

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

大于配置限制的文件将被

  • 在 packfile 中进行压缩存储,而不尝试增量压缩。

    默认限制主要考虑了这种用例。有了它,大多数项目的源代码和其他文本文件将被进行增量压缩,但较大的二进制媒体文件则不会。

    不进行增量压缩地存储大文件可避免过多的内存使用,但会略微增加磁盘使用量。

  • 将被视为已标记为“二进制”(请参阅 gitattributes[5])。例如,git-log[1]git-diff[1] 将不会为大于此限制的文件计算 diff。

  • 通常会在写入时进行流式处理,从而避免过多的内存使用,但会产生一些固定的开销。使用此功能的命令包括 git-archive[1]git-fast-import[1]git-index-pack[1]git-unpack-objects[1]git-fsck[1]

core.excludesFile

指定包含模式的文件路径,这些模式用于描述除了 .gitignore(按目录)和 .git/info/exclude 之外不应被跟踪的路径。默认值为 $XDG_CONFIG_HOME/git/ignore。如果 $XDG_CONFIG_HOME 未设置或为空,则使用 $HOME/.config/git/ignore。请参阅 gitignore[5]

core.askPass

可以通过此变量的值指定一个外部程序来与用户交互式地询问密码(例如,svn 和 http 接口)。可以被 GIT_ASKPASS 环境变量覆盖。如果未设置,则回退到 SSH_ASKPASS 环境变量的值,或者如果没有,则使用简单的密码提示。外部程序应将适当的提示作为命令行参数,并将其密码写入其 STDOUT。

core.attributesFile

除了 .gitattributes(按目录)和 .git/info/attributes 之外,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.hooksPath 设置为 /dev/null 来完全禁用所有钩子。这通常只建议给专家用户,并且是逐命令进行的,使用 git -c core.hooksPath=/dev/null ... 形式的配置参数。

core.editor

committag 这样会通过启动编辑器来编辑消息的命令,在设置了此变量并且 GIT_EDITOR 环境变量未设置时,将使用此变量的值。请参阅 git-var[1]

core.commentChar
core.commentString

committag 这样会启动编辑器来编辑消息的命令,会将以该字符开头的行视为注释,并在编辑器返回后删除它们(默认为 #)。

如果设置为“auto”,git-commit 将选择一个不是现有提交消息中任何行开头字符的字符。此值的支持已弃用,并且将在 Git 3.0 中删除,原因如下:

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

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

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

  • 它不被 git notes 尊重

请注意,这两个变量是彼此的别名,在现代 Git 版本中,您可以使用字符串(例如 //⁑⁕⁑)与 commentChar。版本早于 v2.45.0 的 Git 将忽略 commentString,但会拒绝 commentChar 的值,该值包含多于一个 ASCII 字节。如果您计划将配置用于旧版本和新版本的 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 清空 fsynced 组件集。

  • 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 一样被设为持久化。此模式在 macOS 上存储在 HFS+ 或 APFS 文件系统上的仓库以及 Windows 上存储在 NTFS 或 ReFS 文件系统上的仓库上,预计与 fsync 一样安全。

core.fsyncObjectFiles

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

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

core.preloadIndex

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

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

core.unsetenvvars

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

core.createObject

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

在某些文件系统/操作系统组合上,这不可靠。在此类情况下,请将此配置设置设置为 rename;但是,这将删除确保现有对象文件不会被覆盖的检查。

core.notesRef

显示提交消息时,还会显示存储在给定 ref 中的 notes。ref 必须是完全限定的。如果给定的 ref 不存在,则不是错误,而是表示不应打印 notes。

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

core.commitGraph

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

core.useReplaceRefs

如果设置为 false,则行为如同在命令行上给出了 --no-replace-objects 选项。有关更多信息,请参阅 git[1]git-replace[1]

core.multiPackIndex

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

core.sparseCheckout

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

core.sparseCheckoutCone

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

core.abbrev

设置对象名称缩短的长度。如果未指定或设置为 "auto",则会根据仓库中打包对象的近似数量计算出合适的值,这有望使缩短的对象名称在一段时间内保持唯一。如果设置为 "no",则不进行缩短,对象名称将显示其完整长度。最小长度为 4。

core.maxTreeDepth

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

credential.helper

指定一个外部帮助程序,当需要用户名或密码凭据时将调用该帮助程序;该帮助程序可以咨询外部存储以避免提示用户输入凭据。这通常是凭据帮助程序的名称,可能带有参数,但也可以是带参数的绝对路径,或者,如果前面加上 !,则为 shell 命令。

请注意,可以定义多个帮助程序。有关详细信息和示例,请参阅 gitcredentials[7]

credential.interactive

默认情况下,Git 和任何已配置的凭据帮助程序在需要新凭据时都会要求用户输入。其中许多帮助程序可以基于存储的凭据成功,前提是这些凭据仍然有效。为避免 Git 的用户交互可能性,请将 credential.interactive=false。某些凭据帮助程序也尊重此选项。

credential.useHttpPath

在获取凭据时,将 http 或 https URL 的 "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 比较工作树文件时,不要将仅统计信息(stat-only)的更改视为已更改。而是静默运行 git update-index --refresh 来更新工作树中内容与索引中内容匹配的路径的缓存统计信息。此选项默认为 true。请注意,这仅影响 git diff 的 Porcelain 命令,而不影响 git diff-files 等低级 diff 命令。

diff.dirstat

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

changes

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

lines

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

files

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

cumulative

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

<limit>

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

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

diff.statNameWidth

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

diff.statGraphWidth

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

diff.context

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

diff.interHunkContext

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

diff.external

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

diff.trustExitCode

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

diff.ignoreSubmodules

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

diff.mnemonicPrefix

如果设置,git diff 会根据比较的内容使用一对与标准的 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

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

diff.renameLimit

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

diff.renames

Git 是否以及如何检测重命名。如果设置为 false,则禁用重命名检测。如果设置为 true,则启用基本重命名检测。如果设置为 copiescopy,Git 也会检测复制。默认为 true。请注意,这仅影响 git diff 的 Porcelain 命令,如 git-diff[1]git-log[1],而不影响 git-diff-files[1] 等低级命令。

diff.suppressBlankEmpty

一个布尔值,用于抑制在每个空输出行前打印空格的标准行为。默认为 false

diff.submodule

指定显示子模块中差异的格式。 short 格式仅显示范围开始和结束时的提交名称。 log 格式列出范围内的提交,就像 git-submodule[1] summary 所做的那样。 diff 格式显示子模块更改内容的内联 diff。默认为 short

diff.wordRegex

一个 POSIX 扩展正则表达式,用于确定在执行逐词(word-by-word)差异计算时什么是一个 "word"。匹配正则表达式的字符序列是 "words",所有其他字符都是**可忽略的**空格。

diff.<driver>.command

自定义 diff driver 命令。有关详细信息,请参阅 gitattributes[5]

diff.<driver>.trustExitCode

如果此布尔值设置为 true,则 diff.<driver>.command 命令应返回退出代码 0(如果认为输入文件相等)或 1(如果认为它们不同),类似于 diff(1)。如果设置为 false(这是默认值),则命令应返回退出代码 0,而不管相等性。任何其他退出代码都会导致 Git 报告致命错误。

diff.<driver>.xfuncname

diff driver 应使用此正则表达式来识别 hunk 头部。也可以使用内置模式。有关详细信息,请参阅 gitattributes[5]

diff.<driver>.binary

将此选项设置为 true 使 diff driver 将文件视为二进制文件。有关详细信息,请参阅 gitattributes[5]

diff.<driver>.textconv

diff driver 应调用此命令来生成文件的文本转换版本。转换结果用于生成人类可读的 diff。有关详细信息,请参阅 gitattributes[5]

diff.<driver>.wordRegex

diff driver 应使用此正则表达式来分割行中的单词。有关详细信息,请参阅 gitattributes[5]

diff.<driver>.cachetextconv

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

diff.indentHeuristic

将此选项设置为 false 以禁用默认的启发式方法,这些方法会移动 diff hunk 的边界以使补丁更易于阅读。

diff.algorithm

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

default
myers

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

minimal

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

patience

生成补丁时使用“patience diff”算法。

histogram

此算法扩展了 patience 算法以“支持低出现率的常见元素”。

diff.wsErrorHighlight

在 diff 的 contextoldnew 行中高亮显示空格错误。多个值用逗号分隔,none 重置先前的值,default 将列表重置为 new,而 allold,new,context 的简写。空格错误将使用 color.diff.whitespace 着色。命令行选项 --ws-error-highlight=<kind> 会覆盖此设置。

diff.colorMoved

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

diff.colorMovedWS

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

diff.tool

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

diff.guitool

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

  • araxis

  • bc

  • codecompare

  • deltawalker

  • diffmerge

  • diffuse

  • ecmerge

  • emerge

  • examdiff

  • guiffy

  • gvimdiff

  • kdiff3

  • kompare

  • meld

  • nvimdiff

  • opendiff

  • p4merge

  • smerge

  • tkdiff

  • vimdiff

  • vscode

  • winmerge

  • xxdiff

difftool.<tool>.cmd

指定调用指定 diff 工具的命令。指定的命令将在 shell 中进行评估,并提供以下变量:LOCAL 设置为包含 diff 预览文件内容的临时文件的名称,REMOTE 设置为包含 diff 后续文件内容的临时文件的名称。

有关更多详细信息,请参阅 git-difftool[1] 中的 --tool=<tool> 选项。

difftool.<tool>.path

覆盖给定工具的路径。如果您的工具不在 PATH 中,则此项非常有用。

difftool.trustExitCode

如果调用的 diff 工具返回非零退出状态,则退出 difftool。

有关更多详细信息,请参阅 git-difftool[1] 中的 --trust-exit-code 选项。

difftool.prompt

在每次调用 diff 工具之前进行提示。

difftool.guiDefault

设置为 true 以默认使用 diff.guitool(相当于指定 --gui 参数),或设置为 auto 以根据 DISPLAY 环境变量的值是否存在来选择 diff.guitooldiff.tool。默认值为 false,此时必须显式提供 --gui 参数才能使用 diff.guitool

extensions.*

除非另有说明,否则如果 core.repositoryFormatVersion 不是 1,则指定扩展名是错误的。请参阅 gitrepository-layout[5]

compatObjectFormat

指定要使用的兼容性哈希算法。可接受的值为 sha1sha256。指定的值必须与 extensions.objectFormat 的值不同。这允许 Git 仓库之间的客户端级别互操作性,这些仓库的 objectFormat 与 compatObjectFormat 匹配。特别是,当完全实现时,可以将来自 objectFormat 与 compatObjectFormat 匹配的仓库的推送和拉取。以及能够使用 encoded in compatObjectFormat 的 oids,以及 encoded with objectFormat 的 oids 来本地指定对象。

请注意,此扩展支持的功能不完整,并且可能会发生变化。目前仅用于允许底层功能的开发和测试,不适用于最终用户。

noop

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

出于历史原因,此扩展会尊重(不受 core.repositoryFormatVersion 设置的影响)。

noop-v1

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

objectFormat

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

请注意,此设置只能由 git-init[1]git-clone[1] 设置。尝试在初始化后更改它将不起作用,并可能导致难以诊断的问题。

partialClone

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

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

出于历史原因,此扩展会尊重(不受 core.repositoryFormatVersion 设置的影响)。

preciousObjects

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

出于历史原因,此扩展会尊重(不受 core.repositoryFormatVersion 设置的影响)。

refStorage

指定要使用的 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。存储来自 fast-import 的 pack 可以加快导入操作的完成速度,尤其是在慢速文件系统上。如果未设置,则使用 transfer.unpackLimit 的值。

feature.*

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

feature.experimental

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

  • fetch.negotiationAlgorithm=skipping 通过一次跳过更多提交来提高 fetch 协商时间,减少往返次数。

  • pack.useBitmapBoundaryTraversal=true 通过遍历更少的对象来提高位图遍历时间。

  • pack.allowPackReuse=multi 通过重用多个 pack 中的对象而不是仅一个 pack 来提高创建 pack 的时间。

  • pack.usePathWalk 可以加速 packfile 的创建,并在文件名与 Git 的默认名称哈希发生特定冲突时显著减小 packfile 的大小。

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

feature.manyFiles

启用针对工作目录中具有许多文件的仓库进行优化的配置选项。当文件很多时,像 git statusgit checkout 这样的命令可能会很慢,而这些新默认值可以提高性能。

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

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

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

fetch.recurseSubmodules

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

fetch.fsckObjects

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

fetch.fsck.<msg-id>

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

fetch.fsck.skipList

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

fetch.unpackLimit

如果通过 Git 原生传输获取的对象数量低于此限制,则对象将被解压为松散的对象文件。但是,如果接收到的对象数量等于或超过此限制,则接收到的 pack 将存储为 pack,在添加任何缺失的 delta 基之后。存储来自推送的 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 以保持与上游 ref 的 1:1 映射。另请参阅 remote.<name>.pruneTagsgit-fetch[1] 的 PRUNING 部分。

fetch.all

如果为 true,则 fetch 将尝试更新所有可用的远程。此行为可以通过传递 --no-all 或显式指定一个或多个要 fetch 的远程来覆盖。默认为 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 命令从远程下载 packfile 后写入 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 选项的行为。git clone --bundle-uri 会设置 fetch.bundleURI 值,前提是提供的 bundle URI 包含一个为增量 fetch 组织的 bundle 列表。

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

fetch.bundleCreationToken

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

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

filter.<driver>.clean

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

filter.<driver>.smudge

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

format.attach

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

format.from

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

format.forceInBodyFrom

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

format.numbered

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

format.headers

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

format.to
format.cc

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

format.subjectPrefix

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

format.coverFromDescription

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

format.signature

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

format.signatureFile

与 format.signature 的作用相同,但将此变量指定的文件内容用作签名。

format.suffix

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

format.encodeEmailHeaders

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

format.pretty

log/show/whatchanged 命令的默认 pretty 格式。请参阅 git-log[1]git-show[1]git-whatchanged[1]

format.thread

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

format.signOff

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

format.coverLetter

一个布尔值,控制当调用 format-patch 时是否生成封面信,但也可以设置为 "auto",仅在有多个补丁时生成封面信。默认值为 false。

format.outputDirectory

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

format.filenameMaxLength

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

format.useAutoBase

一个布尔值,允许您默认启用 format-patch 的 --base=auto 选项。也可以设置为 "whenAble",以允许在有合适的基础可用时启用 --base=auto,但否则会跳过添加基础信息而不使 format 失败。

format.notes

为 format-patch 的 --notes 选项提供默认值。接受布尔值,或一个指定 notes 来源的 ref。如果为 false,format-patch 默认为 --no-notes。如果为 true,format-patch 默认为 --notes。如果设置为非布尔值,format-patch 默认为 --notes=<ref>,其中 ref 是非布尔值。默认为 false。

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

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

例如,

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

将只显示来自 refs/notes/bar 的 notes。

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 时,所有大于此限制的非垃圾包都会被保留。这与 --keep-largest-pack 非常相似,不同之处在于所有满足阈值的非垃圾包都会被保留,而不仅仅是最大的那个包。默认为零。支持 kmg 等通用单位后缀。

请注意,如果保留的包数量超过 gc.autoPackLimit,则忽略此配置变量,除基础包外的所有包都将重新打包。之后,包的数量应该会低于 gc.autoPackLimit,并且 gc.bigPackThreshold 应该会再次得到尊重。

如果 git repack 顺利运行所需的估计内存量不可用且 gc.bigPackThreshold 未设置,则最大的包也将被排除(这相当于运行 git gc 并带上 --keep-largest-pack)。

gc.writeCommitGraph

如果为 true,则 gc 在运行 git-gc[1] 时会重写 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 pack 中(请参阅 git-repack[1]),而不是作为松散对象。默认值为 true

gc.maxCruftSize

在重新打包时限制新 cruft pack 的大小。当与 --max-cruft-size 一起指定时,命令行选项具有优先权。请参阅 git-repack[1]--max-cruft-size 选项。

gc.pruneExpire

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

gc.worktreePruneExpire

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

gc.reflogExpire
gc.<pattern>.reflogExpire

git reflog expire 会删除比此时间旧的 reflog 条目;默认值为 90 天。值为 "now" 会立即删除所有条目,值为 "never" 会完全抑制删除。中间带有 "<pattern>"(例如 "refs/stash")的设置仅适用于匹配 <pattern> 的引用。

gc.reflogExpireUnreachable
gc.<pattern>.reflogExpireUnreachable

git reflog expire 会删除比此时间旧且无法从当前尖端到达的 reflog 条目;默认值为 30 天。值为 "now" 会立即删除所有条目,值为 "never" 会完全抑制删除。中间带有 "<pattern>"(例如 "refs/stash")的设置仅适用于匹配 <pattern> 的引用。

这些类型的条目通常是在使用 git commit --amendgit rebase 后生成的,并且是发生在 amend 或 rebase 之前的提交。由于这些更改不是当前项目的一部分,大多数用户会希望更早地删除它们,这就是为什么默认值比 gc.reflogExpire 更积极的原因。

gc.recentObjectsHook

在考虑是否删除对象时(无论是生成 cruft pack 还是将无法访问的对象存储为松散对象),使用 shell 执行指定的命令。将其输出解释为 Git 将视为 "recent" 的对象 ID,而忽略它们的实际年龄。通过将它们的 mtimes 视为 "now",输出中提到的任何对象(及其后代)都将被保留,而不管其真实年龄。

输出必须每行包含一个十六进制对象 ID,并且仅此而已。仓库中找不到的对象将被忽略。支持多个 hook,但所有 hook 都必须成功退出,否则操作(生成 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>.<varname>(其中 access_method 是 "ext" 和 "pserver" 之一),以便仅适用于给定的访问方法。

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

有关描述,请参阅 gitweb[1]

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

有关描述,请参阅 gitweb.conf[5]

gpg.program

用于替代 "gpg" 来创建或验证 PGP 签名时使用的程序路径。该程序必须支持与 GPG 相同的命令行接口,即,要验证一个分离的签名,将运行 "gpg --verify $signature - <$file",并且程序应通过退出代码 0 来表示签名有效。要生成一个 ASCII 编码的分离签名,将用要签名的内容填充 "gpg -bsau $key" 的标准输入,并且程序应将结果发送到其标准输出。

gpg.format

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

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

gpg.<format>.program

使用此选项来自定义为所选签名格式使用的程序(请参阅 gpg.programgpg.format)。gpg.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 公钥的文件。该文件由多行组成,每行开头是 principal,后跟一个 SSH 公钥。例如:user1@example.com,user2@example.com ssh-rsa AAAAX1... 有关详细信息,请参阅 ssh-keygen(1) 的 "ALLOWED SIGNERS"。principal 仅用于标识密钥,并在验证签名时可用。

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 或已撤销公钥列表(不带 principal 前缀)。有关详细信息,请参阅 ssh-keygen(1)。如果在此文件中找到公钥,则该公钥将始终被视为信任级别为 "never",签名将显示为无效。

grep.lineNumber

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

grep.column

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

grep.patternType

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

grep.extendedRegexp

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

grep.threads

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

grep.fullName

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

grep.fallbackToNoIndex

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

gui.commitMsgWidth

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

gui.diffContext

指定 git-gui[1] 调用 diff 时使用的上下文行数。默认为 "5"。

gui.displayUntracked

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

gui.encoding

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

gui.matchTrackingBranch

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

gui.newBranchTemplate

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

gui.pruneDuringFetch

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

gui.trustmtime

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

gui.spellingDictionary

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

gui.fastCopyBlame

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

gui.copyBlameThreshold

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

gui.blamehistoryctx

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

guitool.<name>.cmd

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

guitool.<name>.needsFile

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

guitool.<name>.noConsole

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

guitool.<name>.noRescan

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

guitool.<name>.confirm

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

guitool.<name>.argPrompt

请求用户输入字符串参数,并通过 ARGS 环境变量传递给工具。由于请求参数意味着确认,如果启用了此选项,则 confirm 选项无效。如果选项设置为 trueyes1,则对话框使用内置的通用提示;否则,将使用变量的精确值。

guitool.<name>.revPrompt

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

guitool.<name>.revUnmerged

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

guitool.<name>.title

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

guitool.<name>.prompt

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

help.browser

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

help.format

覆盖 git-help[1] 使用的默认帮助格式。支持 maninfowebhtml 值。man 是默认值。webhtml 是相同的。

help.autoCorrect

如果 Git 检测到拼写错误并且能够识别出仅一个有效的命令与错误相似,Git 将尝试建议正确的命令,甚至自动运行建议。可能的值是:

  • 0、"false"、"off"、"no"、"show":显示建议的命令(默认)。

  • 1、"true"、"on"、"yes"、"immediate":立即运行建议的命令。

  • 大于 1 的正数:在指定的时间(0.1 秒)后运行建议的命令。

  • "never":不运行或显示任何建议的命令。

  • "prompt":显示建议并提示确认是否运行命令。

help.htmlPath

指定 HTML 文档所在的路径。支持文件系统路径和 URL。当以 web 格式显示帮助时,HTML 页面将以此路径为前缀。默认值为您的 Git 安装的文档路径。

http.proxy

覆盖 HTTP 代理,通常使用 http_proxyhttps_proxyall_proxy 环境变量配置(请参阅 curl(1))。除了 curl 理解的语法外,还可以指定一个带有用户名但没有密码的代理字符串,在这种情况下,git 将尝试以与其他凭证相同的方式获取密码。因此,语法是 [protocol://][user[:password]@]proxyhost[:port][/path]。这可以按每个远程进行覆盖;请参阅 remote.<name>.proxy。

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

http.proxyAuthMethod

设置用于向 HTTP 代理进行身份验证的方法。仅当配置的代理字符串包含用户名部分时(即形式为 user@hostuser@host:port)此项才生效。这可以按每个远程进行覆盖;请参阅 remote.<name>.proxyAuthMethod。两者都可以被 GIT_HTTP_PROXY_AUTHMETHOD 环境变量覆盖。可能的值是:

  • anyauth - 自动选择合适的身份验证方法。假设代理会以 407 状态码和一个或多个支持的身份验证方法的 Proxy-authenticate 标头响应未经身份验证的请求。这是默认值。

  • basic - HTTP 基本身份验证

  • digest - HTTP Digest 身份验证;这可以防止密码以明文形式传输到代理

  • negotiate - GSS-Negotiate 身份验证(参见 curl(1) 的 --negotiate 选项)

  • ntlm - NTLM 身份验证(参见 curl(1) 的 --ntlm 选项)

http.proxySSLCert

存储用于向 HTTPS 代理进行身份验证的客户端证书的文件路径。可以被 GIT_PROXY_SSL_CERT 环境变量覆盖。

http.proxySSLKey

存储用于向 HTTPS 代理进行身份验证的私钥的文件路径。可以被 GIT_PROXY_SSL_KEY 环境变量覆盖。

http.proxySSLCertPasswordProtected

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

http.proxySSLCAInfo

使用 HTTPS 代理验证代理时要使用的证书包文件的路径名。可以通过 GIT_PROXY_SSL_CAINFO 环境变量覆盖。

http.emptyAuth

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

http.proactiveAuth

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

如果使用的凭据助手指定了身份验证方案(即,通过 authtype 字段),则将使用该值;如果提供了不带方案的用户名和密码,则使用 Basic 身份验证。该选项的值确定从助手请求的方案。可能的值包括:

  • basic - 向助手请求 Basic 身份验证。

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

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

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

http.delegation

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

  • none - 不允许任何委派。

  • policy - 仅当 Kerberos 服务票证中设置了 OK-AS-DELEGATE 标志时才进行委派,这是领域策略的问题。

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

http.extraHeader

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

http.cookieFile

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

http.saveCookies

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

http.version

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

  • HTTP/2

  • HTTP/1.1

http.curloptResolve

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

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

  • -HOST:PORT

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

http.sslVersion

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

  • sslv2

  • sslv3

  • tlsv1

  • tlsv1.0

  • tlsv1.1

  • tlsv1.2

  • tlsv1.3

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

http.sslCipherList

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

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

http.sslVerify

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

http.sslCert

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

http.sslKey

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

http.sslCertPasswordProtected

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

http.sslCAInfo

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

http.sslCAPath

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

http.sslBackend

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

http.sslCertType

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

http.sslKeyType

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

http.schannelCheckRevoke

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

http.schannelUseSSLCAInfo

在 cURL v7.60.0 及更高版本中,Secure Channel 后端可以使用通过 http.sslCAInfo 提供的证书包,但这会覆盖 Windows 证书存储。由于默认情况下不希望这样做,Git 将告知 cURL 默认不使用该证书包(当 schannel 后端通过 http.sslBackend 配置时),除非 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.lowSpeedTime 秒内低于 http.lowSpeedLimit,则中止传输。可以通过 GIT_HTTP_LOW_SPEED_LIMITGIT_HTTP_LOW_SPEED_TIME 环境变量覆盖。

http.keepAliveIdle

指定在空闲连接上等待多长时间(以秒为单位)才发送 TCP keepalive 探测(如果操作系统支持)。如果未设置,则使用 curl 的默认值。可以通过 GIT_HTTP_KEEPALIVE_IDLE 环境变量覆盖。

http.keepAliveInterval

指定 TCP keepalive 探测之间等待多长时间(以秒为单位)(如果操作系统支持)。如果未设置,则使用 curl 的默认值。可以通过 GIT_HTTP_KEEPALIVE_INTERVAL 环境变量覆盖。

http.keepAliveCount

指定在放弃并终止连接之前发送多少个 TCP keepalive 探测(如果操作系统支持)。如果未设置,则使用 curl 的默认值。可以通过 GIT_HTTP_KEEPALIVE_COUNT 环境变量覆盖。

http.noEPSV

一个布尔值,禁用 curl 的 EPSV ftp 命令。这对于某些不支持 EPSV 模式的“有缺陷”的 ftp 服务器可能很有用。可以通过 GIT_CURL_FTP_NO_EPSV 环境变量覆盖。默认为 false(curl 将使用 EPSV)。

http.userAgent

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

http.followRedirects

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

http.<url>.*

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

  1. Scheme(例如,https in https://example.com/)。此字段在配置键和 URL 之间必须完全匹配。

  2. Host/domain name(例如,example.com in https://example.com/)。此字段在配置键和 URL 之间必须匹配。可以将 * 指定为主机名的一部分,以匹配此级别的所有子域。例如,https://*.example.com/ 将匹配 https://foo.example.com/,但不会匹配 https://foo.bar.example.com/

  3. Port number(例如,8080 in http://example.com:8080/)。此字段在配置键和 URL 之间必须完全匹配。省略的端口号在匹配之前会自动转换为该方案的正确默认值。

  4. Path(例如,repo.git in https://example.com/repo.git)。配置键的 path 字段必须与 URL 的 path 字段完全匹配,或者作为斜杠分隔的路径元素的 a prefix。这意味着一个 path 为 foo/ 的配置键会匹配 URL path foo/bar。前缀只能在斜杠(/)边界处匹配。更长的匹配优先(因此,具有 path foo/bar 的配置键比仅具有 path foo/ 的配置键能更好地匹配 URL path foo/bar)。

  5. User name(例如,user in https://user@example.com/repo.git)。如果配置键包含用户名,则必须与 URL 中的用户名完全匹配。如果配置键不包含用户名,则该配置键将匹配任何用户名的 URL(包括无用户名),但优先级低于包含用户名的配置键。

上面的列表按降序排列优先级;匹配配置键的 path 的 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 图形历史浏览器中(以及将来在其他地方或在其他 porcelain 中)。例如,请参阅 git-mailinfo[1]。默认为 utf-8

i18n.logOutputEncoding

运行 git log 及其相关命令时,提交消息将被转换为的字符编码。

imap.folder

将邮件放入的文件夹,通常是“草稿”文件夹。例如:INBOX.DraftsINBOX/Drafts[Gmail]/Drafts。必须指定要交互的 IMAP 文件夹;当未提供 --folder 选项时,此配置变量的值将用作回退默认值。

imap.tunnel

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

imap.host

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

imap.user

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

imap.pass

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

imap.port

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

imap.sslverify

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

imap.preformattedHTML

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

imap.authMethod

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

include.path
includeIf.<condition>.path

用于包含其他配置文件(.gitmodules)的特殊变量。请参阅主 git-config[1] 文档的“配置文件”部分,特别是“包含”和“条件包含”子部分。

index.recordEndOfIndexEntries

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

index.recordOffsetTable

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

index.sparse

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

index.threads

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

index.version

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

index.skipHash

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

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

init.templateDir

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

init.defaultBranch

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

init.defaultObjectFormat

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

init.defaultRefFormat

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

instaweb.browser

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

instaweb.httpd

用于在工作存储库上启动 gitweb 的 HTTP 守护进程命令行。请参阅 git-instaweb[1]

instaweb.local

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

instaweb.modulePath

gitweb 使用的默认模块路径,而不是 /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)显示彩色 diff 时,git 将通过此配置变量定义的 shell 命令来传递 diff。该命令可以通过进一步的标记来丰富 diff,前提是它保留了原始 diff 行的一对一对应关系。默认为禁用(无过滤)。

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

打印显示的任何提交的 ref 名称。可能的值包括:

short

不打印 ref 名称前缀 refs/heads/refs/tags/refs/remotes/

full

打印完整的 ref 名称(包括前缀)。

auto

如果输出到终端,则 ref 名称的显示方式与 short 相同,否则不显示 ref 名称。

这与 git log--decorate 选项相同。

log.initialDecorationSet

默认情况下,git log 仅显示某些已知 ref 命名空间的可装饰信息。如果指定了 all,则显示所有 ref 的可装饰信息。

log.excludeDecoration

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

log.diffMerges

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

log.follow

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

log.graphColors

用于在 git log --graph 中绘制历史线条的颜色列表,用逗号分隔。

log.showRoot

如果设置为 true,则初始提交将显示为一个大的创建事件。这相当于与空树进行 diff。通常隐藏根提交的工具,如 git-log[1]git-whatchanged[1],现在将显示它。默认值为 true。

log.showSignature

如果设置为 true,则 git-log[1]git-show[1]git-whatchanged[1] 将假定 --show-signature

log.mailmap

如果设置为 true,则 git-log[1]git-show[1]git-whatchanged[1] 将假定 --use-mailmap,否则假定 --no-use-mailmap。默认值为 true。

lsrefs.unborn

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

mailinfo.scissors

如果设置为 true,则 git-mailinfo[1](因此也包括 git-am[1])默认情况下将像在命令行中提供了 --scissors 选项一样工作。激活时,此功能将删除消息正文中剪刀线(即主要由 ">8"、"8<" 和 "-" 组成)之前的所有内容。

mailmap.file

一个补充邮件映射文件的位置。存储在仓库根目录下的默认邮件映射首先加载,然后加载此变量指向的邮件映射文件。邮件映射文件的位置可能在仓库子目录中,或者在仓库本身之外的某个地方。请参阅 git-shortlog[1]git-blame[1]

mailmap.blob

mailmap.file 类似,但将值视为仓库中的一个 blob 引用。如果同时提供了 mailmap.filemailmap.blob,两者都会被解析,其中 mailmap.file 的条目具有优先权。在裸仓库中,此项默认设置为 HEAD:.mailmap。在非裸仓库中,它默认为空。

maintenance.auto

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

maintenance.autoDetach

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

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

maintenance.strategy

此字符串配置选项提供了一种指定仓库维护的几种推荐策略的方法。这会影响在 git maintenance run 期间运行哪些任务,前提是没有提供 --task=<task> 参数。此设置会影响手动维护、自动维护以及计划维护。运行的任务可能因维护类型而异。

可以通过设置 maintenance.<task>.enabledmaintenance.<task>.schedule 来进一步调整维护策略。如果设置了这些值,将使用它们而不是 maintenance.strategy 提供的默认值。

可能的策略有:

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

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

  • geometric:此策略执行几何打包打包文件,并使辅助数据结构保持最新。该策略会过期 reflog 中的数据,并删除无法再找到的工作树。当几何打包策略决定进行一次性打包时,该策略将为所有无法访问的对象生成一个 cruft pack。已经是 cruft pack 一部分的此对象将被过期。

    此打包策略是 gc 策略的完整替代品,推荐用于大型仓库。

  • incremental:此设置针对执行不删除任何数据的少量维护活动进行了优化。这不会计划 gc 任务,但会每小时运行 prefetchcommit-graph 任务,每天运行 loose-objectsincremental-repack 任务,每周运行 pack-refs 任务。手动仓库维护使用 gc 任务。

maintenance.<task>.enabled

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

maintenance.<task>.schedule

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

maintenance.commit-graph.auto

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

maintenance.loose-objects.auto

此整数配置选项控制 loose-objects 任务在 git maintenance run --auto 中运行的频率。如果为零,则 loose-objects 任务不会与 --auto 选项一起运行。负值将强制每次都运行该任务。否则,正值表示当松散对象数量至少为 maintenance.loose-objects.auto 的值时,应运行该命令。默认值为 100。

maintenance.loose-objects.batchSize

此整数配置选项控制在 loose-objects 任务期间写入打包文件的松散对象的最大数量。默认为五万。使用值 0 表示无限制。

maintenance.incremental-repack.auto

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

maintenance.geometric-repack.auto

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

maintenance.geometric-repack.splitFactor

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

maintenance.reflog-expire.auto

此整数配置选项控制 reflog-expire 任务在 git maintenance run --auto 中运行的频率。如果为零,则 reflog-expire 任务不会与 --auto 选项一起运行。负值将强制每次都运行该任务。否则,正值表示当 "HEAD" reflog 中过期的 reflog 条目数量至少为 maintenance.loose-objects.auto 的值时,应运行该命令。默认值为 100。

maintenance.rerere-gc.auto

此整数配置选项控制 rerere-gc 任务在 git maintenance run --auto 中运行的频率。如果为零,则 rerere-gc 任务不会与 --auto 选项一起运行。负值将强制每次都运行该任务。否则,任何正值都表示当 "rr-cache" 目录存在且至少有一个条目时,命令将运行,而不管它是否陈旧。此启发式方法将来可能会得到改进。默认值为 1。

maintenance.worktree-prune.auto

此整数配置选项控制 worktree-prune 任务在 git maintenance run --auto 中运行的频率。如果为零,则 worktree-prune 任务不会与 --auto 选项一起运行。负值将强制每次都运行该任务。否则,正值表示当可修剪的工作树数量超过该值时,应运行该命令。默认值为 1。

man.viewer

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

man.<tool>.cmd

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

man.<tool>.path

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

merge.conflictStyle

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

merge.defaultToUpstream

如果 merge 在没有指定任何提交参数的情况下调用,则合并当前分支配置的上游分支,使用它们在远程跟踪分支中存储的最后一次观察到的值。会检查命名 branch.<current branch>.merge 的值,这些值是指向 branch.<current-branch>.remote 指定的远程分支,然后通过 remote.<remote>.fetch 映射到它们相应的远程跟踪分支,并合并这些跟踪分支的尖端。默认值为 true。

merge.ff

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

merge.verifySignatures

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

merge.branchdesc

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

merge.log

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

merge.suppressDest

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

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

merge.renameLimit

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

merge.renames

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

merge.directoryRenames

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

false

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

true

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

conflict

将为这些路径报告冲突。

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

merge.renormalize

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

merge.stat

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

false

什么都不显示。

true

显示 git diff --diffstat --summary ORIG_HEAD

compact

显示 git diff --compact-summary ORIG_HEAD

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

merge.autoStash

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

merge.tool

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

merge.guitool

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

  • araxis

  • bc

  • codecompare

  • deltawalker

  • diffmerge

  • diffuse

  • ecmerge

  • emerge

  • examdiff

  • guiffy

  • gvimdiff

  • kdiff3

  • meld

  • nvimdiff

  • opendiff

  • p4merge

  • smerge

  • tkdiff

  • tortoisemerge

  • vimdiff

  • vscode

  • winmerge

  • xxdiff

merge.verbosity

控制递归合并策略输出的数量。级别 0 仅输出最终错误消息(如果检测到冲突)。级别 1 仅输出冲突,级别 2 输出冲突和文件更改。级别 5 及以上输出调试信息。默认值为级别 2。可以通过 GIT_MERGE_VERBOSITY 环境变量覆盖。

merge.<driver>.name

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

merge.<driver>.driver

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

merge.<driver>.recursive

在执行共同祖先之间的内部合并时,指定要使用的低级合并驱动程序。有关详细信息,请参阅 gitattributes[5]

mergetool.<tool>.path

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

mergetool.<tool>.cmd

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

mergetool.<tool>.hideResolved

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

mergetool.<tool>.trustExitCode

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

mergetool.meld.hasOutput

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

mergetool.meld.useAutoMerge

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

mergetool.<variant>.layout

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

mergetool.hideResolved

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

mergetool.keepBackup

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

mergetool.keepTemporaries

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

mergetool.writeToTemp

默认情况下,Git 在工作树中写入冲突文件的临时 BASELOCALREMOTE 版本。当此变量设置为 true 时,Git 将尝试为此类文件使用临时目录。默认为 false

mergetool.prompt

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

mergetool.guiDefault

设置为 true 以默认使用 merge.guitool(等同于指定 --gui 参数),或设置为 auto 以根据 DISPLAY 环境变量的值选择 merge.guitoolmerge.tool。默认为 false,在这种情况下,必须显式提供 --gui 参数才能使用 merge.guitool

notes.mergeStrategy

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

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

notes.<name>.mergeStrategy

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

notes.displayRef

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

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

对于不存在的引用将发出警告,但与任何引用不匹配的 glob 将被静默忽略。

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

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

notes.rewrite.<command>

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

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

notes.rewriteMode

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

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

notes.rewriteRef

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

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

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

pack.window

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

pack.depth

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

pack.windowMemory

当命令行未指定限制时,git-pack-objects[1] 中每个线程用于 pack 窗口内存的最大内存使用量。值可以后缀“k”、“m”或“g”。未配置(或显式设置为 0)时,没有限制。

pack.compression

一个介于 -1 到 9 之间的整数,表示 pack 文件中对象的压缩级别。-1 是 zlib 默认值。0 表示不压缩,1-9 是各种速度/大小的权衡,9 是最慢的。如果未设置,则默认为 core.compression。如果 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 的一部分。这可以减少服务 fetch 时的内存和 CPU 使用量,但可能会导致发送的 pack 略大。默认为 true。

pack.island

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

pack.islandCore

指定一个 island 名称,该 island 的对象将首先被打包。这会在一个 pack 的开头创建一个类 pseudo-pack,以便为请求这些对象的用户复制 island 中的对象时,希望更快。实际上,这意味着指定的 island 应该对应于仓库中最常克隆的内容。另请参阅 git-pack-objects[1] 中的“DELTA ISLANDS”。

pack.deltaCacheSize

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

pack.deltaCacheLimit

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

pack.threads

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

pack.indexVersion

指定默认的 pack 索引版本。有效值为 1(用于 Git 1.5.2 之前的旧版 pack 索引)和 2(用于支持大于 4GB 的 pack 以及正确防止损坏 pack 被重新打包的新 pack 索引)。版本 2 为默认值。请注意,版本 2 是强制执行的,并且在相应的 pack 大于 2GB 时,此配置选项将被忽略。

如果您有一个不理解版本 2 *.idx 文件的旧版 Git,通过非本机协议(例如“http”)进行克隆或获取(这将从另一端复制 *.pack 文件和相应的 *.idx 文件)可能会导致您获得一个无法用旧版 Git 访问的存储库。然而,如果 *.pack 文件小于 2GB,您可以使用 git-index-pack[1] 在 *.pack 文件上重新生成 *.idx 文件。

pack.packSizeLimit

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

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

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

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

pack.useBitmaps

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

pack.useBitmapBoundaryTraversal

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

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

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

pack.useSparse

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

pack.usePathWalk

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

pack.preferBitmapTips

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

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

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

pack.writeBitmaps (deprecated)

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

pack.writeBitmapHashCache

当设置为 true 时,git 将在位图索引(如果已写入)中包含一个“hash cache”部分。此缓存可用于为 git 的 delta 启发式算法提供数据,可能导致位图和非位图对象之间产生更好的 delta(例如,在服务一个旧的、位图化的 pack 和自上次 gc 以来推送的对象之间进行 fetch 时)。缺点是它会消耗每对象 4 字节的磁盘空间。默认为 true。

写入多 pack 可达性位图时,不会计算新的 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> 指定的分页器为子命令打开分页。如果在命令行指定了 --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 远程仓库,如果它使用了某些的话。默认为 "false",表示不宣告 "promisor-remote" 功能。

promisor.sendFields

一个由逗号或空格分隔的附加远程相关字段名称列表。服务器在宣告其 promisor 远程仓库时,会发送这些字段名称及其配置中的相关字段值,使用 "promisor-remote" 功能,请参阅 gitprotocol-v2[5]。目前,仅支持 "partialCloneFilter" 和 "token" 字段名称。

partialCloneFilter

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

token

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

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

此列表除非 "promisor.advertise" 配置变量设置为 "true" 并且 "name" 和 "url" 字段始终被宣告,否则无效。即使在这种情况下,它们也始终被宣告,而与此设置无关。

promisor.acceptFromServer

如果设置为 "all",客户端将接受服务器可能使用 "promisor-remote" 功能宣告的所有 promisor 远程仓库。如果设置为 "knownName",客户端将接受在客户端上已配置且名称与客户端宣告的名称相同的 promisor 远程仓库。这不太安全,但可以在企业环境中用于服务器和客户端相互信任而不更改名称和 URL 的情况。如果设置为 "knownUrl",客户端将接受在客户端上具有相同名称和 URL,并且与服务器宣告的名称和 URL 相同的 promisor 远程仓库。这比 "all" 或 "knownName" 更安全,因此应尽可能使用它而不是那些选项。默认为 "none",表示不接受服务器宣告的任何 promisor 远程仓库。通过接受 promisor 远程仓库,客户端同意服务器可以在其对客户端的 "fetch" 和 "clone" 请求的响应中省略可以从此 promisor 远程仓库延迟获取的对象。名称和 URL 比较是区分大小写的。请参阅 gitprotocol-v2[5]

promisor.checkFields

一个由逗号或空格分隔的附加远程相关字段名称列表。客户端会检查服务器传输的这些字段的值是否与其自身配置中相应字段的值匹配,然后才接受 promisor 远程仓库。目前,"partialCloneFilter" 和 "token" 是唯一支持的字段名称。

如果正在为已宣告的 promisor 远程仓库(例如,“foo”)检查这些字段名称之一(例如,“token”),则必须满足三个条件才能通过此特定字段的检查:

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

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

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

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

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

    字段值是区分大小写比较的。

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

    字段名称和值应通过服务器使用 "promisor-remote" 功能,通过 promisor.sendFields 配置变量传递。仅当 promisor.acceptFromServer 配置变量未设置为 "None" 时才检查字段。如果设置为 "None",则此配置变量无效。请参阅 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.autoStash

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

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

pull.twohead

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

push.autoSetupRemote

如果设置为 "true",则在当前分支没有上游跟踪时,假定默认 push 的 --set-upstream;此选项在 push.default 选项为 simpleupstreamcurrent 时生效。如果您希望默认情况下将新分支推送到默认远程(类似于 push.default=current 的行为)并且还希望设置上游跟踪,那么这个选项非常有用。最有可能从该选项中受益的工作流程是 simple 的中心化工作流程,其中所有分支预计在远程具有相同的名称。

push.default

定义当未给出 refspec 时(无论是从命令行、配置还是其他地方),git push 应执行的操作。不同的值适用于特定的工作流程;例如,在纯粹的中心化工作流程中(即 fetch 源等于 push 目的地),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 会导致所有 push 被 GPG 签名,如同将 --signed 传递给 git-push[1]。字符串 if-asked 会在服务器支持时对 push 进行签名,如同将 --signed=if-asked 传递给 git push。设置为 false 可以覆盖低优先级配置文件中的值。显式的命令行标志始终优先于此配置选项。

push.pushOption

当命令行未提供 --push-option=<option> 参数时,git push 的行为就如同此变量的每个 <value> 都被提供为 --push-option=<value>

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

Example:

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

~/.gitconfig
  push.pushoption = c

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

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

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

push.useForceIfIncludes

如果设置为 "true",则等同于在命令行中将 --force-if-includes 作为选项传递给 git-push[1]。在推送时添加 --no-force-if-includes 将覆盖此配置设置。

push.negotiate

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

push.useBitmaps

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

rebase.backend

Rebase 的默认后端。可选值为 applymerge。将来,如果 merge 后端获得了 apply 后端的所有剩余功能,此设置可能会变得不常用。

rebase.stat

是否显示自上次 rebase 以来上游的变化 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 列表。格式会自动在前面加上提交 hash。

rebase.abbreviateCommands

如果设置为 true,git rebase 将在 todo 列表中使用缩写的命令名称,结果如下:

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

而不是

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

默认为 false。

rebase.rescheduleFailedExec

自动重新调度失败的 exec 命令。这只在交互模式下(或提供了 --exec 选项时)有意义。这等同于指定 --reschedule-failed-exec 选项。

rebase.forkPoint

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

rebase.rebaseMerges

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

rebase.maxLabelLength

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

receive.advertiseAtomic

默认情况下,git-receive-pack 会向其客户端通告原子推送功能。如果您不想通告此功能,请将此变量设置为 false。

receive.advertisePushOptions

设置为 true 时,git-receive-pack 将向其客户端通告推送选项功能。默认为 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" 的推送证书,该证书是由为同一仓库提供服务的 receive-pack 在此秒数内生成的,则将证书中的 "nonce" 导出到 hooks 的 GIT_PUSH_CERT_NONCE(而不是 receive-pack 请求发送方包含的内容)。这可能有助于更轻松地编写 pre-receivepost-receive 中的检查。它们不再检查记录 nonce 已过期的秒数的 GIT_PUSH_CERT_NONCE_SLOP 环境变量来决定是否接受证书,而只能检查 GIT_PUSH_CERT_NONCE_STATUS 是否为 OK。

receive.fsckObjects

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

receive.fsck.<msg-id>

作用与 fsck.<msg-id> 相同,但由 git-receive-pack[1] 使用而不是 git-fsck[1]。详情请参阅 fsck.<msg-id> 文档。

receive.fsck.skipList

作用与 fsck.skipList 相同,但由 git-receive-pack[1] 使用而不是 git-fsck[1]。详情请参阅 fsck.skipList 文档。

receive.keepAlive

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

receive.unpackLimit

如果推送中接收到的对象数量低于此限制,则对象将被解压为松散对象文件。但是,如果接收到的对象数量等于或超过此限制,则接收到的 pack 将作为 pack 存储,并在添加任何缺失的 delta 基之后。存储来自推送的 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 将拒绝更新非裸仓库中当前检出的分支的 ref。这种推送可能很危险,因为它会使 HEAD 与索引和工作树不同步。如果设置为 "warn",则向 stderr 打印此类推送的警告,但允许推送继续。如果设置为 false 或 "ignore",则允许此类推送而不显示任何消息。默认为 "refuse"。

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

默认情况下,"updateInstead" 将拒绝推送,如果工作树或索引与 HEAD 有任何不同,但 push-to-checkout hook 可用于自定义此行为。请参阅 githooks[5]

receive.denyNonFastForwards

如果设置为 true,git-receive-pack 将拒绝非 fast-forward 的 ref 更新。使用此选项可防止通过推送进行此类更新,即使该推送是强制的。此配置变量在初始化共享仓库时设置。

receive.hideRefs

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

receive.procReceiveRefs

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

例如,如果此变量设置为 "refs/for",则推送到 "refs/for/master" 这样的 ref 不会创建或更新名为 "refs/for/master" 的 ref,但可能通过运行 "proc-receive" hook 直接创建或更新一个 pull request。

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

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 的数据并更新 ref 后将运行 git-update-server-info。

receive.shallowUpdate

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

reftable.blockSize

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

建议使用对虚拟内存系统或文件系统友好的 2 的幂(例如 4kB 或 8kB)。较大的块大小(64kB)可以提供更好的压缩,但可能会增加读取器在访问时的成本。

最大块大小为 16777215 字节(15.99 MiB)。默认值为 4096 字节(4kB)。值为 0 将使用默认值。

reftable.restartInterval

创建 restart points 的间隔。reftable 后端在文件创建时确定 restart points。对于较小的块大小(4k 或 8k),每 16 个记录可能更合适;对于较大的块大小(64k),每 64 个记录可能更合适。

更频繁的 restart points 会减少前缀压缩并增加 restart table 占用的空间,这两者都会增加文件大小。

不那么频繁的 restart points 会使前缀压缩更有效,减小整体文件大小,但会增加读取器在二分查找步骤后遍历更多记录的开销。

每个块最多支持 65535 个 restart points。

默认值是每 16 条记录创建一个 restart point。值为 0 将使用默认值。

reftable.indexObjects

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

默认值为 true

reftable.geometricFactor

每当 reftable 后端向堆栈追加新表时,它都会执行自动压缩以确保只有一个表。后端通过确保表在各自大小上形成几何序列来实现这一点。

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

reftable.lockTimeout

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

remote.pushDefault

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

remote.<name>.url

远程仓库的 URL。请参阅 git-fetch[1]git-push[1]。已配置的远程可以有多个 URL;在这种情况下,第一个 URL 用于 fetch,所有 URL 都用于 push(假定没有定义 remote.<name>.pushurl)。将此键设置为空字符串会清除 URL 列表,允许您覆盖之前的配置。

remote.<name>.pushurl

远程仓库的推送 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 的 prefetch 任务中,将忽略此远程。

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 激活了 pruning,并且这些本地标签在远程中已不存在。如果设置了 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

当使用远程的配置 refspec 进行获取时,git-fetch[1] 应如何处理 remotes/<name>/HEAD 的更新。默认值为 "create",如果远程存在 remotes/<name>/HEAD 但本地不存在,则会创建它;这不会触及已存在的本地 ref。将其设置为 "warn" 将在远程值与本地值不同时打印一条消息;如果没有本地 ref,则其行为类似于 "create"。 "warn" 的变体是 "warn-if-not-$branch",其行为与 "warn" 类似,但如果远程的 HEAD$branch,则将保持静默。将其设置为 "always" 将 silently 将 remotes/<name>/HEAD 更新为远程的值。最后,将其设置为 "never" 将永远不会更改或创建本地 ref。

remotes.<group>

由 "git remote update <group>" 获取的远程列表。请参阅 git-remote[1]

repack.useDeltaBaseOffset

默认情况下,git-repack[1] 创建使用 delta-base offset 的 pack。如果您需要与 Git 1.4.4 之前的版本共享您的仓库,无论是直接共享还是通过 dumb protocol(如 http)共享,您需要将此选项设置为 "false" 并重新打包。通过 native protocol 访问旧版 Git 不受此选项影响。

repack.packKeptObjects

如果设置为 true,则使 git repack 的行为如同传递了 --pack-kept-objects。详情请参阅 git-repack[1]。默认情况下为 false,但在写入位图索引时(通过 --write-bitmap-indexrepack.writeBitmaps)为 true

repack.useDeltaIslands

如果设置为 true,则使 git repack 的行为如同传递了 --delta-islands。默认为 false

repack.writeBitmaps

当为 true 时,git 在将所有对象打包到磁盘时(例如,当运行 git repack -a 时)会写入位图索引。此索引可以加速后续为克隆和 fetch 创建的 pack 的 "counting objects" 阶段,但会占用一些磁盘空间并增加初始 repack 的时间。如果创建了多个 packfile,则此设置无效。在 bare 仓库上默认为 true,否则默认为 false。

repack.updateServerInfo

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

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

当命令行未提供参数时,git-pack-objects[1] 在生成 cruft pack 时使用的参数。请参阅具有相似名称的 pack.* 配置变量以了解默认值和含义。

repack.midxMustContainCruft

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

rerere.autoUpdate

设置为 true 时,git-rerere 在使用先前记录的解析 cleanly 解决冲突后,会使用解析后的内容更新索引。默认为 false。

rerere.enabled

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

revert.reference

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

safe.bareRepository

指定 Git 将处理哪些 bare 仓库。当前支持的值为:

  • all:Git 处理所有 bare 仓库。这是默认值。

  • explicit:Git 只处理通过顶层 --git-dir 命令行选项或 GIT_DIR 环境变量指定的 bare 仓库(请参阅 git[1])。

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

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

safe.directory

这些配置条目指定了 Git 跟踪的目录,即使它们不属于当前用户,也被认为是安全的。默认情况下,Git 甚至不会解析不属于当前用户的仓库的 Git 配置,更不用说运行其 hook 了,而此配置设置允许用户指定例外情况,例如,有意共享的仓库(请参阅 git-init[1] 中的 --shared 选项)。

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

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

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

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

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

sendemail.identity

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

sendemail.smtpEncryption

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

sendemail.smtpSSLCertPath

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

sendemail.<identity>.*

下面 sendemail.* 参数的特定身份版本,当通过命令行或 sendemail.identity 选择此身份时,将优先于这些参数。

sendemail.multiEdit

如果为 true(默认),将只启动一个编辑器实例来编辑您需要编辑的文件(使用 --annotate 时编辑补丁,使用 --compose 时编辑摘要)。如果为 false,文件将一个接一个地编辑,每次都会启动一个新编辑器。

sendemail.confirm

设置发送前是否确认的默认值。必须是 alwaysnevercccomposeauto 之一。有关这些值的含义,请参阅 git-send-email[1] 文档中的 --confirm

sendemail.mailmap

如果为 true,则使 git-send-email[1] 假定为 --mailmap,否则假定为 --no-mailmapFalse 为默认值。

sendemail.mailmap.file

特定于 git-send-email[1] 的增强邮件映射文件的位置。默认邮件映射和 mailmap.file 会先加载。因此,此文件中的条目优先于默认邮件映射位置中的条目。请参阅 gitmailmap[5]

sendemail.mailmap.blob

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

sendemail.aliasesFile

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

sendemail.aliasFileType

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

每种格式的别名文件内容可以在同名电子邮件程序的文档中找到。下文描述了与标准格式的差异和限制。

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

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

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

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

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

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

sendemail.outlookidfix

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

sendemail.signedOffCc (deprecated)

已弃用的 sendemail.signedOffByCc 的别名。

sendemail.smtpBatchSize

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

sendemail.smtpReloginDelay

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

sendemail.forbidSendmailVariables

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

sequence.editor

git rebase -i 用于编辑 rebase 指令文件的文本编辑器。该值意图在 shell 使用时由 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.sparseCheckout 设置为 true

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

如果设置为 true,git stash applygit stash pop 的行为将如同提供了 --index。默认为 false。请参阅 git-stash[1] 中的描述。

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

stash.showIncludeUntracked

如果设置为 true,git stash show 命令将显示 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 以默认启用 --ahead-behind,设置为 false 以默认启用 --no-ahead-behindgit-status[1] 中用于非 porcelain 状态格式。默认为 true。

status.displayCommentPrefix

如果设置为 true,git-status[1] 将在每行输出前插入一个注释前缀(以 core.commentChar 开始,即默认情况下是 #)。这是 git-status[1] 在 Git 1.8.4 及更早版本中的行为。默认为 false。

status.renameLimit

git-status[1]git-commit[1] 中执行重命名检测时考虑的文件数量。默认为 diff.renameLimit 的值。

status.renames

Git 在 git-status[1]git-commit[1] 中检测重命名的方式。如果设置为 "false",则禁用重命名检测。如果设置为 "true",则启用基本重命名检测。如果设置为 "copies" 或 "copy",Git 还会检测复制。默认为 diff.renames 的值。

status.showStash

如果设置为 true,git-status[1] 将显示当前暂存的数量。默认为 false。

status.showUntrackedFiles

默认情况下,git-status[1]git-commit[1] 会显示 Git 当前未跟踪的文件。只包含未跟踪文件的目录仅显示目录名称。显示未跟踪文件意味着 Git 需要 lstat() 整个仓库中的所有文件,这在某些系统上可能会很慢。因此,此变量控制命令如何显示未跟踪文件。可能的值为:

  • no - 不显示未跟踪文件。

  • normal - 显示未跟踪的文件和目录。

  • all - 还显示未跟踪目录中的单个文件。

如果未指定此变量,则默认为 normal。所有布尔值 true 的常见拼写都视为 normalfalse 视为 no。此变量可以通过 git-status[1]git-commit[1] 的 -u|--untracked-files 选项覆盖。

status.submoduleSummary

默认为 false。如果设置为非零数字或 true(与 -1 或无限数量相同),则会启用子模块摘要,并显示已修改子模块的提交摘要(请参阅 git-submodule[1] 的 --summary-limit 选项)。请注意,当 diff.ignoreSubmodules 设置为 all 时,摘要输出命令将被抑制,或者仅对 submodule.<name>.ignore=all 设置的子模块进行抑制。唯一的例外是 status 和 commit 会显示暂存的子模块更改。要查看已忽略子模块的摘要,您可以选择使用 --ignore-submodules=dirty 命令行选项或 git submodule summary 命令,后者会显示类似的输出但不会遵守这些设置。

submodule.<name>.url

子模块的 URL。此变量通过 git submodule init 从 .gitmodules 文件复制到 git 配置。用户可以在获取子模块(通过 git submodule update)之前更改配置的 URL。如果未设置 submodule.<name>.active 或 submodule.active,则此变量的存在用作回退,以指示 Git 命令是否对该子模块感兴趣。有关详细信息,请参阅 git-submodule[1]gitmodules[5]

submodule.<name>.update

git submodule update 更新子模块的方法,这是唯一受影响的命令,其他命令如 git checkout --recurse-submodules 则不受影响。它存在于历史原因,当 git submodule 是唯一与子模块交互的命令时;像 submodule.activepull.rebase 这样的设置更具体。它由 git submodule initgitmodules[5] 文件填充。请参阅 git-submodule[1]update 命令的描述。

submodule.<name>.branch

子模块的远程分支名称,用于 git submodule update --remote。设置此选项以覆盖 .gitmodules 文件中的值。有关详细信息,请参阅 git-submodule[1]gitmodules[5]

submodule.<name>.fetchRecurseSubmodules

此选项可用于控制此子模块的递归获取。可以使用 "git fetch" 和 "git pull" 的 --[no-]recurse-submodules 命令行选项来覆盖它。此设置将覆盖 gitmodules[5] 文件中的设置。

submodule.<name>.ignore

定义 "git status" 和 diff 系列在何种情况下显示子模块为已修改。当设置为 "all" 时,它永远不会被视为已修改(但当它在 status 和 commit 的输出中被暂存时,它仍然会显示);"dirty" 会忽略子模块工作树的所有更改,并仅考虑子模块 HEAD 和超级项目记录的提交之间的差异。"untracked" 还会让其工作树中带有已修改跟踪文件的子模块显示为已更改。使用 "none"(未设置此选项时的默认值)也会将工作树中包含未跟踪文件的子模块显示为已更改。此设置会覆盖 .gitmodules 中为该子模块所做的任何设置,两种设置都可以通过命令行使用 "--ignore-submodules" 选项来覆盖。git submodule 命令不受此设置的影响。

submodule.<name>.active

布尔值,指示 Git 命令是否关心此子模块。此配置选项优先于 submodule.active 配置选项。有关详细信息,请参阅 gitsubmodules[7]

submodule.active

重复字段,包含一个路径规范,用于与子模块的路径进行匹配,以确定 Git 命令是否关心该子模块。有关详细信息,请参阅 gitsubmodules[7]

submodule.recurse

一个布尔值,指示命令是否默认启用 --recurse-submodules 选项。默认为 false。

当设置为 true 时,可以通过 --no-recurse-submodules 选项将其禁用。请注意,一些没有此选项的 Git 命令可能会调用一些受 submodule.recurse 影响的上述命令;例如 git remote update 会调用 git fetch 但没有 --no-recurse-submodules 选项。对于这些命令,一个变通方法是使用 git -c submodule.recurse=0 临时更改配置值。

以下列表显示了接受 --recurse-submodules 的命令以及它们是否受此设置支持。

  • checkoutfetchgreppullpushread-treeresetrestoreswitch 始终受支持。

  • clonels-files 不受支持。

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

submodule.propagateBranches

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

submodule.fetchJobs

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

submodule.alternateLocation

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

submodule.alternateErrorStrategy

指定如何处理通过 submodule.alternateLocation 计算的子模块备用位置的错误。可能的值为 ignoreinfodie。默认值为 die。请注意,如果设置为 ignoreinfo,并且计算的备用位置出现错误,则克隆将继续进行,就像没有指定备用位置一样。

tag.forceSignAnnotated

一个布尔值,用于指定创建的注释标签是否应进行 GPG 签名。如果命令行上指定了 --annotate,则此选项优先。

tag.sort

此变量控制 git-tag[1] 显示标签时的排序顺序。如果未提供 --sort=<value> 选项,则将使用此变量的值作为默认值。

tag.gpgSign

一个布尔值,用于指定所有标签是否都应进行 GPG 签名。在自动化脚本中运行使用此选项可能会导致大量标签被签名。因此,使用代理可以避免多次输入 GPG 密码。请注意,此选项不影响由 -u <keyid>--local-user=<keyid> 选项启用的标签签名行为。

tar.umask

此变量可用于限制 tar 存档条目的权限位。默认值为 0002,它会关闭全局写入位。特殊值 "user" 表示将使用归档用户的 umask。请参阅 umask(2) 和 git-archive[1]

Trace2 配置设置仅从系统和全局配置文件中读取;不尊重存储库本地和工作树配置文件以及 -c 命令行参数。

trace2.normalTarget

此变量控制常规目标。可能被 GIT_TRACE2 环境变量覆盖。下表显示了可能的值。

trace2.perfTarget

此变量控制性能目标。可能被 GIT_TRACE2_PERF 环境变量覆盖。下表显示了可能的值。

trace2.eventTarget

此变量控制事件目标。可能被 GIT_TRACE2_EVENT 环境变量覆盖。下表显示了可能的值。

  • 0false - 禁用目标。

  • 1true - 写入 STDERR

  • [2-9] - 写入已打开的文件描述符。

  • <absolute-pathname> - 以追加模式写入文件。如果目标已存在且为一个目录,则跟踪信息将写入给定目录下的文件(每个进程一个)。

  • af_unix:[<socket-type>:]<absolute-pathname> - 写入 Unix DomainSocket(在支持它们的平台上)。Socket 类型可以是 streamdgram;如果省略,Git 将尝试两者。

trace2.normalBrief

布尔值。如果为 true,则从常规输出中省略 timefilenameline 字段。可能被 GIT_TRACE2_BRIEF 环境变量覆盖。默认为 false。

trace2.perfBrief

布尔值。如果为 true,则从 PERF 输出中省略 timefilenameline 字段。可能被 GIT_TRACE2_PERF_BRIEF 环境变量覆盖。默认为 false。

trace2.eventBrief

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

trace2.eventNesting

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

trace2.configParams

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

trace2.envVars

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

trace2.destinationDebug

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

trace2.maxFiles

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

trailer.separators

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

此选项给出的第一个字符将是在配置中未为此拖车指定分隔符时使用的默认字符。

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

trailer.where

此选项指定新拖车将被添加到的位置。

它可以是 end(默认值)、startafterbefore

如果为 end,则每个新拖车将出现在现有拖车的末尾。

如果为 start,则每个新拖车将出现在现有拖车的开头,而不是末尾。

如果为 after,则每个新拖车将出现在具有相同 <key> 的最后一个拖车之后。

如果为 before,则每个新拖车将出现在具有相同 <key> 的第一个拖车之前。

trailer.ifexists

此选项可以让你选择在输入中已存在至少一个具有相同 <key> 的拖车时要执行的操作。

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

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

使用 addIfDifferent 时,只有当输入中已不存在与 (<key>, <value>) 对相同的拖车时,才会添加新拖车。

使用 add 时,即使输入中已存在一些与 (<key>, <value>) 对相同的拖车,也会添加新拖车。

使用 replace 时,将删除具有相同 <key> 的现有拖车,并添加新拖车。被删除的拖车将是离要添加新拖车的位置最近的(具有相同 <key> 的)。

使用 doNothing 时,将不执行任何操作;即,如果输入中已存在具有相同 <key> 的拖车,则不会添加新的拖车。

trailer.ifmissing

此选项可以让你选择在输入中尚不存在具有相同 <key> 的拖车时要执行的操作。

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

使用 add 时,将添加新拖车。

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

trailer.<keyAlias>.key

为 <key> 定义一个 <keyAlias>。<keyAlias> 必须是 <key> 的前缀(不区分大小写)。例如,在 git config trailer.ack.key "Acked-by" 中,"Acked-by" 是 <key>,"ack" 是 <keyAlias>。此配置允许在命令行上使用较短的 --trailer "ack:..." 调用,而不是使用较长的 --trailer "Acked-by:..."

在 <key> 的末尾,可以出现一个分隔符,然后是一些空格。默认情况下,唯一有效的分隔符是 :,但这可以使用 trailer.separators 配置变量进行更改。

如果键中存在分隔符,则在添加拖车时,它将覆盖默认分隔符。

trailer.<keyAlias>.where

此选项接受与 trailer.where 配置变量相同的值,并覆盖为指定 <keyAlias> 的拖车所指定的值。

trailer.<keyAlias>.ifexists

此选项接受与 trailer.ifexists 配置变量相同的值,并覆盖为指定 <keyAlias> 的拖车所指定的值。

trailer.<keyAlias>.ifmissing

此选项接受与 trailer.ifmissing 配置变量相同的值,并覆盖为指定 <keyAlias> 的拖车所指定的值。

trailer.<keyAlias>.command

已弃用,推荐使用 trailer.<keyAlias>.cmd。此选项的行为与 trailer.<keyAlias>.cmd 相同,不同之处在于它不会将任何内容作为参数传递给指定的命令。相反,子字符串 $ARG 的第一个出现将被替换为将作为参数传递的 <value>。

请注意,$ARG 在用户命令中只替换一次,并且原始的 $ARG 替换方式不安全。

当为同一个 <keyAlias> 指定了 trailer.<keyAlias>.cmdtrailer.<keyAlias>.command 时,将使用 trailer.<keyAlias>.cmd,并忽略 trailer.<keyAlias>.command

trailer.<keyAlias>.cmd

此选项可用于指定一个 shell 命令,该命令将被调用一次以自动添加具有指定 <keyAlias> 的拖车,然后每次指定 --trailer <keyAlias>=<value> 参数时都会调用该命令以修改此选项将生成的拖车的 <value>。

当指定的命令首次被调用以添加具有指定 <keyAlias> 的拖车时,行为就如同在 "git interpret-trailers" 命令的开头添加了一个特殊的 --trailer <keyAlias>=<value> 参数,其中 <value> 是命令的标准输出,并已去除前导和尾随空格。

如果还在命令行上传递了一些 --trailer <keyAlias>=<value> 参数,则该命令将为每个参数调用一次,并使用相同的 <keyAlias>。这些参数的 <value> 部分(如果有)将被传递给命令作为其第一个参数。这样,命令就可以生成一个从 --trailer <keyAlias>=<value> 参数中传递的 <value> 计算得出的 <value>。

transfer.credentialsInUrl

配置的 URL 可以包含纯文本凭据,形式为 <protocol>://<user>:<password>@<domain>/<path>。您可能希望警告或禁止使用此类配置(而是使用 git-credential[1])。这将在 git-clone[1]git-fetch[1]git-push[1] 以及任何其他直接使用已配置 URL 的情况下使用。

请注意,目前这仅限于检测 remote.<name>.url 配置中的凭据;它不会检测 remote.<name>.pushurl 配置中的凭据。

您可能希望启用此选项以防止无意的凭据泄露,例如,因为

  • 您正在运行 Git 的操作系统或系统可能无法提供一种方式或以其他方式允许您配置存储用户名和/或密码的配置文件权限。

  • 即使如此,将此类数据存储“静止”也可能使您面临其他风险,例如,备份过程可能会将数据复制到另一台系统。

  • Git 程序将在命令行上传递完整的 URL,这意味着凭据将暴露给系统中允许它们查看其他用户完整进程列表的其他非特权用户。在 Linux 上,procfs(5) 中记录的 "hidepid" 设置允许配置此行为。

    如果这些担忧不适用于您,那么您可能不需要担心由于在 Git 的配置文件中存储敏感数据而导致的凭据泄露。如果您确实想使用此功能,请将 transfer.credentialsInUrl 设置为以下值之一:

  • allow(默认):Git 将继续执行其活动而不会发出警告。

  • warn:Git 将在解析包含纯文本凭据的 URL 时向 stderr 写入警告消息。

  • die:Git 将在解析包含纯文本凭据的 URL 时向 stderr 写入失败消息。

transfer.fsckObjects

fetch.fsckObjectsreceive.fsckObjects 未设置时,将使用此变量的值。默认为 false。

如果设置为 true,在对象格式错误或指向不存在的对象时,fetch 或 receive 将中止。此外,还将检查各种其他问题,包括旧问题(请参阅 fsck.<msg-id>),以及潜在的安全问题,例如存在 .GIT 目录或恶意 .gitmodules 文件(有关详细信息,请参阅 v2.2.1 和 v2.17.1 的发行说明)。未来版本可能会添加其他健全性和安全检查。

在接收端,fsckObjects 失败将使这些对象变得不可访问,请参阅 git-receive-pack[1] 中的“QUARANTINE ENVIRONMENT”。在 fetch 端,格式错误的对象将被遗弃在存储库中。

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

当对象被解压时,它们会被写入对象存储,因此即使 "fetch" 失败,也可能引入恶意对象,然后下一次 "fetch" 成功,因为只检查新传入的对象,而不是已经写入对象存储的对象。不应依赖这种行为差异。将来,此类对象也可能会被隔离用于 "fetch"。

目前,谨慎的人需要找到一种方法来模拟隔离环境,如果他们想要与 "push" 相同的保护。例如,在内部镜像的情况下,分两步进行镜像,一步获取不受信任的对象,然后将第二步 "push"(将使用隔离)到另一个内部存储库,并让内部客户端使用此已推送的存储库,或者 embargo 内部 fetch,只允许在完整的 "fsck" 运行后(且在此期间没有新的 fetch)进行。

transfer.hideRefs

String(s) receive-packupload-pack 使用来决定从其初始广告中省略哪些 refs。使用多个定义来指定多个前缀字符串。属于变量值中列出的层次结构的 ref 将被排除,并在响应 git pushgit fetch 时隐藏。请参阅 receive.hideRefsuploadpack.hideRefs 以了解此配置的特定程序版本。

您也可以在 ref 名称前包含一个 ! 来否定该条目,显式公开它,即使之前的条目已将其标记为隐藏。如果您有多个 hideRefs 值,后面的条目将覆盖前面的条目(更具体的配置文件中的条目将覆盖不太具体的条目)。

如果正在使用命名空间,则从每个引用中剥离命名空间前缀,然后再将其与 transfer.hiderefs 模式进行匹配。为了匹配剥离前的 ref,请在 ref 名称前添加一个 ^。如果组合使用 !^,则必须先指定 !

例如,如果 refs/heads/mastertransfer.hideRefs 中指定,并且当前命名空间是 foo,那么 refs/namespaces/foo/refs/heads/master 将从广告中省略。如果 uploadpack.allowRefInWant 被设置,upload-pack 将把协议 v2 fetch 命令中的 want-ref refs/heads/master 视为 refs/namespaces/foo/refs/heads/master 不存在。另一方面,receive-pack 仍会宣告 ref 指向的对象 ID,而不提及其名称(所谓的 ".have" 行)。

即使您隐藏了 refs,客户端仍可能通过 gitnamespaces[7] man 页的 "SECURITY" 部分所述的技术来窃取目标对象;最好将私有数据保留在单独的存储库中。

transfer.unpackLimit

fetch.unpackLimitreceive.unpackLimit 未设置时,将使用此变量的值。默认值为 100。

transfer.advertiseSID

布尔值。如果为 true,客户端和服务器进程将向其远程对应方广告其唯一的会话 ID。默认为 false。

transfer.bundleURI

如果为 true,本地 git clone 命令将从远程服务器请求 bundle 信息(如果已广告)并在通过 Git 协议继续克隆之前下载 bundle。默认为 false

transfer.advertiseObjectInfo

如果为 true,服务器将广告 object-info 能力。默认为 false。

uploadarchive.allowUnreachable

如果为 true,则允许客户端使用 git archive --remote 请求任何树,无论是否可达自 ref 尖端。有关更多详细信息,请参阅 git-upload-archive[1] 的 "SECURITY" 部分的讨论。默认为 false

uploadpack.hideRefs

此变量与 transfer.hideRefs 相同,但仅适用于 upload-pack(因此仅影响 fetch,不影响 push)。git fetch 尝试 fetch 被隐藏的 ref 将会失败。另请参阅 uploadpack.allowTipSHA1InWant

uploadpack.allowTipSHA1InWant

uploadpack.hideRefs 生效时,允许 upload-pack 接受请求一个被隐藏 ref 尖端的对象的 fetch 请求(默认情况下,此类请求会被拒绝)。另请参阅 uploadpack.hideRefs。即使此选项为 false,客户端仍可能通过 gitnamespaces[7] man 页的 "SECURITY" 部分所述的技术窃取对象;最好将私有数据保留在单独的存储库中。

uploadpack.allowReachableSHA1InWant

允许 upload-pack 接受请求一个可达自任何 ref 尖端的对象的 fetch 请求。但是,请注意,计算对象可达性需要大量计算。默认为 false。即使此选项为 false,客户端仍可能通过 gitnamespaces[7] man 页的 "SECURITY" 部分所述的技术窃取对象;最好将私有数据保留在单独的存储库中。

uploadpack.allowAnySHA1InWant

允许 upload-pack 接受请求任何对象的 fetch 请求。它包含了 uploadpack.allowTipSHA1InWantuploadpack.allowReachableSHA1InWant。如果设置为 true,它将启用两者;如果设置为 false,它将禁用两者。默认未设置。

uploadpack.keepAlive

upload-pack 启动了 pack-objects 时,可能会有一段静默期,在此期间 pack-objects 会准备 pack。通常它会输出进度信息,但如果 fetch 使用了 --quietpack-objects 直到 pack 数据开始才会输出任何内容。某些客户端和网络可能会认为服务器挂起并放弃。设置此选项可指示 upload-pack 每隔 uploadpack.keepAlive 秒发送一个空的 keepalive 包。将此选项设置为 0 会完全禁用 keepalive 包。默认值为 5 秒。

uploadpack.packObjectsHook

如果设置了此选项,当 upload-pack 会运行 git pack-objects 为客户端创建 packfile 时,它将改为运行此 shell 命令。将被运行的 pack-objects 命令及其参数(包括开头的 git pack-objects)将附加到 shell 命令。hook 的 stdin 和 stdout 将被视为 pack-objects 本身被运行。也就是说,upload-pack 将把 intended for pack-objects 的输入馈送到 hook,并期望一个完整的 packfile 在 stdout 上。

请注意,此配置变量仅在受保护的配置中指定时才被尊重(请参阅 SCOPES)。这是一项针对从不受信任的存储库中获取的保护措施。

uploadpack.allowFilter

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

uploadpackfilter.allow

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

uploadpackfilter.<filter>.allow

显式允许或禁止与 <filter> 对应的对象过滤器,其中 <filter> 可以是以下之一:blob:noneblob:limitobject:typetreesparse:oid,或 combine。如果使用组合过滤器,则必须允许 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 功能。此功能旨在为负载均衡的服务器提供便利,这些服务器由于复制延迟可能无法获得对 ref 指向 OID 的相同视图。

url.<base>.insteadOf

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

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

url.<base>.pushInsteadOf

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

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

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

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

user.useConfigOnly

指示 Git 避免尝试猜测 user.emailuser.name 的默认值,而是仅从配置中检索这些值。例如,如果您有多个电子邮件地址并希望为每个存储库使用不同的地址,那么在全局配置中将此配置选项设置为 true,并加上一个名称,Git 将提示您设置一个电子邮件,然后再在新克隆的存储库中创建新提交。默认为 false

user.signingKey

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

versionsort.prereleaseSuffix (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

指定一个 Web 浏览器,某些命令可能会使用它。目前只有 git-instaweb[1]git-help[1] 可能使用它。

worktree.guessRemote

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

worktree.useRelativePaths

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

请注意,将 worktree.useRelativePaths 设置为“true”意味着启用了 extensions.relativeWorktrees 配置(请参阅 git-config[1]),因此它与旧版本的 Git 不兼容。

BUG

当使用已弃用的 [section.subsection] 语法时,更改值将导致添加一个多行键而不是更改,如果子节至少包含一个大写字符。例如,当配置如下所示时

  [section.subsection]
    key = value1

并且运行 git config section.Subsection.key value2 将导致

  [section.subsection]
    key = value1
    key = value2

GIT

Git[1] 套件的一部分