Git的基本配置

计算机技术
作者

zenggyu

发布于

2018-08-27

修改于

2023-07-08

摘要

本文首先介绍了实现Git配置的几种形式(包括全局配置、本地配置和临时配置),然后针对日常使用中涉及到的多项重要配置的意义和配置方法分别进行了讲解。

引言

本文主要介绍使用Git创建仓库之后所需进行的一些基本配置。如果你的电脑上还没有安装Git,那么可以在其官方网站上了解如何进行安装。在完成安装后,请根据你的操作系统类型来决定如何实现后文将介绍到的操作:如果你使用的是Linux或Unix(包括macOS)操作系统,那么可以通过Shell终端进行有关操作;如果你使用的是Windows系统,那么请在开始菜单中找到并打开一个叫“Git Bash”的终端程序来进行有关操作。

按照作用范围来划分,Git的配置可以分为全局配置、本地配置和临时配置;全局配置和本地配置都是持久化的、能够影响所有命令,且前者作用范围覆盖当前操作系统用户可以操作的所有仓库,而后者的作用范围仅限于一个仓库;而临时配置只能对单个命令起效一次。就优先度而言,临时配置最高、全局配置最低,本地配置则位于两者之间(优先度高的配置会覆盖优先度低的配置)。以下是实现前述三类配置的命令样式:

# 全局配置
git config --global <参数名> <参数值>

# 本地配置
git config --local <参数名> <参数值>

# 临时配置
git -c <参数名>=<参数值> <子命令> # 可以同时使用多个-c选项指定多个临时配置;<子命令>必须位于临时配置之后;<子命令>可以是add、commit、push等

需要注意的是,如果要进行本地配置,必须先将终端的工作目录切换至需要接受配置的仓库所在目录,再运行git config --local命令;而全局配置和临时配置对终端工作目录则没有要求。为简便起见,后文将介绍的配置均以全局配置的形式实现(对于Git的初学者来说,全局配置应该就能够满足基本需求了)。

用户信息配置

使用Git之前首先需要配置的就是用户信息,包括用户名和邮箱;这是因为每次在Git中提交文件修改时,程序都会读取前述配置,并且将其写入提交信息之中。以下指令展示了如何在Git中配置用户名;当你运行该指令时,请将指令中的zenggyu替换成你自己希望使用的用户名。

git config --global user.name zenggyu

类似地,用户邮箱可以通过以下指令进行设置;当你要运行该指令时,请将[email protected]替换成你自己的邮箱地址。

git config --global user.email [email protected]

文件路径显示配置

默认情况下,有些Git命令(例如git statusgit diff)会将文件路径里的中日韩字符视为特殊字符,并且以字符编码的形式显示(例如,“中文名称”这几个字会被显示成“\344\270\255\346\226\207\345\220\215\347\247\260”)。这些编码不便阅读,会造成使用上的不便。为了避免这种情况,你可以进行以下配置,使有关指令直接显示各种字符,而不要显示其编码。

git config --global core.quotepath false

换行符配置

Linux系统以及Unix系统(如macOS)所使用的文本换行符是LF,而Windows系统使用的文本换行符是CRLF;这种差异会为跨平台文件版本控制及协作带来一些问题。为了避免相关问题,我们可以做此约定:保存于版本库中的文本文件统一使用LF作为换行符;而工作区中的文本文件选用的换行符则依操作系统类型而定。

如果你是Linux或Unix(包括macOS)用户,请进行以下配置,避免Git对换行符进行自动转换,进而遵守上述约定:

git config --global core.autocrlf input

如果你是Windows用户,请进行以下配置,使Git在把工作区的文件提交至版本库时自动将文件中的CRLF替换成LF,同时在从版本库中检出文件至工作区时自动将LF转换成CRLF,进而遵守前述约定:

git config --global core.autocrlf true

