git的一些安装和基本的配置比较简单,我们安装完毕后。经常会针对Git配置一些全局信息,或者围绕某个本地仓库做一些配置。例如配置项目提交的作者邮箱等信息。
那么,我们配置的各种信息是存在哪里呢?又有哪些配置是有效果的呢?本篇就是介绍git的关于config文件的一些知识。
我们安装完毕Git之后,都会通过各种操作来定制我们本地的Git的环境,就类似于程序开发中的全局属性。
而配置完毕后这些Git环境的相关信息后。之后每次升级Git工具的版本时,我们配置的这些信息都会被保留并继续生效。
而这些相关的配置项,git是通过自带的git config
工具进行统一管理和配置的。
所以:只要通过git config 命令进行操作的信息都是在配置Git本地环境。而且该内容配置完毕后,会在本仓库,本地全部仓库等不同级别进行生效。根据我们配置时进行的指令来决定不同的生效范围。
除了Git默认的配置项,我们也可以自定义各种配置项。在git提交或操作时使用。整个过程就叫做自定义Git配置。
上面说过,针对config 指令进行操作,会有不同的权限。其实主要就是因为我们操作完毕后的相关指令存储在哪个config文件中决定的。git主要有三个地方存储这些变量。
git config --system
操作后的配置就是修改和存储在该文件中。git config --global
操作后的配置就是修改和存储在该文件中。git config --local
操作后的配置就是修改和存储在该文件中。我们每次提交的时候,如果该指令需要相关配置的话,就会按照上面的流程进行读取。也就是说如果最后.git/config文件中配置的项目,会覆盖前面两项配置的变量。如果没有就按照前一项文件配置的生效。
git可能安装在多个不同平台例如macOS,Linux等不同平台。那么我们如何知道每一种配置文件的路径呢?毕竟不同的操作系统它们的目录结构都不一样的。
很简单,通过指令:git config --list --show-origin
。进行查询就可以了。我们如果当前是在一个本地仓库文件夹中,那么可以查询到三个文件夹。而如果不在本地仓库,而是在根目录。那么就只能查询到两个config配置文件了
示例:例如下面的我们就能够查询到这三个配置项文件了,同时还能列出这些配置项的内容。
而我们在根目录下查询就只能得到:
到这里大家就能明白git config的相关配置了吧。不同的参数到底修改哪个文件配置了。这样如果出现了问题我们个人也知道该如何进行定位修改。不管如何配置这几个配置文件都大同小异。
我们知道了config是用来干什么的,那么config之中可以存储些什么东西呢?其实我们用的最多也许就是用户信息了。
因为Git的每次提交都会需要用户名和邮箱信息,并写入到每次提交日志中。而这个数据的来源就是config中存储的。
$ git config --global user.name "zinyan"
$ git config --global user.email zinyan@126.com
通常大家会配置在当前用户角色的config之中。这样可以减少改动。
我们如果在项目目录下配置,可以省略--local 。默认就是修改当前项目的config配置。
给user.name
和 user.email
参数赋值而已。
我们使用Git输入信息时,Git会自动调用操作系统默认的文本编辑器。而我们如果想使用不同的文本编辑器例如 Emacs等。
可以通过以下命令进行配置(Mac 和Linux 系统上):
$ git config --global core.editor emacs
其实就是给core.editor
参数赋值为emacs
而已。
而我们如果是Windows系统那么赋值就需要是该文本编译器的完整可执行路径。例如:
$ git config --global core.editor "C:\Program Files\Typora\Typora.exe"
例如我们针对每次Git提交的日志有模板要求。那么就可以通过该项配置。在我们 运行git commit时会自动在编译器中配置目标内容。
$ git config --global commit.template ~/.gitmessage.txt
而gitmessage.txt 文件根据我们自己的需求可以进行配置内容。
git默认使用less进行分页器使用。主要就是打印log,或diff等命令产生的数据量过大。页面一页无法显示。就会默认使用less进行分页操作,让内容可以分页显示。
而我们可以设置该参数,在内容过多的时候仍然一页显示:
$ git config --global core.pager ''
设置为空值就是代表不使用分页器了。我们还可以使用其他的more,或我们喜欢的分页器。
小知识:q退出分页器,h显示帮助,b上一页,空格下一页
我们都知道,通过.gitignore文件可以配置忽略项。但是每次都通过项目提交时配置一下比较繁琐和低效。
我们可以将需要过滤的文件列一个清单例如:
然后配置:(具体的路径根据我们存储的gitignore实际地址决定)
$ git config --global core.excludesfile ~/.gitignore
然后git就会将相关的文件统一添加为过滤了。
更多的关于color.*的相关操作都是在终端输出内容的着色处理。针对关键词和内容进行颜色标注,可以方便我们定位问题。
主要针对不同操作系统,共同维护同一项目时,由于操作系统针对换行和空白符定义的不一致问题进行处理。
假如在 Windows 上写程序,而同伴用的是其他系统(macOS),你可能会遇到 CRLF 问题。因 为 Windows 使用回车(CR)和换行(LF)两个字符来结束一行,而 macOS 和 Linux 只使用换行(LF)一个字 符。虽然这是小问题,但它会极大地扰乱跨平台协作。许多 Windows 上的编辑器会悄悄把行尾的换行字符转换 成回车和换行, 或在用户按下 Enter 键时,插入回车和换行两个字符。Git 可以在你提交时自动地把回车和换行转换成换行,而在检出代码时把换行转换成回车和换行。
如果是在 Windows 系统上,把core.autocrlf 设置成 true,这样在检出代码时,换行会被转换成回车和换行:
$ git config --global core.autocrlf true
针对空白符也有相关的配置项:core.whitespace。它可以分别监控行尾的空格(blank-at-eol),文件底部的空行(blank-at-eof),tab前面的空格(space-before-tab)。
还有更多的相关配置,这里就不详细展开了。有兴趣可以通过Git - 配置 Git (git-scm.com) 了解更多的配置。
上面看到的,都是一些git配置好的项目。那么我们如果配合一些其他工具等使用时。能否配置自己需要的项目呢?
当然是可以的。通过add参数就可以配置了
格式内容:git config [--local|--global|--system] --get section.key value
示例:
$ git config --global --add zinyan.name zinyan
我们可以主动添加一个项目为zinyan。然后它的key叫做name,值是zinyan
格式内容:git config [--local|--global|--system] --unset section.key
示例:
$ git config --global --unset zinyan.name
ps: 这些都是通过命令的形式处理,我们如果实在不会处理这个命令的操作。我们可以直接通过文本文档修改相应的config文件。
最后,再重新汇总一下关于config的查询。
$ git config --list --show-origin //查询
$ git config --show-origin user.name //查询指定的项目参数值, 例如查询user.name 的最终生效值
到这里,针对git config的相关知识就差不多了。