Git命令行的通用形式如下:
git
对于选项,可以是英文单词全拼,也可以是缩写,如果是全拼,那么就用两个横线(--)来引导;如果是简称,则使用一个横线(-)来引导。
本文从配置用户名和email这个使用Git第一步需要做的配置开始,解释Git的config命令的使用,以及以点带面展开相关的重要内容,想到哪儿说到哪儿。
1. 让Git知道你是谁
Git使用名字和email来识别一个人的身份,这样在一个源控制系统中Git就可以追踪某个用户干了些什么。
git config --global user.name "南山九叔"
git config --global user.email "[email protected]"
其中command(命令)就是config,--global就是命令行选项(command-options),因为global是单词全拼,所以这里是双横线--引导选项。
user.name "南山九叔"
user.name "[email protected]"
是两个操作数
上面这条语句,翻译成正常人的话,就是:配置global文件中的user.name参数为南山九叔、user.name参数为[email protected]。
如果设置完以后,忘了自己设置的名字和email,如何是好?
可以重新配置,也就是说user.name和user.email是随时可以改的。
2. config配置的不同作用域
Git可以同时跟踪许多个仓库,因此为每一个仓库配置一次很繁琐,甚至会忘掉,所以Git提供了三个级别的作用域:系统(system)、全局(global)和本地(local),以指定配置参数的作用范围。
(1)系统(system)级别
配置信息在系统(电脑)上所有仓库有效,除非在一个更具体的(更低级别)级别上对其重写,否则他对系统上所有的仓库有效。比如我使用的是一台windows 10系统的电脑,电脑上有“南山九叔”、“xqlu”、“Admin”三个用户,配置成system级别的参数对电脑上所有的用户的仓库都有效。
要在系统级别进行配置,应该指定system范围,即config命令后跟--system选项。例如:
git config --system user.name "南山九叔"
git config --system user. email "[email protected]
(2)全局(global)级别
配置信息对电脑上当前登录用户的所有仓库有效,除非在一个更具体的(更低级别)级别上对其重写。比如我使用的是一台windows 10系统的电脑,电脑上有“南山九叔”、“xqlu”、“Admin”三个用户。当前登录的是xqlu,那么配置成global级别的参数对xqlu的所有仓库都有效,而对南山九叔和Admin这两个用户无效。
要在全局级别进行配置,文件应该选择--global,即给config命令指定--global选项。例如:
git config --global user.name "南山九叔"
git config --global user. email "[email protected]
(3)本地(local)级别
配置信息默认将在Git仓库下的.git/config文件中(或者也有可能被存储在Git目录被分配到的任何位置之下的config子目录中),local是一个具体的(有效范围小,但是级别更高)配置,它能够覆盖掉system和global的配置,这就是配置重写。
比如我使用的是一台windows 10系统的电脑,电脑上有“南山九叔”、“xqlu”、“Admin”三个用户。当前登录的是xqlu,我有a、b、c三个仓库,那么在c仓库上配置成local级别的参数仅对c仓库都有效,而对a和b仓库无效。
要在local级别进行配置,文件应该选择--local,即给config命令指定--local选项。例如:
git config --local core.autocrlf true
local是默认级别,如果不显性指定,默认的配置都是local级别。如下面的配置与上一句等价:
git config core.autocrlf true
Git是如何实现不同级别配置的有效范围的?
Git会以特定的搜索顺序寻找配置,第一次找到配置之后就使用这个配置。首先是local,然后是global,最后是system,这就保障了优先级级别local>global>system。如Figure 1所示。
Git中所有级别的配置总和就形成了处理一个仓库时所使用的配置值的超集。
3. 查看config的配置值
如何查看配置值呢?只要在git bash中使用该配置命令(后面不要跟任何配置值),就会显示出该项的配置值。
git config
例如我要看当前仓库的user.name是谁,只需要如下命令:
git config user.name
git bash会输出user.name的配置值,假如没有配置,我们可以用如下命令在global域进行配置(配置到其他域也可以):
git config --global user.name "南山九叔"
细心的用户会发现,这里我并没有指定是system还是global还是local范围,所以Git会自动去按照上一节说的搜索顺序搜索。
4. 移除config的配置值
如果我们想移除某一个级别上的一个用户设置,Git提供了unset选项,后面跟操作数,指定移除那个级别的什么配置。
git config --unset <其它选项> <要移除的值>
举个例子会说的更清楚:
git config --unset --local user.name
移除操作不会返回任何消息,这是linux一贯的响应风格。到底有没有移除?我们可以使用上一节说的查看config配置值的方法查看。
5. 列出config的配置清单
上面给出了查看某个配置项的值的方法,这样可以精确的去看当前仓库有效的配置值(因为它按照适配优先级给出的配置值,所以是有效的)。但是如果我想看所有的配置项呢?可以使用list选项来实现这个梦想。具体如下:
git config --list
上面的命令将列出所有的设置值,而且是没有去适配的,也是就是说system、global和local都会列在清单里,这样你得到的清单中同一个项目可能有多个值,这就是因为他们来自不同的作用域。为了避免这种多个值出现的情况,可以限定作用域,列出某一个作用范围内的配置清单,例如我们要看local作用范围的清单,可以使用如下命令:
git config --list --local
这里特别要指出,选项是没有顺序区分的,上一句与下面这句的作用一样。
git config --local --list
6. 配置文件到底在哪里?
配置项都是来自于config文件的,config是一个纯文本文件,可以使用任何文本文件查看器或编辑器查看。那我的配置文件到底在哪里?可以使用--show-origin选项来溯源。例如我想知道我的user.name 配置在什么地方,可以是使用如下命令:
git config --show-origin user.name
如Figure 4所示,显示当前生效的user.name的配置在file:F:/Users/xqlu/AppData/Roaming/SPB_Data/.gitconfig中,配置值为xqlu。
7. 一次性配置
确实存在一次性配置这种配置方法,临时配置仅仅在本次会话中有效。但是……我真心不推荐,这是一种非标准化的开发方式,这里我就不说了,确实好奇有这个想法的朋友可以自己去查资料。