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.43.0 11/20/23
- 2.42.1 11/02/23
- 2.42.0 08/21/23
- 2.41.0 06/01/23
- 2.40.1 no changes
- 2.40.0 03/12/23
- 2.39.1 → 2.39.3 no changes
- 2.39.0 12/12/22
- 2.38.3 → 2.38.5 no changes
- 2.38.2 12/11/22
- 2.38.1 10/07/22
- 2.38.0 10/02/22
- 2.37.5 → 2.37.7 no changes
- 2.37.4 10/06/22
- 2.37.3 no changes
- 2.37.2 08/11/22
- 2.37.1 no changes
- 2.37.0 06/27/22
- 2.36.4 → 2.36.6 no changes
- 2.36.3 10/06/22
- 2.36.2 06/23/22
- 2.36.1 no changes
- 2.36.0 04/18/22
- 2.35.6 → 2.35.8 no changes
- 2.35.5 10/06/22
- 2.35.4 06/23/22
- 2.35.3 04/13/22
- 2.35.2 03/23/22
- 2.35.1 no changes
- 2.35.0 01/24/22
- 2.34.6 → 2.34.8 no changes
- 2.34.5 10/06/22
- 2.34.4 06/23/22
- 2.34.3 04/13/22
- 2.34.2 03/23/22
- 2.34.1 no changes
- 2.34.0 11/15/21
- 2.33.6 → 2.33.8 no changes
- 2.33.5 10/06/22
- 2.33.4 06/23/22
- 2.33.3 04/13/22
- 2.33.2 03/23/22
- 2.33.1 10/12/21
- 2.33.0 08/16/21
- 2.32.5 → 2.32.7 no changes
- 2.32.4 10/06/22
- 2.32.3 06/23/22
- 2.32.2 04/13/22
- 2.32.1 03/23/22
- 2.32.0 06/06/21
- 2.31.6 → 2.31.8 no changes
- 2.31.5 10/06/22
- 2.31.4 06/23/22
- 2.31.3 04/13/22
- 2.31.2 03/23/22
- 2.31.1 03/26/21
- 2.31.0 03/15/21
- 2.30.7 → 2.30.9 no changes
- 2.30.6 10/06/22
- 2.30.5 06/23/22
- 2.30.4 04/13/22
- 2.30.3 03/23/22
- 2.30.2 no changes
- 2.30.1 02/08/21
- 2.30.0 12/27/20
- 2.29.1 → 2.29.3 no changes
- 2.29.0 10/19/20
- 2.28.1 no changes
- 2.28.0 07/27/20
- 2.27.1 no changes
- 2.27.0 06/01/20
- 2.26.1 → 2.26.3 no changes
- 2.26.0 03/22/20
概述
git config [<file-option>] [--type=<type>] [--fixed-value] [--show-origin] [--show-scope] [-z|--null] <name> [<value> [<value-pattern>]] git config [<file-option>] [--type=<type>] --add <name> <value> git config [<file-option>] [--type=<type>] [--fixed-value] --replace-all <name> <value> [<value-pattern>] git config [<file-option>] [--type=<type>] [--show-origin] [--show-scope] [-z|--null] [--fixed-value] --get <name> [<value-pattern>] git config [<file-option>] [--type=<type>] [--show-origin] [--show-scope] [-z|--null] [--fixed-value] --get-all <name> [<value-pattern>] git config [<file-option>] [--type=<type>] [--show-origin] [--show-scope] [-z|--null] [--fixed-value] [--name-only] --get-regexp <name-regex> [<value-pattern>] git config [<file-option>] [--type=<type>] [-z|--null] --get-urlmatch <name> <URL> git config [<file-option>] [--fixed-value] --unset <name> [<value-pattern>] git config [<file-option>] [--fixed-value] --unset-all <name> [<value-pattern>] git config [<file-option>] --rename-section <old-name> <new-name> git config [<file-option>] --remove-section <name> git config [<file-option>] [--show-origin] [--show-scope] [-z|--null] [--name-only] -l | --list git config [<file-option>] --get-color <name> [<default>] git config [<file-option>] --get-colorbool <name> [<stdout-is-tty>] git config [<file-option>] -e | --edit
描述
你可以用这个命令查询/设置/替换/取消选项。名称(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(文件) <filename>可以用来告诉命令写到那个位置(你可以给出
--local(本地)`选项,但是默认选项就是本地(local))。
该命令出错时将以非零状态失败。 以下是一些退出代码:
-
该节或键无效(退出代码为1),
-
没有提供节或键(退出值为2),
-
配置文件无效(退出代码为3),
-
配置文件无法写入(退出代码为4),
-
你试图取消一个不存在的选项(退出代码为5),
-
你试图取消/设置一个多行匹配的选项(退出代码为5),或
-
试图使用一个无效的正则表达式(退出代码为6)。
执行成功时,该命令返回退出代码0。
所有可用配置变量的列表可以通过`git help --config`命令获取。
选项
- --replace-all
-
默认行为是最多替换一行。这将会替换所有与键(以及可选的`value-pattern`)匹配的行。
- --add
-
不改变任何现有的值的情况下,在选项中增加一个新的行。 这与在`--replace-all`中提供'^$'作为`value-pattern` 是一样的。
- --get
-
获取一个给定的键的值(可选择通过与该值相匹配的正则表达式进行过滤)。如果没有找到键值,返回错误代码1;如果找到多个键值,则返回最后一个值。
- --get-all
-
和—get一样,但是返回一个多值键的所有值。
- --get-regexp
-
像 --get-all 一样,但是用正则表达式作为,并写出键名。 正则表达式匹配目前是区分大小写的,并且是针对一个规范化的键的版本进行的,其中节(section)和变量名称是小写的,但子节名称不是小写的。
- --get-urlmatch <名称> <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 <二进制对象>
-
类似于`--file`,但使用指定的二进制对象而不是文件。例如,你可以使用’master:.gitmodules’来读取主分支中'.gitmodules’文件中的值。参见 gitrevisions[7] 中的 "指定的修正"部分,以获得更完整的二进制对象名称拼写方式。
- --remove-section
-
从配置文件中删除了该节。
- --rename-section
-
将给定的节重命名为一个新的名称。
- --unset
-
从配置文件中删除与该键匹配的行。
- --unset-all
-
从配置文件中删除所有匹配该键的行。
- -l
- --list
-
列出配置文件中设置的所有变量,以及它们的值。
- --fixed-value
-
当与`value-pattern`参数一起使用时,将`value-pattern`视为精确的字符串,而不是正则表达式。这将使得被匹配的名称/值对,只有那些值与`value-pattern’完全相等的名称/值对。
- --type <类型>
-
git config 将确保任何输入或输出在给定的类型约束下是有效的,并将以
<类型>
的规范形式将输出的值规范化。有效的
<类型>
包括:-
bool:将数值规范化为 "true" 或 "false"。
-
int:将数值规范化为简单的十进制数字。可选的后缀 k、m 或 'g’将导致输入的值被乘以 1024、1048576 或 1073741824。
-
bool-or-int:如上所述,根据 bool '或 'int 进行规范化。
-
path: canonicalize by expanding a leading
~
to the value of$HOME
and~user
to the home directory for the specified user. This specifier has no effect when setting the value (but you can usegit config section.variable ~/
from the command line to let your shell do the expansion.) -
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-origin
-
用来源类型(文件、标准输入、blob、命令行)和实际来源(配置文件路径、引用或 blob id(如适用))对所有查询到的配置选项的输出进行扩充。
- --show-scope
-
类似于
--show-origin
,它用该值的范围(工作树、本地、全局、系统、命令)来增加所有查询的配置选项的输出。 - --get-colorbool <name> [<stdout-is-tty>]
-
找到
<名称>
的颜色设置(例如color.diff
),并输出 "true" 或 "false"。<stdout-is-tty>
应该是 "true" 或 "false",当配置为 "auto" 时将被考虑。 如果<stdout-is-tty>
缺失,则检查命令本身的标准输出,如果要使用颜色则以状态 0 退出,否则以状态 1 退出。 当name
的颜色设置未被定义时,该命令使用color.ui
作为回退。 - --get-color <name> [<default>]
-
找到为
name
配置的颜色(例如:color.diff.new
),并将其作为 ANSI 颜色转义序列输出到标准输出。 如果没有为name
配置的颜色,则使用可选的default
参数来代替。--type=color [--default=<默认>]
比--get-color
更受欢迎(但注意--get-color
会省略--type=color
打印的尾部换行)。 - -e
- --edit
-
打开一个编辑器来修改指定的配置文件;可以是
--system
,--global
,也可以是仓库(默认)。 - --[no-]includes
-
在查找数值时尊重配置文件中的
include.*
指令。当给出一个特定的文件时,默认为off
(例如,使用--file
、--global
等),当搜索所有配置文件时,默认为on
。 - --default <值>
-
当使用
--get
时,如果没有找到所要求的变量,则表现为 <值> 是分配给该变量的值。
文件
默认情况下,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
- command
-
GIT_CONFIG_{COUNT,KEY,VALUE} 环境变量(见下文 环境变量)
the
-c
option
除了 command 之外,每个范围都对应于一个命令行选项:--system
、--global
、--local
、--worktree
。
当读取选项时,指定一个范围将只从该范围内的文件读取选项。当写选项时,指定一个范围将写到该范围内的文件(而不是仓库的特定配置文件)。参见上面的[OPTIONS ]以获得完整的描述。
大多数配置选项无论在哪个作用域中定义都会被尊重,但有些选项只在某些作用域中被尊重。完整的细节请参见相应选项的文档。
环境变量
另请参见[文件]。
- 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
or
% git config core.filemode
或者,要查询一个多变量:
% git config --get core.gitproxy "for kernel.org$"
如果你想知道一个多变量的所有值,请做:
% git config --get-all core.gitproxy
如果你喜欢危险的生活,你可以用一个新的核心.gitproxy来取代 所有 的核心 .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 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] 文档