简体中文 ▾ Topics ▾ Latest version ▾ git-config last updated in 2.54.0

名称

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

概述

git config list [<文件选项>] [<展示选项>] [--includes]
git config get [<文件选项>] [<display-option>] [--includes] [--all] [--regexp=<正则表达式>] [--value=<value>] [--fixed-value] [--default=<default>] <名称>
git config set [<文件选项>] [--type=<类型>] [--all] [--value=<value>] [--fixed-value] <名称> <value>
git config unset [<文件选项>] [--all] [--value=<value>] [--fixed-value] <名称> <value>
git config rename-section [<文件选项>] <旧名称> <新名称>
git config remove-section [<文件选项>] <名称>
git config edit [<文件选项>]
git config [<文件选项>] --get-colorbool <名称> [<标准输出是否是终端>]

描述

你可以用这个命令查询/设置/替换/取消选项。名称(name)实际上是用点隔开的节和键,值(value)会被转义。

通过使用 --add 选项,可以为一个选项添加多行。 如果你想更新或取消一个可以出现在多行的选项,需要给出一个 value-pattern (除非给出 --fixed-value 选项,否则这是一个扩展的正则表达式)。 只有符合该模式的现有值被更新或取消设置。 如果你想处理不符合模式的行,只需在前面加上一个感叹号(参见实例),但注意这只在没有使用 --fixed-value 选项时有效。

--type=<类型> 选项指示 git config 确保传入和传出的值在给定的 <类型> 下是可以被规范化的。 如果没有给定 --type=<类型>,将不执行规范化。调用者可以用 --no-type 选项取消现有 --type 选项的指定。

读取配置时,默认从系统、全局和资源库的本地配置文件中读取数值,选项 --system--global--local--worktree--file<文件名> 可以用来告诉命令只从选定的位置读取(见文件)。

