ZMonster's Blog 巧者劳而智者忧,无能者无所求,饱食而遨游,泛若不系之舟

自定义Git

配置及配置文件

Git可以使用命令

git config

来进行自定义设置,而这些设置,最终都会被写入对应的配置文件中,然后在适当的时候加载这些配置文件,来确定Git被使用时的一些表现。

Git会在三个可能的地方寻找配置文件

  1. 系统级全局配置文件:/etc/gitconfig,对操作系统上所有用户都起作用
  2. 用户级全局配置文件:~/.gitconfig,对用户的所有代码仓库起作用
  3. 代码仓库级配置文件:<repo>/.git/confg,只对当前对应的代码仓库起作用

Git按照上面的顺序依次寻找配置文件并用其设置Git。

第一个配置文件可能存在也可能不存在,在我的Debian上它是不存在的,可以通过命令:

git config --system

来进行读写。

第二个配置文件可以通过命令:

git config --global

来进行读写。

第三个配置文件可以在相应的代码仓库目录下,通过命令:

git config

来进行读写(注意,不带 –global 选项)。

以上命令都是用于在命令行中对Git的某个设置项进行设置,如果需要打开文件直接编辑,除了在编辑器中来直接打开文件,还可以通过命令:

git config -e

来进行。在其后加上 –system 则会打开/etc/目录下的gitconfig;加上 –global 则会打开用户HOME目录下的配置文件.gitconfig;而在某个代码仓库目录下执行且不加 –system 也不加 –global 选项时,则会打开该代码仓库下的配置文件进行编辑。

在配置文件中,以 '#' 或 ';' 开始的的行会被忽视,即这两个符号被用作注释符。

配置文件的内容形式如下:

[user]
    name = linusp
    email = [email protected]
[credential]
    helper = cache --timeout=3600
[color]
    ui = true

被中括号括起的内容被称为Section,其下有许多

xxx = xxx

的内容,其中等号前面的部分就是实际的配置项,后面的则是该配置项的值。要设置某个Section下面的项的值,以Section user下的name为例,可以通过如下命令:

git config --global user.name linusp

Git 提供了很多的可配置项,具体可以执行

git config --help

然后到 "Variables" 一节查看。

配置: Section user

user下的配置项主要是用于在线认证的,比如说Github。

  • user.name

    设置用户名,比如我在Github上的用户名是'Linusp',那么就设置:

    git config --global user.name Linusp
    

    如果公司使用Git进行代码管理,这一步也是需要的.

  • user.email

    设置邮箱,同上,用于认证。

配置: Section core

  • core.filemode

    设置是否检查文件权限,其值默认为'true',对同样内容、名字的文件,如果其文件权限发生了改变,则会认为发生了'修改'。如果要忽略文件权限的检查,可以将该项的值设置为'false':

    git config core.filemode false
    
  • core.ignorecase

    设置是否忽略文件名大小写的区别,默认为'false',即默认情况下是大小写敏感的。在Windows的文件系统上,将这个项的值设置为'true'可能会比较常见

  • core.autocrlf

    设置Git对行尾的换行符的处理方式。这个设置项主要是为了解决跨平台开发时Windows操作系统与*nix系统上换行符不一致的矛盾。其值有三个可能:

    1. true

      设置为该值时,代码仓库里的代码会保证以*nix的换行符结尾,在用户提交时会把Windows的换行符替换为*nix的换行符,但在用户checkout后将会替换成Windows的换行符。在Windows环境下开发但其合作者中在*nix系统下开发的用户可以将'core.autocrlf'项的值设置为'true':

      git config core.autocrlf true
      
    2. input

      设置为该值时,代码仓库里的代码和checkout的结果都会保证以*nix的换行符结尾,如果提交时的文件中存在Windows的换行符,Git会将其替换为*nix的换行符。

    3. false

      设置为该值时,Git不对文件行结尾的换行符进行检测和处理。

  • core.excludesfile

    设置一个文件,文件中包含一些文件名或者正则表达式,代码仓库中被匹配到的文件将会被视为不是代码仓库中的文件,既不会检查其改动,在执行'git add'的时候也会自动忽略它们。

    在代码仓库中建立名为.gitignore的文件能起到相同的作用。

  • core.editor

    设置'git commit'时编辑提交信息的编辑器,如要设置为vim,则:

    git config --global core.editor vim
    
  • core.pager

    设置在执行'git log'等包含大量输出的命令时的分页器,默认为'less',通过这个项可以将其设置为'more',或者设置为空以关闭分页输出:

    git config core.pager ''
    

配置: Section color

该组配置可以让Git在输出时进行着色——默认情况下都是不着色的,而着色有助于阅读,比如在执行'git diff'和'git log'的时候。

以下命令将会使'git diff'、'git log'、'git status'等带输出的命令对输出进行着色。

git config --global color.ui true

当然也可以打单独对某个命令的输出进行着色设置:

git config --global color.diff true