Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
-
2.54.0
2026-04-20
-
2.53.0
2026-02-02
-
2.52.0
2025-11-17
-
2.51.2
2025-10-27
-
2.51.1
2025-10-15
-
2.51.0
2025-08-18
- 2.50.1 no changes
-
2.50.0
2025-06-16
- 2.49.1 no changes
-
2.49.0
2025-03-14
- 2.48.2 no changes
-
2.48.1
2025-01-13
-
2.48.0
2025-01-10
- 2.47.3 no changes
-
2.47.2
2024-11-26
-
2.47.1
2024-11-25
-
2.47.0
2024-10-06
- 2.46.4 no changes
-
2.46.3
2024-11-26
-
2.46.2
2024-09-23
-
2.46.1
2024-09-13
-
2.46.0
2024-07-29
- 2.45.4 no changes
-
2.45.3
2024-11-26
- 2.45.1 → 2.45.2 no changes
-
2.45.0
2024-04-29
- 2.44.4 no changes
-
2.44.3
2024-11-26
- 2.44.1 → 2.44.2 no changes
-
2.44.0
2024-02-23
- 2.43.7 no changes
-
2.43.6
2024-11-26
- 2.43.2 → 2.43.5 no changes
-
2.43.1
2024-02-09
-
2.43.0
2023-11-20
-
2.42.4
2024-11-26
- 2.42.2 → 2.42.3 no changes
-
2.42.1
2023-11-02
-
2.42.0
2023-08-21
-
2.41.3
2024-11-26
- 2.41.1 → 2.41.2 no changes
-
2.41.0
2023-06-01
-
2.40.4
2024-11-26
- 2.40.1 → 2.40.3 no changes
-
2.40.0
2023-03-12
- 2.39.1 → 2.39.5 no changes
-
2.39.0
2022-12-12
- 2.38.3 → 2.38.5 no changes
-
2.38.2
2022-12-11
-
2.38.1
2022-10-07
-
2.38.0
2022-10-02
- 2.37.5 → 2.37.7 no changes
-
2.37.4
2022-10-06
- 2.37.3 no changes
-
2.37.2
2022-08-11
- 2.37.1 no changes
-
2.37.0
2022-06-27
- 2.36.4 → 2.36.6 no changes
-
2.36.3
2022-10-06
-
2.36.2
2022-06-23
- 2.36.1 no changes
-
2.36.0
2022-04-18
- 2.35.6 → 2.35.8 no changes
-
2.35.5
2022-10-06
-
2.35.4
2022-06-23
-
2.35.3
2022-04-13
-
2.35.2
2022-03-23
- 2.35.1 no changes
-
2.35.0
2022-01-24
- 2.34.6 → 2.34.8 no changes
-
2.34.5
2022-10-06
-
2.34.4
2022-06-23
-
2.34.3
2022-04-13
-
2.34.2
2022-03-23
- 2.34.1 no changes
-
2.34.0
2021-11-15
- 2.33.6 → 2.33.8 no changes
-
2.33.5
2022-10-06
-
2.33.4
2022-06-23
-
2.33.3
2022-04-13
-
2.33.2
2022-03-23
-
2.33.1
2021-10-12
-
2.33.0
2021-08-16
- 2.32.5 → 2.32.7 no changes
-
2.32.4
2022-10-06
-
2.32.3
2022-06-23
-
2.32.2
2022-04-13
-
2.32.1
2022-03-23
-
2.32.0
2021-06-06
- 2.31.6 → 2.31.8 no changes
-
2.31.5
2022-10-06
-
2.31.4
2022-06-23
-
2.31.3
2022-04-13
-
2.31.2
2022-03-23
-
2.31.1
2021-03-26
-
2.31.0
2021-03-15
- 2.30.7 → 2.30.9 no changes
-
2.30.6
2022-10-06
-
2.30.5
2022-06-23
-
2.30.4
2022-04-13
-
2.30.3
2022-03-23
- 2.30.2 no changes
-
2.30.1
2021-02-08
-
2.30.0
2020-12-27
- 2.29.1 → 2.29.3 no changes
-
2.29.0
2020-10-19
- 2.28.1 no changes
-
2.28.0
2020-07-27
- 2.27.1 no changes
-
2.27.0
2020-06-01
- 2.26.1 → 2.26.3 no changes
-
2.26.0
2020-03-22
- 2.25.3 → 2.25.5 no changes
-
2.25.2
2020-03-17
-
2.25.1
2020-02-17
-
2.25.0
2020-01-13
- 2.24.1 → 2.24.4 no changes
-
2.24.0
2019-11-04
- 2.23.1 → 2.23.4 no changes
-
2.23.0
2019-08-16
- 2.22.2 → 2.22.5 no changes
-
2.22.1
2019-08-11
-
2.22.0
2019-06-07
- 2.21.1 → 2.21.4 no changes
-
2.21.0
2019-02-24
- 2.20.1 → 2.20.5 no changes
-
2.20.0
2018-12-09
- 2.19.3 → 2.19.6 no changes
-
2.19.2
2018-11-21
- 2.19.1 no changes
-
2.19.0
2018-09-10
- 2.18.1 → 2.18.5 no changes
-
2.18.0
2018-06-21
- 2.17.1 → 2.17.6 no changes
-
2.17.0
2018-04-02
-
2.16.6
2019-12-06
-
2.15.4
2019-12-06
-
2.14.6
2019-12-06
-
2.13.7
2018-05-22
-
2.12.5
2017-09-22
-
2.11.4
2017-09-22
-
2.10.5
2017-09-22
-
2.9.5
2017-07-30
-
2.8.6
2017-07-30
-
2.7.6
2017-07-30
-
2.6.7
2017-05-05
-
2.5.6
2017-05-05
-
2.4.12
2017-05-05
-
2.3.10
2015-09-28
-
2.2.3
2015-09-04
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
概述
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 -
在
get、set和unset模式下,仅匹配 <pattern>。除非给出--fixed-value,否则该模式为扩展正则表达式。使用
--no-value来 unset <pattern>。 - --fixed-value
-
当与
value-pattern参数一起使用时,将value-pattern视为精确的字符串,而不是正则表达式。这将使得被匹配的名称/值对只有那些值与value-pattern完全相等的名称/值对。 - --type <类型>
-
git config 将确保任何输入或输出在给定的类型约束下是有效的,并将以 <类型> 的规范形式将输出的值规范化。
有效的 <类型> 包括:
-
bool:将
true、yes、on和正数规范化为 "true",将false、no、off和0规范化为 "false"。 -
int:将数值规范化为简单的十进制数字。可选的后缀 k、m 或 'g’将导致输入的值被乘以 1024、1048576 或 1073741824。
-
bool-or-int:如上所述,根据 bool '或 'int 进行规范化。
-
path:通过在
$HOME和~user的值中添加前导~来规范化指定用户的主目录。在设置值时,该说明符没有任何作用(但可以在命令行中使用gitconfigsection.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 <配置名称>
-
已由
gitconfigget<配置名称> 替代。 - git config <配置名称> <值> [<值模式>]
-
已由
gitconfigset[--value=<模式>] <配置名称> <值> 替代。 - -l
- --list
-
已由
gitconfiglist替代。 - --get-color <名称> [<默认值>]
-
已由
gitconfigget[--value=<模式>] <配置名称> 替代。 - --get-color <名称> [<默认值>]
-
已由
gitconfigunset[--value=<模式>]--all<配置名称> 替代。 - --extended-regexp
-
已由
gitconfigget--all--show-names--regexp<名称正则表达式> 替代。 - --get-urlmatch <名称> <URL>
-
已由
gitconfigget--all--show-names--url=<URL> <配置名称> 替代。 - --get-color <名称> [<默认值>]
-
已由
gitconfigget--type=color[--default=<默认值>] <配置名称> 替代。 - -c <配置名>=<配置值>
-
已由
gitconfigset--append<配置名称> <值> 替代。 - --get-color <名称> [<默认值>]
-
已由
gitconfigunset[--value=<模式>] <名称> 替代。 - --get-color <名称> [<默认值>]
-
已由
gitconfigunset[--value=<模式>]--all<配置名称> 替代。 - --rename-section <旧配置名称> <新配置名称>
-
已由
gitconfigrename-section<旧配置名称> <新配置名称> 替代。 - --remove-section
-
已由
gitconfigremove-section<配置名称> 替代。 - -e
- --edit
-
已由
gitconfigedit替代。
文件
默认情况下,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。
当读取选项时,指定一个范围将只从该范围内的文件读取选项。当写选项时,指定一个范围将写到该范围内的文件(而不是仓库的特定配置文件)。参见上面的选项以获得完整的描述。
大多数配置选项无论在哪个作用域中定义都会被尊重,但有些选项只在某些作用域中被尊重。完整的细节请参见相应选项的文档。
环境变量
另请参见文件。
- 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
-
如果
gitconfig没有提供--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)。 其他字符转义序列(包括八进制转义序列)是无效的。
包括
include 和 includeIf 部分允许你从另一个来源包含配置指令。这些部分的行为与其他部分相同,但如果 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 只支持上述的确切关键字。
关于通过 gitdir 和 gitdir/i 进行匹配的一些补充说明:
-
$GIT_DIR中的符号链接在匹配前没有被解决。 -
在
$GIT_DIR之外,符号链接和实际路径版本的路径都将被匹配。例如,如果 ~/git 是 /mnt/storage/git 的符号链接,gitdir:~/git和gitdir:/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
值
许多变量的值都被当作一个简单的字符串,但有些变量取的是特定类型的值,对于如何拼写它们有一些规则。
- 布尔
-
当一个变量被称为采取布尔值时,许多同义词被接受为 true 和 false ;这些都是不分大小写的。
- 整数
-
许多指定各种尺寸的变量的值可以以
k、M…为后缀,表示 “以1024为比例的数字”、“以1024x1024为比例”,等等。 - color
-
接受颜色的变量的值是一个颜色(最多两个,一个用于前景,一个用于背景)和属性(你想要多少就有多少)的列表,用空格分隔。
接受的基本颜色是
normal、black、red、green、yellow、blue、magenta、cyan、white和default。 给出的第一种颜色是前景;第二种是背景。 除了`normal’和`default’之外,所有的基本颜色都有一个明亮的变体,可以通过在颜色前面加上`bright’来指定,比如`brightred'。颜色`normal`不会使颜色发生变化。它与空字符串相同,但在单独指定背景颜色时可以作为前景颜色(例如,"normal red")。
颜色`default` 明确地将颜色重置为终端的默认值,例如,指定一个清除的背景。虽然不同的终端有差异,但这通常与设置为 "white black" 不一样。
颜色也可以用 0 到 255 之间的数字来表示;这些颜色使用 ANSI 256 色模式(但注意不是所有的终端都支持这个)。 如果你的终端支持,你也可以指定 24 位 RGB 值为十六进制,如
#ff0ab3。可接受的属性是
bold、dim、ul、blink、reverse、italic和strike(用于划掉的字母或 “删除线”)。 任何属性相对于颜色的位置(在前,在后,或在中间)并不重要。特定的属性可以通过在它们前面加上no或no-来关闭(例如,noreverse,no-ul,等等)。伪属性
reset在应用指定的着色之前重置所有颜色和属性。例如,resetgreen将导致一个绿色的前景和默认的背景,没有任何激活的属性。一个空的颜色字符串根本不会产生任何颜色效果。这可以用来避免给特定的元素上色而不完全禁用颜色。
对于 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 弃用) -
当某些文件由于索引错误而无法添加时,使用
gitadd以继续添加文件。 等同于 git-add[1] 的--ignore-errors选项。add.ignore-errors已经被弃用, 因为它不符合配置变量的常规命名约定。
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
-
branch.autoSetupMerge -
告诉
gitbranch、gitswitch和gitcheckout在创建新分支时进行相应设置,使 git-pull[1] 能够从起始点分支正确地执行合并。注意,即使未设置该选项,也可以通过--track和--no-track选项按分支选择此行为。该选项默认值为true。有效设置为: -
branch.autoSetupRebase -
当使用
gitbranch、gitswitch或gitcheckout创建一个跟踪另一分支的新分支时,该变量告诉 Git 将 pull 配置为使用 rebase 而不是 merge(见branch.<name>.rebase)。有效设置为:关于如何设置一个分支去跟踪另一个分支,详见
branch.autoSetupMerge。该选项默认值为never。 -
branch.sort -
该变量控制 git-branch[1] 显示分支时的排序顺序。若未提供
--sort=<value> 选项,则使用此变量的值作为默认值。有效取值可参见 git-for-each-ref[1] 的字段名。 -
branch.<name>.remote -
当位于分支 <name> 上时,它告诉
gitfetch和gitpush应从哪个远程获取或向哪个远程推送。用于推送的远程可通过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一起为给定分支定义其上游分支。它告诉gitfetch/gitpull/gitrebase应合并哪个分支,也可能影响gitpush(见push.default)。当位于分支 <name> 上时,它告诉gitfetch哪个默认 refspec 应在FETCH_HEAD中标记为待合并。该值按 refspec 的远程部分处理,且必须匹配从branch.<name>.remote指定远程获取到的某个 ref。gitpull(它会先调用gitfetch)会使用该合并信息查找默认要合并的分支。没有此选项时,gitpull默认合并获取到的第一个 refspec。指定多个值可得到 octopus merge。若你希望把gitpull设置为从本地仓库中的另一个分支合并到 <name>,可以让branch.<name>.merge指向所需分支,并将branch.<name>.remote设为相对路径.(句点)。 - 分支 .<名字>.合并操作选项
-
为合并到分支 <name> 设置默认选项。语法和支持的选项与 git-merge[1] 相同,但当前不支持包含空白字符的选项值。
-
branch.<name>.rebase -
为 true 时,在执行
gitpull时会将分支 <name> rebase 到已获取分支之上,而不是从默认远程合并默认分支。若要进行非分支特定设置,参见pull.rebase。当值为
merges(或简写为m)时,会向gitrebase传递--rebase-merges选项,从而将本地合并提交也包含在 rebase 中(详见 git-rebase[1])。当值为
interactive(或简写为i)时,rebase 将以交互模式运行。注意:这可能是一个危险操作;除非你理解其影响,否则不要使用(详见 git-rebase[1])。
-
branch.<name>.description -
分支描述,可用
gitbranch--edit-description编辑。分支描述会自动添加到format-patch的封面信或request-pull的摘要中。
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
-
checkout.defaultRemote -
当你运行
gitcheckout<something> 或gitswitch<something>,且只有一个远程时,它可能会隐式回退为检出并跟踪例如origin/<something>。但一旦存在多个都带有 <something> 引用的远程,这种做法就不再有效。该设置允许指定一个首选远程名称,在发生歧义时始终优先选择它。典型用法是将其设为origin。当前,git-switch[1] 和 git-checkout[1] 会在
gitcheckout<something> 或gitswitch<something> 需要检出另一个远程上的 <something> 分支时使用该设置;git-worktree[1] 也会在gitworktreeadd引用远程分支时使用它。将来其他类似 checkout 的命令或功能也可能会使用此设置。 -
checkout.guess -
为
gitcheckout和gitswitch中的--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 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 See original version for this content. |
|
Warning
|
Missing See original version for this content. |
-
commit.cleanup -
此设置会覆盖
gitcommit中--cleanup选项的默认值。See git-commit[1] for details. 当你总是希望在日志消息中保留以注释字符(core.commentChar,默认值为#)开头的行时,更改默认值会很有用;此时你可以执行gitconfigcommit.cleanupwhitespace(注意,如果这样做,你必须自行删除提交日志模板中以该注释字符开头的帮助行)。 -
commit.gpgSign -
布尔值,用于指定是否对所有提交进行 GPG 签名。在进行变基等操作时使用该选项可能会导致大量提交被签名。使用代理可以避免多次键入 GPG 密码。
-
commit.status -
一个布尔值,用于在使用编辑器准备提交信息时启用或禁用在提交消息模板中包含状态信息。默认值为
true。 -
commit.template -
指定要用作新提交信息模板的文件路径名。
-
commit.verbose -
一个布尔值或 int 值,用于指定
gitcommit的详细程度。See git-commit[1] for details.
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
-
diff.autoRefreshIndex -
在使用
gitdiff与工作区文件进行比较时,不要将仅统计信息的更改视为已更改。取而代之的是静默运行gitupdate-index--refresh来更新工作区中内容与索引中内容匹配的路径的缓存统计信息。该选项默认为true。请注意,这只会影响gitdiff命令,而不会影响更低级的diff命令,比如gitdiff-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的默认值。请注意,这只会影响上层命令gitdiff,而不会影响更底层的diff命令,如gitdiff-files。gitcheckout和gitswitch在报告未提交的改动时也会尊重这一设置。如果将其设置为all,则gitcommit和gitstatus在设置status.submoduleSummary时通常会显示子模块摘要,除非使用--ignore-submodules命令行选项将其覆盖。gitsubmodule命令不受此设置影响。默认设置为 untracked,因此任何未跟踪的子模块都会被忽略。 -
diff.mnemonicPrefix -
如果设置了该选项,
gitdiff就会根据比较的内容使用不同于标准a/和b/的前缀对。当此配置生效时,反向 diff 输出也会交换前缀的顺序: -
diff.noPrefix -
如果设置了,
gitdiff不会显示任何源前缀或目标前缀。 -
diff.srcPrefix -
如果设置了,
gitdiff使用指定的源前缀。否则,默认为a/。 -
diff.dstPrefix -
如果设置了,
gitdiff使用指定的目标前缀。否则,默认是b。 -
diff.relative -
如果设置为
true,gitdiff不会显示目录外的更改,而是显示相对于当前目录的路径名。 -
diff.orderFile -
该文件定义了在 git diff 命令的输出中如何对文件进行排序。 详情参见 git-diff[1] 的
-O选项。 如果diff.orderFile是相对路径名,则将其视为 相对于工作区顶层的路径。 -
diff.renameLimit -
在复制/重命名检测的穷举阶段要考虑的文件数量;等同于
gitdiff的-l选项。如果未设置,当前默认值为 1000。若已关闭重命名检测,则此设置不起作用。 -
diff.renames -
Git 是否以及如何检测重命名。如果设为
false,则禁用重命名检测;设为true,则启用基础的重命名检测;设为copies或copy时,Git 还会检测副本。默认值为true。注意,这只影响如 git-diff[1] 和 git-log[1] 这样的gitdiffPorcelain 命令,而不影响如 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 -
选择差异算法。有如下可选项:
-
diff.wsErrorHighlight -
高亮显示 diff 的
context、old或new行中的空白错误。多个值用逗号分隔,none重置以前的值,default重置为new,all是old,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 See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
-
fetch.recurseSubmodules -
该选项控制
gitfetch(以及gitpull底层执行的 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>.prune和 git-fetch[1] 的 PRUNING 章节。 -
fetch.pruneTags -
如果为 true,且尚未设置相关 refspec,则 fetch 在 prune 时会自动表现得如同提供了
refs/tags/*:refs/tags/*这个 refspec。这样可以同时设置该选项和fetch.prune,以保持与上游 ref 的 1:1 映射。另见remote.<name>.pruneTags和 git-fetch[1] 的 PRUNING 章节。 -
fetch.all -
如果为 true,fetch 会尝试更新所有可用远程。可通过传递
--no-all或显式指定一个或多个要获取的远程来覆盖此行为。默认值为false。 -
fetch.output -
控制 ref 更新状态的打印方式。有效值为
full和compact。默认值为full。详情参见 git-fetch[1] 的 OUTPUT 章节。 -
fetch.negotiationAlgorithm -
控制在协商服务器要发送的 packfile 内容时,如何发送本地仓库中提交的信息。设为
consecutive时,使用遍历连续提交并逐个检查的算法。设为skipping时,使用跳过部分提交以更快收敛的算法,但可能产生比必要更大的 packfile;设为noop则完全不发送任何信息,这几乎肯定会导致 packfile 大于必要大小,但会跳过协商步骤。设为default可覆盖先前的设置并使用默认行为。默认通常为consecutive,但若feature.experimental为true,则默认值为skipping。未知值会导致gitfetch报错退出。另见 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 时,在每次
gitfetch从远程下载 pack-file 后都写入 commit-graph。使用--split选项时,大多数执行只会在现有 commit-graph 文件之上创建一个很小的 commit-graph 文件。偶尔这些文件会合并,写入时间可能更长。保持 commit-graph 文件为最新有助于提升许多 Git 命令的性能,包括gitmerge-base、gitpush-f和gitlog--graph。默认值为false。 -
fetch.bundleURI -
该值保存一个 URI,用于在从 origin Git 服务器执行增量 fetch 之前,通过 bundle URI 下载 Git 对象数据。这与 git-clone[1] 中
--bundle-uri选项的行为类似。如果提供的 bundle URI 包含为增量 fetch 组织的 bundle 列表,则gitclone--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 See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing 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
-
一个布尔值,指定
gitinit和gitclone是否应自动将extensions.submodulePathConfig设置为true。这允许所有新仓库自动使用子模块路径扩展。未设置时默认为false。
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing 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设置值,类似于为gitlog使用--date选项。详见 git-log[1]。如果格式设置为 "auto:foo",且正在使用分页器,则日期格式将使用 "foo"。否则将使用 "default"。
-
log.decorate -
打印
log命令显示的各个提交的 ref 名称。可取值包括:和 git-log[1] 的
--decorate选项相似。 -
log.initialDecorationSet -
默认情况下,
gitlog只会显示某些已知 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,则当给出单个 <路径> 时,gitlog的行为就如同使用了--follow选项。这与--follow有相同的限制,即它不能用于跟踪多个文件,且在非线性历史上效果不佳。 -
log.graphColors -
一个用逗号分隔的颜色列表,可用于在
gitlog--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 See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing 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 是否检测目录重命名。这会影响这样一种情况在合并时的处理方式:历史的一侧向某个目录新增了文件,而该目录在历史的另一侧被重命名。可取值包括:
如果
merge.renames为false,则会忽略merge.directoryRenames,并将其视为false。默认值为conflict。 -
merge.renormalize -
告诉 Git,仓库中文件的规范表示形式会随时间变化(例如,较早的提交记录的文本文件使用 CRLF 行尾,而较新的提交使用 LF 行尾)。在这样的仓库中,对于每个需要执行三方内容合并的文件,Git 都可以在执行合并前将提交中记录的数据转换为规范形式,以减少不必要的冲突。更多信息请参阅 gitattributes[5] 中的“合并具有不同签入/检出属性的分支”一节。
-
merge.stat -
指定在合并结束时,在
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 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> 可以是
vimdiff、nvimdiff、gvimdiff中的任意一种。以--tool=<variant> 启动gitmergetool时(如果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 会在工作区中写入冲突文件的临时
BASE、LOCAL和REMOTE版本。设为true时,Git 会尝试为这些文件使用临时目录。默认值为false。 -
mergetool.prompt -
在每次调用合并解决程序前提示,让用户有机会跳过该路径。
-
mergetool.guiDefault -
设为
true则默认使用merge.guitool(等同于指定--gui参数);设为auto则根据是否存在DISPLAY环境变量的值来选择merge.guitool或merge.tool。默认值为false,此时必须显式提供--gui参数才会使用merge.guitool。
- 笔记.合并策略
-
在解决笔记冲突时,默认选择哪种合并策略。 必须是
manual、ours、theirs、union或cat_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.notesRef或GIT_NOTES_REF设置的默认值外,在使用gitlog系列命令显示提交信息时,还应从哪个 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>(当前为
amend或rebase)重写提交时,如果该变量为false,git 将不会把注释从原始提交复制到重写后的提交。默认值为true。另见下文的notes.rewriteRef。该设置可由
GIT_NOTES_REWRITE_REF环境变量覆盖;其值必须是一个以冒号分隔的 ref 或 glob 列表。 -
notes.rewriteMode -
在重写过程中复制注释时(参见
notes.rewrite.<command> 选项),用于决定如果目标提交已经有注释时该怎么做。其值必须为overwrite、concatenate、cat_sort_uniq或ignore之一。默认值为concatenate。这个设置可以用`GIT_NOTES_REWRITE_MODE`环境变量覆盖。
-
notes.rewriteRef -
在重写过程中复制注释时,指定应复制其注释的(完全限定)ref。也可以是 glob,此时会复制所有匹配 ref 中的注释。你也可以多次指定该配置。
该项没有默认值;你必须配置此变量才能启用注释重写。将其设为
refs/notes/commits可为默认的提交注释启用重写。可由
GIT_NOTES_REWRITE_REF环境变量覆盖。其格式的更多说明见上文notes.rewrite.<command>。
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
-
push.autoSetupRemote -
若设为
true,当当前分支尚无上游跟踪分支时,默认 push 会假定带上--set-upstream;该选项在push.default为simple、upstream和current时生效。若你希望新分支默认推送到默认远程(类似push.default=current的行为),同时又希望设置上游跟踪关系,则此选项很有用。最可能受益的工作流是simple的集中式工作流:期望所有分支在远程都有同名分支。 -
push.default -
定义在未提供 refspec(无论来自命令行、配置或其他来源)时
gitpush应采取的动作。不同取值适合不同工作流;例如在纯集中式工作流(即 fetch 源与 push 目的地相同)中,upstream可能是你想要的。可能取值包括:-
nothing -
除非给出 refspec,否则不推送任何内容(报错退出)。这主要面向希望始终显式指定以避免失误的人。
-
current -
推送当前分支,以更新接收端上同名分支。适用于集中式与非集中式工作流。
-
upstream -
将当前分支推送回通常会把更改合入当前分支的那个分支(即
@{upstream})。仅当你推送到的仓库与通常拉取的仓库相同(即集中式工作流)时,此模式才有意义。 -
tracking -
这是
upstream的已弃用同义词。 -
simple -
将当前分支推送到远程上的同名分支。
如果你在集中式工作流中工作(推送到你拉取的同一仓库,通常为
origin),那么需要配置一个同名的上游分支。自 Git 2.0 起该模式为默认,且对新手来说是最安全的选择。
-
matching -
推送两端同名的所有分支。这会让你推送到的仓库记住将被推送出去的分支集合(例如,如果你总是把
maint和master推送到那里而不推送其他分支,那么该远程仓库将拥有这两个分支,你本地的maint与master将被推送过去)。要有效使用此模式,你必须在运行
gitpush之前确保你要推送的 所有 分支都已准备就绪,因为该模式的核心就是让你一次性推送所有分支。如果你通常只完成一个分支的工作并推送结果,而其他分支仍未完成,那么此模式不适合你。此外,此模式也不适合推送到共享的中央仓库,因为其他人可能会在其中新增分支,或在你控制之外更新现有分支的末端。这曾经是默认值,但自 Git 2.0 起不再如此(新的默认值为
simple)。
-
-
push.followTags -
若设为 true,则默认启用
--follow-tags。你可以在推送时指定--no-follow-tags覆盖此配置。 -
push.gpgSign -
可设为布尔值或字符串
if-asked。值为 true 时,所有推送都会进行 GPG 签名,效果等同于向 git-push[1] 传入--signed。值为if-asked时,若服务器支持则对推送进行签名,效果等同于向gitpush传入--signed=if-asked。值为 false 可覆盖来自更低优先级配置文件的设置。命令行显式标志总会覆盖此配置选项。 -
push.pushOption -
当命令行未给出任何
--push-option=<option> 参数时,gitpush的行为就像为本变量中的每个 <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 -
可以是
check、on-demand、only或no,其行为与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.useBitmaps为true,也会禁用gitpush对 bitmap 的使用,但不会 阻止其他 git 操作使用 bitmap。默认值为true。
- rebase.backend
-
rebase 默认使用的后端。可选值为
apply或merge。将来如果 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",当某些提交被移除时(例如删除了一行),
gitrebase-i会打印警告,但 rebase 仍会继续。如果设为 "error",则会打印前述警告并停止 rebase,此时可使用gitrebase--edit-todo来纠正错误。如果设为 "ignore",则不做检查。若要在不产生警告或错误的情况下丢弃某个提交,请在 todo 列表中使用drop命令。默认值为 "ignore"。 - rebase.instructionFormat
-
一个按 git-log[1] 所规定的格式字符串,用于交互式 rebase 期间的 todo 列表。该格式会自动在前面附加提交哈希。
- rebase.abbreviateCommands
-
如果设为 true,
gitrebase会在 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-cousins、no-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 See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
-
stash.index -
如果设为 true,
gitstashapply和gitstashpop的行为将如同提供了--index。默认值为 false。 参见 git-stash[1] 中的说明。这也会影响通过
--autostash间接调用 git-stash[1] 的情况,例如来自 git-merge[1]、git-rebase[1] 和 git-pull[1] 的调用。 -
stash.showIncludeUntracked -
如果设为 true,则
gitstashshow命令会显示 stash 条目中的未跟踪文件。默认值为 false。See the description of the 'show' command in git-stash[1]. -
stash.showPatch -
如果设为 true,则不带选项的
gitstashshow命令会以 patch 形式显示 stash 条目。默认值为 false。See the description of the 'show' command in git-stash[1]. -
stash.showStat -
如果设为 true,则不带选项的
gitstashshow命令会显示 stash 条目的 diffstat。默认值为 true。See the description of the 'show' command in git-stash[1].
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing 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 See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
|
Warning
|
Missing See original version for this content. |
-
worktree.guessRemote -
如果未指定分支,且也未使用
-b、-B或--detach,那么gitworktreeadd默认会从 HEAD 创建一个新分支。如果worktree.guessRemote设为 true,worktreeadd会尝试查找一个名称与新分支名唯一匹配的远程跟踪分支。如果找到这样的分支,就会检出该分支,并将其设置为新分支的“上游”分支。如果找不到这样的匹配项,则退回到从当前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] 文档