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

名称

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

概述

git config [<文件选项>] [--type=<类型>] [--fixed-value] [--show-origin] [--show-scope] [-z|--null] <名称> [<值> [<值模式>]]
git config [<文件选项>] [--type=<类型>] --add <名称> <值>
git config [<文件选项>] [--type=<类型>] [--fixed-value] --replace-all <名称> <值> [<值模式>]
git config [<文件选项>] [--type=<类型>] [--show-origin] [--show-scope] [-z|--null] [--fixed-value] --get <名称> [<值模式>]
git config [<文件选项>] [--type=<类型>] [--show-origin] [--show-scope] [-z|--null] [--fixed-value] --get-all <名称> [<值模式>]
git config [<文件选项>] [--type=<类型>] [--show-origin] [--show-scope] [-z|--null] [--fixed-value] [--name-only] --get-regexp <名称正则表达式> [<值模式>]
git config [<文件选项>] [--type=<类型>] [-z|--null] --get-urlmatch <名称> <地址>
git config [<文件选项>] [--fixed-value] --unset <名称> [<值模式>]
git config [<文件选项>] [--fixed-value] --unset-all <名称> [<值模式>]
git config [<文件选项>] --rename-section <旧名称> <新名称>
git config [<文件选项>] --remove-section <名称>
git config [<文件选项>] [--show-origin] [--show-scope] [-z|--null] [--name-only] -l | --list
git config [<文件选项>] --get-color <名称> [<默认>]
git config [<文件选项>] --get-colorbool <名称> [<stdout-is-tty>]
git config [<文件选项>] -e | --edit

描述

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

Multiple lines can be added to an option by using the --add option. If you want to update or unset an option which can occur on multiple lines, a value-pattern (which is an extended regular expression, unless the --fixed-value option is given) needs to be given. Only the existing values that match the pattern are updated or unset. If you want to handle the lines that do not match the pattern, just prepend a single exclamation mark in front (see also 实例), but note that this only works when the --fixed-value option is not in use.

The --type=<type> option instructs git config to ensure that incoming and outgoing values are canonicalize-able under the given <type>. If no --type=<type> is given, no canonicalization will be performed. Callers may unset an existing --type specifier with --no-type.

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

写入时,新值默认写入版本库的本地配置文件,选项`--system(系统)--global(全局)--worktree(工作区)--file(文件) <filename>可以用来告诉命令写到那个位置(你可以给出--local(本地)`选项,但是默认选项就是本地(local))。

This command will fail with non-zero status upon error. Some exit codes are:

  • 该节或键无效(退出代码为1),

  • 没有提供节或键(退出值为2),

  • 配置文件无效(退出代码为3),

  • 配置文件无法写入(退出代码为4),

  • 你试图取消一个不存在的选项(退出代码为5),

  • 你试图取消/设置一个多行匹配的选项(退出代码为5),或

  • 试图使用一个无效的正则表达式(退出代码为6)。

执行成功时,该命令返回退出代码0。

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

选项

--replace-all

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

--add

Adds a new line to the option without altering any existing values. This is the same as providing ^$ as the value-pattern in --replace-all.

--get

获取一个给定的键的值(可选择通过与该值相匹配的正则表达式进行过滤)。如果没有找到键值,返回错误代码1;如果找到多个键值,则返回最后一个值。

--get-all

和—​get一样,但是返回一个多值键的所有值。

--get-regexp

Like --get-all, but interprets the name as a regular expression and writes out the key names. Regular expression matching is currently case-sensitive and done against a canonicalized version of the key in which section and variable names are lowercased, but subsection names are not.

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

When given a two-part <name> as <section>.<key>, the value for <section>.<URL>.<key> whose <URL> part matches the best to the given URL is returned (if no such key exists, the value for <section>.<key> is used as a fallback). When given just the <section> as name, do so for all the keys in the section and list them. Returns error code 1 if no value is found.

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

For writing options: write to the repository .git/config file. This is the default behavior.

对于读取选项:只从存储库`.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 <二进制对象>

Similar to --file but use the given blob instead of a file. E.g. you can use master:.gitmodules to read values from the file .gitmodules in the master branch. See "SPECIFYING REVISIONS" section in gitrevisions[7] for a more complete list of ways to spell blob names.

--remove-section

从配置文件中删除了该节。

--rename-section

将给定的节重命名为一个新的名称。

--unset

从配置文件中删除与该键匹配的行。

--unset-all

从配置文件中删除所有匹配该键的行。

-l
--list

列出配置文件中设置的所有变量,以及它们的值。

--fixed-value

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

--type <类型>

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

有效的 <类型> 包括:

  • bool:将数值规范化为 "true" 或 "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

Un-sets the previously set type specifier (if one was previously set). This option requests that git config not canonicalize the retrieved variable. --no-type has no effect without --type=<type> or --<type>.

-z
--null

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

--name-only

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

--show-origin

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

--show-scope

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

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

Find the color setting for <name> (e.g. color.diff) and output "true" or "false". <stdout-is-tty> should be either "true" or "false", and is taken into account when configuration says "auto". If <stdout-is-tty> is missing, then checks the standard output of the command itself, and exits with status 0 if color is to be used, or exits with status 1 otherwise. When the color setting for name is undefined, the command uses color.ui as fallback.

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

Find the color configured for name (e.g. color.diff.new) and output it as the ANSI color escape sequence to the standard output. The optional default parameter is used instead, if there is no color configured for name.

--type=color [--default=<默认>]--get-color 更受欢迎(但注意 --get-color 会省略 --type=color 打印的尾部换行)。

-e
--edit

打开一个编辑器来修改指定的配置文件;可以是 --system--global,也可以是仓库(默认)。

--[no-]includes

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

--default <值>

当使用 --get 时,如果没有找到所要求的变量,则表现为 <值> 是分配给该变量的值。

配置

pager.config is only respected when listing configuration, i.e., when using --list or any of the --get-* which may return multiple results. The default is to use a 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 将以非零的错误代码退出。如果文件不可读,会产生一个错误信息,但如果文件丢失,则不会产生错误信息。

The files are read in the order given above, with last value found taking precedence over values read earlier. When multiple values are taken then all values of a key from all files will be used.

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

You can limit which configuration sources are read from or written to by specifying the path of a file with the --file option, or by specifying a configuration scope with --system, --global, --local, or --worktree. For more, see 选项 above.

范围

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

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

当读取选项时,指定一个范围将只从该范围内的文件读取选项。当写选项时,指定一个范围将写到该范围内的文件(而不是仓库的特定配置文件)。参见上面的选项以获得完整的描述。

大多数配置选项无论在哪个作用域中定义都会被尊重,但有些选项只在某些作用域中被尊重。完整的细节请参见相应选项的文档。

受保护的配置

Protected configuration refers to the system, global, and command scopes. For security reasons, certain options are only respected when they are specified in protected configuration, and ignored otherwise.

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 core.gitproxy '"ssh" for kernel.org' 'for kernel.org$'

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

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

% git config --unset diff.renames

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

要查询一个给定键的值,请做

% git config --get core.filemode

% git config core.filemode

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

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

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

% git config --get-all core.gitproxy

如果你喜欢危险的生活,你可以用一个新的核心.gitproxy来取代 所有 core.gitproxy,用的是

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

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

% git config core.gitproxy ssh '! for '

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

% 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
Warning

Missing zh_HANS-CN/config.txt

See original version for this content.

漏洞

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

  [section.subsection]
    key = value1

并运行 git config section.Subsection.key value2 将导致

  [section.subsection]
    key = value1
    key = value2

GIT

属于 git[1] 文档

scroll-to-top