写入时,新值默认写入仓库的本地配置文件,选项 --system--global--worktree--file <文件名> 可以用来告诉命令写到那个位置(你可以给出 --local 选项,但是默认选项就是本地(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,也可以是仓库(默认)。

选项

--replace-all

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

--append

不改变任何现有的值的情况下,在选项中增加一个新的行。 这与在 --replace-all 选项中提供 ^$ 作为 value-pattern 是一样的。

-m <信息>

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

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

--all

和 --get 选项类似,但是该选项会返回一个多值键的所有值。

--regexp

像 --get-all 选项一样,但是用正则表达式作为名称,并写出键名。 正则表达式匹配目前是区分大小写的,并且是针对一个规范化的键的版本进行的,其中节 (section) 和变量名称是小写的,但子节名称不是小写的。

--commit-url <地址>

当给定一个由两部分组成的名称 section.key 时,返回 section.<URL>.key 的值,其 <URL> 部分是给定的最相匹配的 URL(如果没有这样的键存在,section.key 的值将作为备用值)。 当只给出 section 的名称时,对 section 中的所有 key 进行处理,并将其列出。 如果没有找到值,返回错误代码 1(section: 节,key:键;在配置文件中是这样的 [section] key=value)。

--global

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

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

另请参见文件

--system

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

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

另请参见文件

--local

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

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

另请参见文件

--worktree

--local 选项类似,只是如果启用了 extensions.worktreeConfig ,则从 $GIT_DIR/config.worktree 读取或写入。如果没有,则与 --local 选项行为相同。注意,对于主工作区, $GIT_DIR 等于 $GIT_COMMON_DIR,但对于其他工作区,它的形式是 $GIT_DIR/worktrees/<id>/。了解如何启用 extensions.worktreeConfig,参见 git-worktree[1]

-f <配置文件>
--file <配置文件>

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

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

另请参见文件

--blob <blob>

类似于 --file 选项,但使用指定的二进制对象而不是文件。例如,你可以使用 master:.gitmodules 来读取主分支中 .gitmodules 文件中的值。参见 gitrevisions[7] 中的 “指定的修正” 部分,以获得更完整的二进制对象名称拼写方式。

--exclude=<模式>
--no-value

getsetunset 模式下,仅匹配 <pattern>。除非给出 --fixed-value,否则该模式为扩展正则表达式。

使用 --no-value 来 unset <pattern>

--fixed-value

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

--type <类型>

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

有效的 <类型> 包括:

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

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

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

  • 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=<类型>--<类型> 选项的情况下没有作用。

-z
--null

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

--name-only

只输出 --list--get-regexp 的配置变量的名称。

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

get 模式下,除了值之外还显示配置键。除非给出 --url<name> 中没有子节,否则默认值为 --no-show-names

--show-origin

用来源类型(文件、标准输入、blob、命令行)和实际来源(配置文件路径、引用或 blob id(如适用))对所有查询到的配置选项的输出进行扩充。

--show-scope

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

--get-colorbool <名称> [<stdout-is-tty>]

找到 <名称> 的颜色设置(例如 color.diff),并输出 "true" 或 "false"。 <stdout-is-tty> 应该是 "true" 或 "false",同样考虑配置为 "auto" 的情况。 如果 <stdout-is-tty> 缺失,则检查命令本身的标准输出,如果要使用颜色则以状态 0 退出,否则以状态 1 退出。 当 名称 的颜色设置未被定义时,该命令使用 color.ui 作为回退(stdout 是 "standard output" 的缩写,而 tty 是 "teletypewriter" 的缩写,通常指的是终端或控制台。)。

--includes
--no-includes

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

--default <值>

当使用 --get 时,如果没有找到所要求的变量,那么表现得就像是该变量被赋予了 <值> 这个值。

弃用说明

以下模式已不再推荐使用,建议改用子命令。推荐迁移到新的语法。

git config <配置名称>

已由 git config get <配置名称> 替代。

git config <配置名称> <值> [<值模式>]

已由 git config set [--value=<模式>] <配置名称> <值> 替代。

-l
--list

已由 git config list 替代。

--get-color <名称> [<默认值>]

已由 git config get [--value=<模式>] <配置名称> 替代。

--get-color <名称> [<默认值>]

已由 git config unset [--value=<模式>] --all <配置名称> 替代。

--extended-regexp

已由 git config get --all --show-names --regexp <名称正则表达式> 替代。

--get-urlmatch <名称> <URL>

已由 git config get --all --show-names --url=<URL> <配置名称> 替代。

--get-color <名称> [<默认值>]

已由 git config get --type=color [--default=<默认值>] <配置名称> 替代。

-c <配置名>=<配置值>

已由 git config set --append <配置名称> <值> 替代。

--get-color <名称> [<默认值>]

已由 git config unset [--value=<模式>] <名称> 替代。

--get-color <名称> [<默认值>]

已由 git config unset [--value=<模式>] --all <配置名称> 替代。

--rename-section <旧配置名称> <新配置名称>

已由 git config rename-section <旧配置名称> <新配置名称> 替代。

--remove-section

已由 git config remove-section <配置名称> 替代。

-e
--edit

已由 git config edit 替代。

配置

pager.config 只在列出配置时被尊重,即在使用 --list 或任何可能返回多个结果的 --get-* 时。 默认情况下是使用 pager。

文件

默认情况下,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 将以非零的错误代码退出。如果文件不可读,会产生一个错误信息,但如果文件丢失,则不会产生错误信息。

文件是按照上述顺序读取的,最后发现的值优先于之前读取的值。 当有多个值时,将使用所有文件中某个键的所有值。

默认情况下,选项只被写入仓库特定的配置文件中。请注意,这也会影响到 --replace-all--unset 等选项。git config 一次只能改变一个文件

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

范围

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

system

$(prefix)/etc/gitconfig

global

$XDG_CONFIG_HOME/git/config

~/.gitconfig

local

$GIT_DIR/config

工作区

$GIT_DIR/config.worktree

命令

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:

#
# 这就是配置文件,并且
# 一个'#' 或 ';' 字符表示
# 一个注释
#

; 核心变量
[core]
	; 不信任文件模式
	filemode = false

; 我们的差异算法
[diff]
	external = /usr/local/bin/diff-wrapper
	rename = true

; 代理设置
[core]
	gitproxy=proxy-command for kernel.org
	gitproxy=default-proxy ; 适用于其他所有网站

; HTTP
[http]
	sslVerify
[http "https://weak.example.com"]
	sslVerify = false
	cookiFile= /tmp/cookie.txt

你可以用以下方法将文件模式设置为真

% git config core.filemode true

假设的代理命令条目实际上有一个后缀来辨别它们适用于什么URL。下面是如何将 kernel.org 的条目改为 "ssh"。

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

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

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

% git config --unset diff.renames

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

要查询一个给定键的值,可以这样做

% git config --get core.filemode

或者,要查询一个多变量:

% git config --get-all core.gitproxy

如果你想知道一个多变量的所有值,可以这么做:

% git config --get-all core.gitproxy

如果你喜欢危险操作,你可以用一个新的 core.gitproxy 来取代 所有 core.gitproxy

% git config --get-all core.gitproxy

然而,如果你真的只想替换默认代理,即没有 "for …​" 后缀的那一行,可以这样做:

% git config --replace-all core.gitproxy ssh

为了真正地只匹配带有感叹号的值,你必须

% git config section.key value '[!]'

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

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

一个例子是在你的脚本中使用配置的自定义颜色:

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

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

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

配置文件

Git 配置文件包含了一些影响 Git 命令行为的变量。每个仓库中的文件 .git/config 和可选的 config.worktree(见git-worktree[1]的 “配置文件” 部分)用于存储该仓库的配置,$HOME/.gitconfig 用于存储每个用户的配置,作为 .git/config 文件的后退值。文件 /etc/gitconfig 可以用来存储全系统的默认配置。

配置变量同时被 Git 底层和上层命令使用。变量被分为几个部分,其中变量本身的完全合格的变量名是最后一个点分隔的部分,而部分名称是最后一个点之前的所有内容。变量名称不区分大小写,只允许使用字母数字字符和 -,并且必须以字母字符开头。 有些变量可能会出现多次;那么我们就说这个变量是多值的。

语法

语法是相当灵活和宽松的;空白处大多被忽略。 #; 字符开始注释到行末,空行被忽略。

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

节可以进一步划分为子节。 要开始一个分节,请将其名称放在双引号中,与节的名称用空格隔开,放在节的标题中,如下面的例子:

	[section "小节"]

分节名称是区分大小写的,可以包含任何字符,除了换行和空字节。双引号 " 和反斜杠可以分别通过转义为 \"\\ 来包含。读取时,其他字符前面的反斜杠将被删除;例如,\t 被读作 t\0 被读作 0。章节标题不能跨越多行。 变量可以直接属于某一节或某一小节。如果你有 [section "小节"],你可以有 [section],但不需要这样。

还有一种废弃的 [section.subsection] 语法。在这种语法中,分节名称被转换为小写字母,并且也会敏感地比较大小写。这些分节名称遵循与章节名称相同的限制。

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

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

在双引号内,双引号 " 和反斜杠 \ 字符必须被转义:用 \" 表示 ",用 \\ 表示 \

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

包括

includeincludeIf 部分允许你从另一个来源包含配置指令。这些部分的行为与其他部分相同,但如果 includeIf 部分的条件没有评估为真,则可以忽略;见下面的 “有条件的包含”。

你可以通过设置特殊的 include.path(或 includeIf.*.path )变量来包含另一个配置文件,即要包含的文件名。该变量将路径名作为其值,并接受 tilde 扩展。这些变量可以被多次赋予。

被包含的文件的内容会被立即插入,就像它们是在 include 指令的位置被发现的一样。如果该变量的值是一个相对路径,则该路径被认为是相对于发现 include 指令的配置文件。 请看下面的例子。

有条件的包括

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

条件以一个关键词开始,后面是冒号和一些数据,其格式和含义取决于关键词。支持的关键词有:

gitdir

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

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

该模式可以包含标准的通配符和两个额外的通配符,**//**,可以匹配多个路径组件。详情请参考 gitignore[5]。为了方便起见:

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

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

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

  • 如果模式以 / 结尾,** 将被自动添加。例如,模式 foo/ 变成 foo/**。换句话说,它匹配 "foo" 和里面的所有内容,是递归的。

gitdir/i

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

onbranch

关键词 onbranch: ` 后面的数据被认为是一个带有标准通配符和两个额外的通配符的模式,**/` 和 /**,可以匹配多个路径组件。 如果我们在一个工作区中,当前检出的分支的名称与该模式相匹配,则满足包含条件。

如果模式以 / 结尾,** 将被自动添加。例如,模式 foo/ 变成 foo/**。换句话说,它匹配所有以 "foo/" 开头的分支。如果你的分支是分层组织的,而你想将一个配置应用于该层级中的所有分支,这就很有用了。

hasconfig:remote.*.url:

这个关键词后面的数据被认为是一个带有标准的通配符和两个额外的通配符的模式,**//**,可以匹配多个组件。第一次看到这个关键词时,其余的配置文件将被扫描以寻找远程 URL(不应用任何值)。如果存在至少一个匹配该模式的远程 URL,则满足包含条件。

由该选项包含的文件(直接或间接)不允许包含远程 URLs。

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

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

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

  • $GIT_DIR 中的符号链接在匹配前没有被解决。

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

    在 v2.13.0 版本中,这个功能的初始版本不是这样的,它只匹配 realpath 版本。想要与这个功能的初始版本兼容的配置,要么只指定 realpath 版本,要么就指定两个版本。

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

示例

# 核心变量
[core]
	; 不信任文件模式
	filemode = false

# 我们的差异算法
[diff]
	external = /usr/local/bin/diff-wrapper
	renames = true

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

# 代理设置
[core]
	gitProxy="ssh" for "kernel.org"
	gitProxy=default-proxy ; 其余为

[include]
	path = /path/to/foo.inc ; 按绝对路径包含
	path = foo.inc ; find "foo.inc" 相对于当前文件
	path = ~/foo.inc ; 在您的 `$HOME` 目录中找到 "foo.inc"

;如果 $GIT_DIR 是 /path/to/foo/.git 就包含
[includeIf "gitdir:/path/to/foo/.git"]
	path = /path/to/foo.inc

;包括 /path/to/group 内的所有仓库
[includeIf "gitdir:/path/to/group/"]
	path = /path/to/foo.inc

; 包括 $HOME/to/group 内的所有仓库
[includeIf "gitdir:~/to/group/"]
	path = /path/to/foo.inc

; 相对路径总是相对于包括
; 文件(如果条件为真);其位置不受
; 的位置不受条件的影响。
[includeIf "gitdir:/path/to/group/"]
	path = foo.inc

; 只有工作区当前检出了 foo-branch
; 才包括
[includeIf "onbranch:foo-branch"] 。
	路径 = foo.inc

; 只有在给定 URL 的远程仓库存在的情况下才包括(注意
; 这样的URL可能在以后的文件中提供,或者在这个文件被读取后的一个
; 文件中提供,正如在这个例子中看到的那样)
[includeIf "hasconfig:remote.*.url:https://example.com/*" ]
	路径 = foo.inc
[remote "origin"]
	url = https://example.com/git

许多变量的值都被当作一个简单的字符串,但有些变量取的是特定类型的值,对于如何拼写它们有一些规则。

布尔

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

布尔真值是 yesontrue`和 `1。 此外,一个没有 = <值> 的变量被认为是真。

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

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

整数

许多指定各种尺寸的变量的值可以以 kM…​为后缀,表示 “以1024为比例的数字”、“以1024x1024为比例”,等等。

color

接受颜色的变量的值是一个颜色(最多两个,一个用于前景,一个用于背景)和属性(你想要多少就有多少)的列表,用空格分隔。

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

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

颜色`default` 明确地将颜色重置为终端的默认值,例如,指定一个清除的背景。虽然不同的终端有差异,但这通常与设置为 "white black" 不一样。

颜色也可以用 0 到 255 之间的数字来表示;这些颜色使用 ANSI 256 色模式(但注意不是所有的终端都支持这个)。 如果你的终端支持,你也可以指定 24 位 RGB 值为十六进制,如 #ff0ab3

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

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

一个空的颜色字符串根本不会产生任何颜色效果。这可以用来避免给特定的元素上色而不完全禁用颜色。

对于 git 的预定义颜色槽,属性是为了在彩色输出的每一项开始时被重置。所以将 color.decorate.branch 设置为 black 会将该分支名称涂成普通的 black,即使同一输出行中的前一个东西(例如`log --decorate`输出中的分支名称列表前的括号)被设置为 bold 或其他属性。 然而,自定义的日志格式可能会做更复杂和分层的着色,而否定的形式在那里可能很有用。

路径名

一个获取路径名值的变量可以被赋予一个以 "~/" 或 "~user/" 开头的字符串,通常的 tilde 扩展会发生在这样一个字符串上: ~/ 被扩展为 $HOME 的值,而 ~user/ 被扩展为指定用户的主目录。

如果一个路径以 %(prefix)/ 开头,其余部分将被解释为相对于 Gi t的 "运行时前缀" 的路径,即相对于 Git 本身安装的位置。例如,%(prefix)/bin/ 指的是 Git 可执行文件本身所在的目录。如果 Git 在编译时不支持运行时前缀,那么编译时的前缀将被替代。在不太可能的情况下,如果需要指定一个不应该被扩展的字面路径,需要以 ./ 为前缀,就像这样: ./%(前缀)/bin

如果前缀为 :(optional),当指定的路径不存在时,将把该配置变量视为不存在。

变量

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

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

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

当某些文件由于索引错误而无法添加时,使用 git add 以继续添加文件。 等同于 git-add[1]--ignore-errors 选项。 add.ignore-errors 已经被弃用, 因为它不符合配置变量的常规命名约定。

Warning

Missing zh_HANS-CN/config/advice.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/alias.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/am.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/apply.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/attr.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/bitmap-pseudo-merge.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/blame.adoc

See original version for this content.

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 覆盖。如果未配置远程,或者当前不在任何分支上且仓库中定义了多个远程,则 fetch 默认使用 origin,push 默认使用 remote.pushDefault。另外,.(句点)表示当前本地仓库(点仓库),见下文 branch.<name>.merge 的最后说明。

branch.<name>.pushRemote

当位于分支 <name> 上时,它会在推送时覆盖 branch.<name>.remote。它也会在从分支 <name> 推送时覆盖 remote.pushDefault。当你从一个地方拉取(例如上游仓库)而向另一个地方推送(例如自己的发布仓库)时,可以使用 remote.pushDefault 指定所有分支默认推送到哪个远程,再用此选项为特定分支覆盖该设置。

branch.<name>.merge

branch.<name>.remote 一起为给定分支定义其上游分支。它告诉 git fetch/git pull/git rebase 应合并哪个分支,也可能影响 git push(见 push.default)。当位于分支 <name> 上时,它告诉 git fetch 哪个默认 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 设为相对路径 .(句点)。

分支 .<名字>.合并操作选项

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

branch.<name>.rebase

为 true 时,在执行 git pull 时会将分支 <name> rebase 到已获取分支之上,而不是从默认远程合并默认分支。若要进行非分支特定设置,参见 pull.rebase

当值为 merges(或简写为 m)时,会向 git rebase 传递 --rebase-merges 选项,从而将本地合并提交也包含在 rebase 中(详见 git-rebase[1])。

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

注意:这可能是一个危险操作;除非你理解其影响,否则不要使用(详见 git-rebase[1])。

branch.<name>.description

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

Warning

Missing zh_HANS-CN/config/browser.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/bundle.adoc

See original version for this content.

checkout.defaultRemote

当你运行 git checkout <something>git switch <something>,且只有一个远程时,它可能会隐式回退为检出并跟踪例如 origin/<something>。但一旦存在多个都带有 <something> 引用的远程,这种做法就不再有效。该设置允许指定一个首选远程名称,在发生歧义时始终优先选择它。典型用法是将其设为 origin

当前,git-switch[1]git-checkout[1] 会在 git checkout <something>git switch <something> 需要检出另一个远程上的 <something> 分支时使用该设置;git-worktree[1] 也会在 git worktree add 引用远程分支时使用它。将来其他类似 checkout 的命令或功能也可能会使用此设置。

checkout.guess

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

checkout.workers

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

Note
并行 checkout 通常能为位于 SSD 或 NFS 上的仓库带来更好的性能。对于位于机械磁盘上的仓库和/或核心数较少的机器,默认的顺序 checkout 往往表现更好。仓库的大小和压缩级别也可能影响并行版本的性能。
checkout.thresholdForParallelism

当对少量文件执行并行 checkout 时,创建子进程和进程间通信的成本可能会超过并行化带来的收益。该设置允许你定义应尝试并行 checkout 的最小文件数。默认值为 100。

Warning

Missing zh_HANS-CN/config/clean.adoc

See original version for this content.

clone.defaultRemoteName

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

clone.rejectShallow

如果是浅层仓库,则拒绝克隆;可以通过在命令行中传递 --reject-shallow 选项来重写。 参见 git-clone[1].

clone.filterSubmodules

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

Warning

Missing zh_HANS-CN/config/color.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/column.adoc

See original version for this content.

commit.cleanup

此设置会覆盖 git commit--cleanup 选项的默认值。See git-commit[1] for details. 当你总是希望在日志消息中保留以注释字符(core.commentChar,默认值为 #)开头的行时,更改默认值会很有用;此时你可以执行 git config commit.cleanup whitespace(注意,如果这样做,你必须自行删除提交日志模板中以该注释字符开头的帮助行)。

commit.gpgSign

布尔值,用于指定是否对所有提交进行 GPG 签名。在进行变基等操作时使用该选项可能会导致大量提交被签名。使用代理可以避免多次键入 GPG 密码。

commit.status

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

commit.template

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

commit.verbose

一个布尔值或 int 值,用于指定 git commit 的详细程度。See git-commit[1] for details.

Warning

Missing zh_HANS-CN/config/commitgraph.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/completion.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/core.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/credential.adoc

See original version for this content.

diff.autoRefreshIndex

在使用 git diff 与工作区文件进行比较时,不要将仅统计信息的更改视为已更改。取而代之的是静默运行 git update-index --refresh 来更新工作区中内容与索引中内容匹配的路径的缓存统计信息。该选项默认为 true。请注意,这只会影响 git diff 命令,而不会影响更低级的 diff 命令,比如 git diff-files

diff.dirstat

逗号分隔的 --dirstat 参数列表,用于定义 git diff (见 Git 文档中的 git-diff[1] 部分) 及其相关命令中 --dirstat 选项的默认工作方式 这些参数决定了在执行差异比较时,如何统计和展示目录变化的信息。 以逗号分隔的 --dirstat 参数列表,用于指定 git-diff[1] 和友集的 --dirstat 选项的默认行为。 默认值可以在命令行中覆盖(使用 --dirstat=<参数1,参数2,...>)。 后备默认值(当 diff.dirstat 没有更改时)是 changes,noncumulative,3 。 以下参数可用:

changes

通过计算从源文件中删除的行数或添加到目标文件中的行数来计算分布状态的数字。这忽略了文件内的代码移动行为。也就是说,在文件中重新排列的行不会像其他变化一样被计算在内。这是在没有给出参数时的默认行为。

lines

通过做常规基于行的差异分析,计算分布状态的数字,并将删除/添加的行数相加。(对于二进制文件,用 64 字节的块来计算,因为二进制文件没有行的概念)。在使用 --dirstat 时这个选项的行为开销比 changes 更大,但会对文件中重新排列的行进行计数。其得到的输出结果与其他的 --*stat 选项一致。

files

通过计算被改变的文件数量来计算分布状态的数字。在分布状态分析中,每一个被改变的文件都会被平等地计算。这是计算上开销最小的 --dirstat 行为,因为它无需查看文件内容。

cumulative

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

<limit>

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

例如:下面的参数会统计更改的文件,同时忽略占更改文件总数 10% 以下的目录,并累积父目录中的子目录计数:files,10,cumulative

diff.statNameWidth

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

diff.statGraphWidth

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

diff.context

生成 <n> 行上下文差异,而不是默认的 3 行。 该值由 -U 选项覆盖。

diff.interHunkContext

显示 diff hunk 之间的上下文,行数不超过指定行数,从而合并彼此相近的 hunk。此值是 --inter-hunk-context 命令行选项的默认值。

diff.external

如果设置了该配置变量,则不会使用内部 diff 机制生成 diff,而是使用给定的命令。可以用 GIT_EXTERNAL_DIFF 环境变量来覆盖。该命令的参数调用方式与 git[1] 中 "git Diffs" 一节所述相同。注意:如果只想在部分文件上使用外部差异程序,可以用 gitattributes[5] 代替。

diff.trustExitCode

如果这个布尔值设置为 true,那么 diff.external 命令被期望在认为输入文件相等时返回退出码 0,在认为它们不同时返回退出码 1,类似于 diff(1)。如果它被设置为默认值 false,那么期望该命令无论文件是否相等都返回退出码 0。任何其他的退出码都会导致 Git 报告一个致命错误。

diff.ignoreSubmodules

设置 --ignore-submodules 的默认值。请注意,这只会影响上层命令 git diff,而不会影响更底层的 diff 命令,如 git diff-filesgit checkoutgit switch 在报告未提交的改动时也会尊重这一设置。如果将其设置为 all,则 git commitgit status 在设置 status.submoduleSummary 时通常会显示子模块摘要,除非使用 --ignore-submodules 命令行选项将其覆盖。git submodule 命令不受此设置影响。默认设置为 untracked,因此任何未跟踪的子模块都会被忽略。

diff.mnemonicPrefix

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

git diff

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

git diff HEAD

比较(c)提交(w)工作区;

git diff --cached

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

git diff HEAD:<文件 1> <文件 2>

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

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

比较了两个非 git 项目 <a><b>

diff.noPrefix

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

diff.srcPrefix

如果设置了,git diff 使用指定的源前缀。否则,默认为 a/

diff.dstPrefix

如果设置了,git diff 使用指定的目标前缀。否则,默认是 b

diff.relative

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

diff.orderFile

该文件定义了在 git diff 命令的输出中如何对文件进行排序。 详情参见 git-diff[1]-O 选项。 如果 diff.orderFile 是相对路径名,则将其视为 相对于工作区顶层的路径。

diff.renameLimit

在复制/重命名检测的穷举阶段要考虑的文件数量;等同于 git diff-l 选项。如果未设置,当前默认值为 1000。若已关闭重命名检测,则此设置不起作用。

diff.renames

Git 是否以及如何检测重命名。如果设为 false,则禁用重命名检测;设为 true,则启用基础的重命名检测;设为 copiescopy 时,Git 还会检测副本。默认值为 true。注意,这只影响如 git-diff[1]git-log[1] 这样的 git diff Porcelain 命令,而不影响如 git-diff-files[1] 这样的底层命令。

diff.suppressBlankEmpty

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

diff.submodule

指定子模块差异的显示格式。short 格式只显示范围开头和结尾的提交名称;log 格式像 git-submodule[1]summary 那样列出范围内的提交;diff 格式显示子模块变更内容的内联 diff。默认值为 short

diff.wordRegex

POSIX 扩展正则表达式,用于在进行逐字差异计算时确定什么是 "字"。符合正则表达式的字符序列为 "字",所有其他字符均为 不可忽略的 空白。

diff.<驱动程序>.command

自定义的 diff 驱动命令。详见 gitattributes[5]

diff.<驱动程序>.textconv

如果这个布尔值设置为 true,那么 diff.<驱动程序>.command 命令被期望在认为输入文件相等时返回退出码 0,在认为它们不同时返回退出码 1,类似于 diff(1)。如果它被设置为 false,这是默认值,那么期望该命令无论文件是否相等都返回退出码 0。任何其他的退出码都会导致 Git 报告一个致命错误。

diff.<驱动程序>.xfuncname

正则表达式,diff 驱动程序应使用该正则表达式识别块状头。也可以使用内置模式。详见 gitattributes[5]

diff.<驱动程序>.binary

将此选项设为 true,可使 diff 驱动程序将文件视为二进制文件。详情参见 gitattributes[5]

diff.<驱动程序>.textconv

diff 驱动程序为生成文件的文本转换版本而调用的命令。转换结果用于生成易读形式的 diff 结果。详见 gitattributes[5]

diff.<驱动程序>.wordRegex

正则表达式,diff 驱动程序应使用它来分割一行中的单词。详见 gitattributes[5]

diff.<驱动程序>.cachetextconv

将此选项设为 true 可使 diff 驱动程序缓存文本转换输出。详见 gitattributes[5]

diff.indentHeuristic

将此选项设为 false,可禁用默认的启发式方法,该方法会移动差异块边界,使补丁更容易读取。

diff.algorithm

选择差异算法。有如下可选项:

default
myers

基本的贪婪差异算法。当前是默认设置。

minimal

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

patience

使用 "patience diff" 算法时产生的补丁。

histogram

该算法将耐心算法扩展为 “支持低发生率的常见元素”。

diff.wsErrorHighlight

高亮显示 diff 的 contextoldnew 行中的空白错误。多个值用逗号分隔,none 重置以前的值,default 重置为 newallold,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

Warning

Missing zh_HANS-CN/config/difftool.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/extensions.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/fastimport.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/feature.adoc

See original version for this content.

fetch.recurseSubmodules

该选项控制 git fetch(以及 git pull 底层执行的 fetch)是否会递归获取已填充的子模块。它可以设置为布尔值或 on-demand。设为布尔值时,true 表示 fetch 和 pull 会无条件递归进入子模块,false 表示完全不递归。设为 on-demand 时,仅当超级项目获取到了更新子模块引用的提交时,fetch 和 pull 才会递归进入已填充的子模块。默认值为 on-demand;如果设置了 submodule.recurse,则默认取其值。

fetch.fsckObjects

如果设为 true,git-fetch-pack 会检查所有获取到的对象。检查内容见 transfer.fsckObjects。默认值为 false。如果未设置,则改用 transfer.fsckObjects 的值。

fetch.fsck.<msg-id>

其行为类似于 fsck.<msg-id>,但由 git-fetch-pack[1] 使用,而不是 git-fsck[1]。详情见 fsck.<msg-id> 的文档。

fetch.fsck.skipList

其行为类似于 fsck.skipList,但由 git-fetch-pack[1] 使用,而不是 git-fsck[1]。详情见 fsck.skipList 的文档。

fetch.unpackLimit

如果通过 Git 原生传输获取的对象数量低于该限制,则这些对象会被解包为松散对象文件。但如果接收对象数量等于或超过该限制,则在补齐缺失的 delta 基对象之后,会将收到的 pack 作为 pack 存储。将 push 收到的 pack 直接存储为 pack 可使 push 更快完成,尤其是在较慢的文件系统上。如果未设置,则改用 transfer.unpackLimit 的值。

fetch.prune

如果为 true,fetch 会自动表现得如同命令行提供了 --prune 选项。另见 remote.<name>.prunegit-fetch[1] 的 PRUNING 章节。

fetch.pruneTags

如果为 true,且尚未设置相关 refspec,则 fetch 在 prune 时会自动表现得如同提供了 refs/tags/*:refs/tags/* 这个 refspec。这样可以同时设置该选项和 fetch.prune,以保持与上游 ref 的 1:1 映射。另见 remote.<name>.pruneTagsgit-fetch[1] 的 PRUNING 章节。

fetch.all

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

fetch.output

控制 ref 更新状态的打印方式。有效值为 fullcompact。默认值为 full。详情参见 git-fetch[1] 的 OUTPUT 章节。

fetch.negotiationAlgorithm

控制在协商服务器要发送的 packfile 内容时,如何发送本地仓库中提交的信息。设为 consecutive 时,使用遍历连续提交并逐个检查的算法。设为 skipping 时,使用跳过部分提交以更快收敛的算法,但可能产生比必要更大的 packfile;设为 noop 则完全不发送任何信息,这几乎肯定会导致 packfile 大于必要大小,但会跳过协商步骤。设为 default 可覆盖先前的设置并使用默认行为。默认通常为 consecutive,但若 feature.experimentaltrue,则默认值为 skipping。未知值会导致 git fetch 报错退出。

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

fetch.showForcedUpdates

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

fetch.parallel

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

值为 0 时会给出某个合理的默认值。若未设置,则默认值为 1。

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

fetch.writeCommitGraph

设为 true 时,在每次 git fetch 从远程下载 pack-file 后都写入 commit-graph。使用 --split 选项时,大多数执行只会在现有 commit-graph 文件之上创建一个很小的 commit-graph 文件。偶尔这些文件会合并,写入时间可能更长。保持 commit-graph 文件为最新有助于提升许多 Git 命令的性能,包括 git merge-basegit push -fgit log --graph。默认值为 false

fetch.bundleURI

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

如果你修改了此值,且仓库中存在 fetch.bundleCreationToken 值,那么在从新的 bundle URI 获取之前,请先删除该 fetch.bundleCreationToken 值。

fetch.bundleCreationToken

当使用 fetch.bundleURI 从采用 "creationToken" 启发式的 bundle 列表进行增量获取时,该配置值会保存已下载 bundle 的最大 creationToken 值。如果后续通告的 creationToken 不严格大于该值,则会利用此值阻止再次下载这些 bundle。

creation token 的值由提供该 bundle URI 的服务方决定。如果你修改了 fetch.bundleURI 中的 URI,那么在获取之前务必删除 fetch.bundleCreationToken 的值。

Warning

Missing zh_HANS-CN/config/filter.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/format.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/fsck.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/fsmonitor--daemon.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/gc.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/gitcvs.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/gitweb.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/gpg.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/grep.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/gui.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/guitool.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/help.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/http.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/i18n.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/imap.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/includeif.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/index.adoc

See original version for this content.

init.templateDir

指定将要复制模板的目录。(See the "TEMPLATE DIRECTORY" section of git-init[1].)

init.defaultBranch

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

init.defaultObjectFormat

允许覆写新仓库的对象格式。参见 git-init[1] 中的 --object-format=。并且,命令行选项和环境变量 GIT_DEFAULT_HASH 都优先于该配置。

init.defaultRefFormat

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

init.defaultSubmodulePathConfig

一个布尔值,指定 git initgit clone 是否应自动将 extensions.submodulePathConfig 设置为 true。这允许所有新仓库自动使用子模块路径扩展。未设置时默认为 false

Warning

Missing zh_HANS-CN/config/instaweb.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/interactive.adoc

See original version for this content.

log.abbrevCommit

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

log.date

log 命令设置默认的日期时间模式。为 log.date 设置值,类似于为 git log 使用 --date 选项。详见 git-log[1]

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

log.decorate

打印 log 命令显示的各个提交的 ref 名称。可取值包括:

short

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

full

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

auto

如果输出将发往终端,则按给出 short 时的方式显示 ref 名称;否则不显示 ref 名称。

git-log[1]--decorate 选项相似。

log.initialDecorationSet

默认情况下,git log 只会显示某些已知 ref 命名空间的修饰信息。如果指定为 all,则将所有 ref 都显示为修饰信息。

log.excludeDecoration

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

log.diffMerges

设置在指定 --diff-merges=on 时使用的 diff 格式。详见 git-log[1] 中的 --diff-merges。默认值为 separate

log.follow

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

log.graphColors

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

log.showRoot

如果为 true,则会将初始提交显示为一个重大的创建事件。这等价于与空树进行 diff。像 git-log[1]git-whatchanged[1] 这样通常会隐藏根提交的工具,此时也会显示它。默认值为 true。

log.showSignature

如果为真,则使 git-log[1]git-show[1]git-whatchanged[1] 默认应用 --show-signature 选项。

log.mailmap

如果为真,则使 git-log[1]git-show[1]git-whatchanged[1] 默认应用 --use-mailmap 选项,否则使其默认应用 --no-use-mailmap 选项。默认为真。

Warning

Missing zh_HANS-CN/config/lsrefs.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/mailinfo.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/mailmap.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/maintenance.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/man.adoc

See original version for this content.

merge.conflictStyle

指定合并时将冲突块写入工作区树文件的样式。 默认样式是 "merge"(合并),它会显示一个 <<<<<<< 冲突标记、一方所做的更改、一个 ======= 标记、另一方所做的更改,然后是一个 >>>>>>> 标记。 另一种样式 "diff3" 会在 "=======" 标记前添加 "|||||||" 标记和原文。 “合并” 样式产生的冲突区域往往比 diff3 小,一是因为不包含原始文本,二是因为当双方有子集行匹配时,这些行会被从冲突区域中拉出。 另一种样式是 "zdiff3",它与 diff3 类似,但会在冲突区域的开头或结尾附近出现匹配行时,将这些匹配行从冲突区域中移除。

merge.defaultToUpstream

如果调用 merge 时没有任何提交参数,则通过使用存储在其远程跟踪分支中的最后观察值来合并为当前分支配置的上游分支。 branch.<当前分支>.merge 的值会被查阅,这些值命名了由 branch.<当前分支>.remote 命名的远程分支,然后通过 remote.<远程仓库>.fetch 将它们映射到相应的远程跟踪分支,并合并这些跟踪分支的提示。默认为 true。

merge.ff

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

merge.verifySignatures

如果为真,这等同于 --verify-signatures 命令行选项。详见 git-merge[1]

merge.branchdesc

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

merge.log

除了分支名称外,在日志信息中最多加入指定数量的被合并的实际提交的单行描述。 默认为 false,true 是2 0 的同义词。

merge.suppressDest

通过向这个多值配置变量添加一个匹配集成分支名称的通配符,为合并到这些集成分支计算的默认合并消息将在其标题中省略 "into <分支名>"。

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

merge.renameLimit

合并过程中重命名检测穷举部分要考虑的文件数量。 如果未指定,默认值为 diff.renameLimit 的值。 如果既未指定 merge.renameLimit 也未指定 diff.renameLimit,则默认值为 7000。 如果重命名检测已关闭,则此设置无效。

merge.renames

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

merge.directoryRenames

Git 是否检测目录重命名。这会影响这样一种情况在合并时的处理方式:历史的一侧向某个目录新增了文件,而该目录在历史的另一侧被重命名。可取值包括:

false

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

true

启用目录重命名检测,这意味着此类新文件会被移入新目录。

conflict

对此类路径会报告冲突。

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

merge.renormalize

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

merge.stat

指定在合并结束时,在 ORIG_HEAD 与合并结果之间打印什么内容(如果要打印的话)。可取值包括:

false

不显示任何内容。

true

显示 git diff --diffstat --summary ORIG_HEAD

compact

显示 git diff --compact-summary ORIG_HEAD

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

merge.autoStash

当设置为 "true "时,在操作开始前自动创建一个临时的贮藏库条目,并在操作结束后应用它。 这意味着你可以在一个肮脏的工作区上运行merge。 然而,要小心使用:在成功的合并之后,最后的贮藏库应用可能会导致非实质性的冲突。 这个选项可以被 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变量。

Warning

Missing zh_HANS-CN/config/{build_dir}/mergetools-merge.adoc

See original version for this content.

merge.verbosity

控制递归合并策略所显示的输出量。 0级除了在检测到冲突时有一个最终的错误信息外,什么都不输出。1级只输出冲突,2级输出冲突和文件变化。 5级及以上输出调试信息。 默认是第2级。 可以通过`GIT_MERGE_VERBOSITY`环境变量覆盖。

合并.<driver>.name

为自定义的低级合并驱动定义了一个具有可读性的名字。 详情见 gitattributes[5]

merge.<driver>.driver

定义实现自定义低级合并驱动程序的命令。详见链接 gitattributes[5]

merge.<驱动程序>.recursive

在执行共同祖先之间的内部合并时,命名一个低级别的合并驱动。 详情见 gitattributes[5]

mergetool.<tool>.path

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

mergetool.<tool>.cmd

指定调用该 merge 工具的命令。该命令会在 shell 中求值,并可使用下列变量:BASE 是一个临时文件名,包含待合并文件的共同基础(如果有);LOCAL 是一个临时文件名,包含当前分支上该文件的内容;REMOTE 是一个临时文件名,包含正在合并的分支中该文件的内容;MERGED 包含 merge 工具应写入成功合并结果的文件名。

mergetool.<tool>.hideResolved

允许用户为特定工具覆盖全局 mergetool.hideResolved 的值。完整说明见 mergetool.hideResolved

mergetool.<tool>.trustExitCode

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

mergetool.meld.hasOutput

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

mergetool.meld.useAutoMerge

给出 --auto-merge 时,meld 会自动合并所有无冲突部分,高亮冲突部分,并等待用户决策。将 mergetool.meld.useAutoMerge 设为 true 会告诉 Git 无条件对 meld 使用 --auto-merge 选项。将其设为 auto 会让 git 检测是否支持 --auto-merge,并仅在可用时使用该选项。值为 false 则完全避免使用 --auto-merge,这也是默认值。

mergetool.<variant>.layout

为 vimdiff 的 <variant> 配置分屏窗口布局,<variant> 可以是 vimdiffnvimdiffgvimdiff 中的任意一种。以 --tool=<variant> 启动 git mergetool 时(如果 merge.tool 已配置为 <variant>,也可不带 --tool),Git 会查阅 mergetool.<variant>.layout 来确定该工具的布局。如果没有对应 variant 的专用配置,则回退使用 vimdiff 的配置;如果这也不可用,则使用一个默认的 4 窗口布局。关于如何配置布局,参见“BACKEND SPECIFIC HINTS” git-mergetool[1] 中的该节。

mergetool.hideResolved

在合并期间,Git 会自动尽可能多地解决冲突,并写出 $MERGED 文件,在其无法解决的冲突周围保留冲突标记;$LOCAL$REMOTE 通常是 Git 进行冲突解决之前的文件版本。该标志会覆盖 $LOCAL$REMOTE,使 merge 工具只看到未解决的冲突。可通过 mergetool.<tool>.hideResolved 配置变量按工具分别配置。默认值为 false

mergetool.keepBackup

执行 merge 后,带冲突标记的原始文件可保存为一个带 .orig 扩展名的文件。如果该变量设为 false,则不保留该文件。默认值为 true(即保留备份文件)。

mergetool.keepTemporaries

调用自定义 merge 工具时,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

笔记.合并策略

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

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

笔记.<名称>.合并策略

当进行笔记合并到 refs/notes/<name> 时,选择哪种合并策略。 这覆盖了更一般的 notes.mergeStrategy。 关于每个可用策略的更多信息,请参见 git-notes[1] 的 "NOTES MERGE STRATEGIES" 部分。

笔记.displayRef

除了由 core.notesRefGIT_NOTES_REF 设置的默认值外,在使用 git log 系列命令显示提交信息时,还应从哪个 ref(如果使用 glob 或指定多次,则为哪些 ref)中读取注释。

该设置可由 GIT_NOTES_DISPLAY_REF 环境变量覆盖;其值必须是一个以冒号分隔的 ref 或 glob 列表。

对于不存在的 refs 将会发出警告,但是不匹配任何 refs 的 glob 会被默默地忽略。

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

core.notesRef 的实际值(可能被 GIT_NOTES_REF 覆盖)也会被隐式加入到要显示的 ref 列表中。

notes.rewrite.<command>

当使用 <command>(当前为 amendrebase)重写提交时,如果该变量为 false,git 将不会把注释从原始提交复制到重写后的提交。默认值为 true。另见下文的 notes.rewriteRef

该设置可由 GIT_NOTES_REWRITE_REF 环境变量覆盖;其值必须是一个以冒号分隔的 ref 或 glob 列表。

notes.rewriteMode

在重写过程中复制注释时(参见 notes.rewrite.<command> 选项),用于决定如果目标提交已经有注释时该怎么做。其值必须为 overwriteconcatenatecat_sort_uniqignore 之一。默认值为 concatenate

这个设置可以用`GIT_NOTES_REWRITE_MODE`环境变量覆盖。

notes.rewriteRef

在重写过程中复制注释时,指定应复制其注释的(完全限定)ref。也可以是 glob,此时会复制所有匹配 ref 中的注释。你也可以多次指定该配置。

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

可由 GIT_NOTES_REWRITE_REF 环境变量覆盖。其格式的更多说明见上文 notes.rewrite.<command>

Warning

Missing zh_HANS-CN/config/pack.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/pager.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/pretty.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/promisor.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/protocol.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/pull.adoc

See original version for this content.

push.autoSetupRemote

若设为 true,当当前分支尚无上游跟踪分支时,默认 push 会假定带上 --set-upstream;该选项在 push.defaultsimpleupstreamcurrent 时生效。若你希望新分支默认推送到默认远程(类似 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 时,所有推送都会进行 GPG 签名,效果等同于向 git-push[1] 传入 --signed。值为 if-asked 时,若服务器支持则对推送进行签名,效果等同于向 git push 传入 --signed=if-asked。值为 false 可覆盖来自更低优先级配置文件的设置。命令行显式标志总会覆盖此配置选项。

push.pushOption

当命令行未给出任何 --push-option=<option> 参数时,git push 的行为就像为本变量中的每个 <option> 都提供了 --push-option=<option> 一样。

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

例如:

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

~/.gitconfig
  push.pushoption = c

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

这将导致只剩下 b(a 和 c 被清除)。
push.recurseSubmodules

可以是 checkon-demandonlyno,其行为与 push --recurse-submodules 相同。若未设置,则默认使用 no,除非设置了 submodule.recurse(此时值为 true 表示 on-demand)。

push.useForceIfIncludes

若设为 true,等同于在命令行中为 git-push[1] 指定 --force-if-includes 选项。在 push 时添加 --no-force-if-includes 会覆盖此配置。

push.negotiate

若设为 true,则在客户端和服务器尝试找出共同提交的多轮协商过程中,尝试减小发送的 packfile 大小。若为 false,Git 将仅依赖服务器的 ref 通告来查找共同提交。

push.useBitmaps

若设为 false,则即使 pack.useBitmapstrue,也会禁用 git push 对 bitmap 的使用,但不会 阻止其他 git 操作使用 bitmap。默认值为 true

rebase.backend

rebase 默认使用的后端。可选值为 applymerge。将来如果 merge 后端获得 apply 后端剩余的全部能力,该设置可能会变得无用。

rebase.stat

显示上次变基后上游变化的差异状态。差异状态也由配置选项 rebase.stat 控制。

rebase.autoSquash

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

rebase.autoStash

当设为 true 时,会在操作开始前自动创建一个临时 stash 条目,并在操作结束后重新应用它。这意味着你可以在脏工作区上运行 rebase。不过请谨慎使用:成功 rebase 之后最后一次应用 stash 可能会导致并不简单的冲突。该选项可由 git-rebase[1]--no-autostash--autostash 选项覆盖。默认值为 false。

rebase.updateRefs

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

rebase.missingCommitsCheck

如果设为 "warn",当某些提交被移除时(例如删除了一行),git rebase -i 会打印警告,但 rebase 仍会继续。如果设为 "error",则会打印前述警告并停止 rebase,此时可使用 git rebase --edit-todo 来纠正错误。如果设为 "ignore",则不做检查。若要在不产生警告或错误的情况下丢弃某个提交,请在 todo 列表中使用 drop 命令。默认值为 "ignore"。

rebase.instructionFormat

一个按 git-log[1] 所规定的格式字符串,用于交互式 rebase 期间的 todo 列表。该格式会自动在前面附加提交哈希。

rebase.abbreviateCommands

如果设为 true,git rebase 会在 todo 列表中使用缩写命令名,结果类似于:

p deadbee 本次提交的一行说明
p fa1afe1 下一次提交的一行说明
...

而不是:

pick deadbee 本次提交的一行说明
pick fa1afe1 下一次提交的一行说明
...

默认值为 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 文件)。

Warning

Missing zh_HANS-CN/config/receive.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/reftable.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/remote.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/remotes.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/repack.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/rerere.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/revert.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/safe.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/sendemail.adoc

See original version for this content.

sequence.editor

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

Warning

Missing zh_HANS-CN/config/showbranch.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/sparse.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/splitindex.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/ssh.adoc

See original version for this content.

stash.index

如果设为 true,git stash applygit stash pop 的行为将如同提供了 --index。默认值为 false。 参见 git-stash[1] 中的说明。

这也会影响通过 --autostash 间接调用 git-stash[1] 的情况,例如来自 git-merge[1]git-rebase[1]git-pull[1] 的调用。

stash.showIncludeUntracked

如果设为 true,则 git stash show 命令会显示 stash 条目中的未跟踪文件。默认值为 false。See the description of the 'show' command in git-stash[1].

stash.showPatch

如果设为 true,则不带选项的 git stash show 命令会以 patch 形式显示 stash 条目。默认值为 false。See the description of the 'show' command in git-stash[1].

stash.showStat

如果设为 true,则不带选项的 git stash show 命令会显示 stash 条目的 diffstat。默认值为 true。See the description of the 'show' command in git-stash[1].

Warning

Missing zh_HANS-CN/config/status.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/submodule.adoc

See original version for this content.

tag.forceSignAnnotated

一个布尔值,用于指定创建的附注标签是否应进行 GPG 签名。如果在命令行中指定了 --annotate,则它优先于此选项。

tag.sort

该变量控制 git-tag[1] 显示标签时的排序顺序。 如果未提供 --sort=<value> 选项,则此变量的值将被用作默认值。

tag.gpgSign

一个布尔值,用于指定是否对所有标签进行 GPG 签名。在自动化脚本中使用该选项可能会导致大量标签被签名。因此,使用 agent 来避免多次输入 GPG 密码会更方便。注意,此选项不会影响由 -u <keyid>--local-user=<keyid> 选项启用的标签签名行为。

Warning

Missing zh_HANS-CN/config/tar.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/trace2.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/trailer.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/transfer.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/uploadarchive.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/uploadpack.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/url.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/user.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/versionsort.adoc

See original version for this content.

Warning

Missing zh_HANS-CN/config/web.adoc

See original version for this content.

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 不兼容。

漏洞

当使用废弃的 [section.subsection] 语法时,如果 subsection 至少有一个大写字母,改变一个值将导致添加一个多行键而不是改变。例如,有以下配置

  [section.subsection]
    key = value1

并运行 git config section.Subsection.key value2 将导致如下的结果

  [section.subsection]
    key = value1
    key = value2

GIT

属于 git[1] 文档