11-git config 配置

知识前提:git 重要的三个工作区域:

  1. 工作区(Working Directory):写代码的目录。就是项目代码存放的目录。
  2. 暂存区(index/stage):工作区与版本库之间的缓冲地带。用 git add 把文件添加进去,实际上就是把文件修改添加到暂存区。
  3. 版本库(仓库区):git commit提交更改,实际上是把暂存区的所有内容全部提交到当前分支,查看记录 git log。

git config 语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
$ git config
usage: git config [<options>]

Config file location
--global use global config file
--system use system config file
--local use repository config file
--worktree use per-worktree config file
-f, --file <file> use given config file
--blob <blob-id> read config from given blob object

Action
--get get value: name [value-pattern]
--get-all get all values: key [value-pattern]
--get-regexp get values for regexp: name-regex [value-pattern]
--get-urlmatch get value specific for the URL: section[.var] URL
--replace-all replace all matching variables: name value [value-pattern]
--add add a new variable: name value
--unset remove a variable: name [value-pattern]
--unset-all remove all matches: name [value-pattern]
--rename-section rename section: old-name new-name
--remove-section remove a section: name
-l, --list list all
--fixed-value use string equality when comparing values to 'value-pattern'
-e, --edit open an editor
--get-color find the color configured: slot [default]
--get-colorbool find the color setting: slot [stdout-is-tty]

Type
-t, --type <> value is given this type
--bool value is "true" or "false"
--int value is decimal number
--bool-or-int value is --bool or --int
--bool-or-str value is --bool or string
--path value is a path (file or directory name)
--expiry-date value is an expiry date

Other
-z, --null terminate values with NUL byte
--name-only show variable names only
--includes respect include directives on lookup
--show-origin show origin of config (file, standard input, blob, command line)
--show-scope show scope of config (worktree, local, global, system, command)
--default <value> with --get, use default value when missing entry

config file location

git 共三个配置文件,分别对应上面看到的三个关键词localglobalsystem

  • .git/config 仓库级配置 文件:这个配置中的设置只对当前所在仓库有效。使用 .git/config [--local] 设置。
  • ~/.gitconfig 全局级配置 文件:用户目录下的配置文件,这个配置中的设置只适用于该用户。使用 git config --global 设置。
  • /etc/gitconfig 系统级配置文件:这个配置中的设置对所有用户都有效。使用 git config --system 设置。

查看配置项及其优先级

用以下的命令来查看 git 配置

1
2
3
4
5
6
# 使用list时有两个横线"--" ,使用简写的 l 时仅有一个"-"
git config [--local|--global|--system] --list
git config [--local|--global|–system] -l

# 查看当前生效的配置,即三个配置文件的集合
git config -l

git 配置文件的权重是 仓库 > 全局 > 系统,即 local > global > system

git 首先会查找 /etc/gitconfig 文件(系统级),然后查找每个用户的 ~/.gitconfig文件(全局级)。最后查找由用户定义的各个库中Git目录下的配置文件 .git/config(仓库级)。每一个级别的配置都会覆盖上层的相同配置,所以.git/config 里的配置会覆盖/etc/gitconfig中的同名变量。

增删改查

1. 增:--add

1
$ git config [--local | --global | --system] --add section.name value

2. 删:--unset | --unset-all | --remove-section

1
2
3
4
5
6
7
8
# 若是一个key对应多个value,那么应该把要删除的value带上,否则会报错
git config [–-local | global | system] --unset section.name

# 倘若想一次性把某个属性的所有值都删掉,则用--unset-all命令
git config [–-local | global | system] --unset-all section.name

# 以上两个命令就是删除配置项的某个属性值(或所有属性值)。虽然属性值删除了,但该配置项还存在,若想将配置项删除,则使用remove-section命令
git config [–-local | global | system] --remove-section section

示例:

1
2
3
4
5
# 删除一个值
git config --unset cat.age

# 删除某个属性的所有值
git config --unset -all cat.name

3. 改:--rename-section | --replace-all

1
2
3
4
5
6
7
8
# 重新设值(前提:此key只对应一个value,否则报错) 
git config [--local | --global | --system] section.key newValue

# 重命名
git config [--local | --global | --system] --rename-section oldName newName

# 替换所有的值。此时会把key对应的所有value值都替换成新的。需要注意的是,此时最终只保留一个value
git config [--local | --global | --system] --replace-all section.key newValue

我们也可以直接编辑配置文件,用以下命令:

1
$ git config --local [-e | --edit]

缺local项时默认编辑local文件

4. 查:get | get-all | get-regexp

  • 获取某个属性值

    1
    $ git config [--local | global | system] --get section.key [value]

    如果此key对应多个value,且获取时不带具体的value,那么获取的是最后的value。

    如果 global, system 下也有对应的cat.name,那该项是会被local下覆盖的,也就是获取不到的(记住查找的顺序,永远是先system 再 global 再 local, git默认采用最后一项)

  • 获取所有属性值

    没有注明哪个配置的话,则是获取所有配置下的属性值,包括global,system

    1
    $ git config [--local | global | system] --get-all section.key
  • 获取某个section下的所有key和value(包括global和system)

    1
    $ git config [--local | global | system] --get-regexp section

11-git config 配置
https://flepeng.github.io/044-Git-21-命令-11-git-config-配置/
作者
Lepeng
发布于
2021年3月8日
许可协议