需要注意的是,Git在对换行符进行自动替换的过程中可能会引入数据损坏;所以,无论你使用的是何种操作系统 1 ,都应该进行以下设置,使Git在替换换行符前先进行测试,以避免某些可能导致数据损坏的情形:

1 严格来说,如果你是Linux或Unix(包括macOS)用户,并且按照本文的建议将core.autocrlf参数设置为input,那么你可以忽略这个配置;不过,多设置了也有益无害。

git config --global core.safecrlf true

编辑器配置

在进行某些操作的时候,Git会调用编辑器,供用户输入信息。在某些系统上(例如Windows),默认的编辑器是Vim;但该编辑器功能复杂、比较难用,所以最好使用其他编辑器替代。作为一款轻量级的编辑器,nano用起来比较简单,而且无需额外安装2,因此是理想的替代品。要将nano设置成Git的默认编辑器,请使用以下指令:

2 Linux和Unix(包括macOS)系统基本上都自带nano编辑器;对Windows系统而言,较新版本的Git for Windows安装程序已经包含了nano编辑器,该编辑器会随Git一并被安装到系统上。

git config --global core.editor nano

忽略文件可执行权限变化

有些文件系统(例如Linux的ext4)能够记录文件的可执行权限信息,而另一些文件系统(例如Windows的NTFS)并不记录该信息;当文件从前一类系统移动到后一类系统时,可能发生权限信息的丢失。为了避免Git将这类变化视为文件变更,可以进行以下配置:

git config --global core.filemode false

权限凭证存储

注意:切忌在公用电脑或其他自己无法掌控隐私的设备上进行此项设置!

在向Github或GitLab等远程Git仓库推送或拉取代码时,需要进行权限验证。如果不希望每次操作时都要输入用户和密码等信息,可以借助Git Credential Manager (GCM)实现验证信息的自动记忆和填充;这份文档介绍了如何在各类操作系统上安装GCM。

对于Windows和macOS操作系统,GCM安装完成后即可生效、无需额外配置;对于Linux操作系统,则还需要配置凭证存储才可实现验证信息的记忆和填充(详见这份文档),其简要步骤如下(以Ubuntu发行版为例):

  1. 安装相关软件:

    sudo apt install pass gpg
  2. 创建新的GPG秘钥,或列出已有的秘钥以供选择:

    gpg --gen-key # 创建新秘钥并显示其uid
    gpg --list-secret-keys # 显示已有的秘钥及其uid
  3. 选择与新GPG秘钥或已有秘钥对应的uid,初始化秘钥存储:

    pass init <gpg-uid>
  4. 进行以下配置操作:

    git-credential-manager configure
    git config --global credential.credentialStore gpg

进行上述配置后,你只需要在第一次向远程仓库进行代码推送时提供验证信息(用户名、密码等);之后再向同一仓库进行推送时,无需再输入信息。

如果需要删除凭证,可以使用git credential reject命令,然后输入与需要删除的凭证对应的协议(protocol)和服务器(host)(并按两下回车结束输入);以Github为例:

git credential reject
protocol=https
host=github.com

如需验证凭证是否已经被删除,可以使用git credential fill命令(如果没有返回用户名及凭证,则代表已被删除):

git credential fill
protocol=https
host=github.com

检查及修改配置

要检查当前的所有全局配置,请使用以下指令:

git config --global --list

如果在检查配置后,发现某些配置有误,可以使用以下指令删除配置(在进行实际操作时需要把以下指令中的<参数名>换成具体的参数名,例如用户名user.name)、再重新配置:

git config --global --unset <参数名>

如需删除某些有多个取值的配置,可以将上面的--unset选项换成--unset-all

小结

以上就是安装Git之后需要进行的一些基本配置;这些配置在绝大多数情况下都是适用且必要的。另外,本文附录部分还会提供一些可选的、但不是特别重要的配置,可根据实际需要决定是否进行配置。

附录:其它可选配置

git difftool命令指定差异工具(需要另外安装差异工具,比如meld):

git config --global diff.tool meld