1. 配置说明

Git 配置分为三种:系统配置全局配置局部配置

配置模式 作用域 Linux 配置文件 Windows 配置文件
系统配置 所有用户的所有仓库 /usr/local/git/etc/gitconfig C:\Program Files\Git\etc\gitconfig
全局配置 当前用户的所有仓库 $HOME/.gitconfig $HOME\.gitconfig (PowerShell)
%UserProfile%\.gitconfig (CMD)
局部配置 当前用户的当前仓库 .git/config .git\config

Git 三种配置文件的读取顺序为:系统配置 -> 全局配置 -> 局部配置。当多个配置文件中存在相同配置项时,后面读取的配置会覆盖前面读取的配置。

2. 配置读写

Git 的配置读写操作参数如下(命令前缀固定为 git config):

配置 查看 编辑 添加 删除
所有配置 --list
系统配置 --list --system --system --edit --system <key> <value> --system --unset <key> <value>
全局配置 --list --global --global --edit --global <key> <value> --global --unset <key> <value>
局部配置 --list --local --edit
--local --edit
<key> <value>
--local <key> <value>
--unset <key> <value>
--local --unset <key> <value>

如果只想查看某一配置项,则可以使用 git config <key> <value> 来查看。

3. 常用配置

3.1 初始配置

当在系统上刚开始使用 Git 时,一般都需要配置以下基本信息:

1
2
git config --global user.name <yourname>		# 设置 commit 的用户名
git config --global user.email <youremail> # 设置 commit 的用户邮箱

其它一些可选的基本信息也可以考虑进行配置:

1
2
git config --global core.editor vim				# 设置 Git 使用的默认编辑器
git config --global init.defaultBranch main # 设置 Git 在初始仓库时的默认主分支

3.2 长路径

当在 Windows 系统上 clone 或者 pull 时,如果出现报错信息:error: unable to create xxx: Filename too long,则说明仓库中存在路径过长的文件,本质是 Windows 文件系统的问题,详细说明可参见Windows10下路径名称限制。此时就需要启用长路径选项来解决:

1
git config --global core.longpaths true

Git 本身对文件路径总长的限制是 4096,但在 Windows 系统上,Git 是用 msys 编译的,msys 使用的是旧版本的 Windows API,其对文件路径总长限制是 260。

3.3 文件模式

不同文件系统对于文件模式的设置不同,从而导致不同文件系统间同步仓库时,有可能会出现文件模式的改变。比如 *unix 文件系统上文件有 st_mode 结构,其使用 3 bits 来表示文件的模式(可读/写/执行等);但在 Windows 的文件系统中,文件则没有类似对应于 *unix 文件系统的 executable bit,因此当 clonepull 到 Windows 文件系统中时,Git 会给文件添加假的 executable bit。

当在 Windows 系统上使用 Git 出现警告信息:old mode 100755 => new mode 100644,则说明文件模式发生了改变(主要是 st_mode 位发生了变更,755=rwxr-xr-x644=rw-r--r--)。可以禁用 Git 的文件模式,告诉 Git 直接忽略当前系统下的 executable bit 的任何变更:

1
git config --global core.filemode false

3.4 换行符替换

不同系统下的换行符不同,比如 Linux 和 Mac 是 LF,Windows 是 CRLF(早期的 Mac 是 CR)。因此,当使用 Git 在不同系统上同步仓库时,需要将文件中的换行符进行替换,因而会出现警告信息:warning: LF will be replaced by CRLF in xxx

  • 如果你只在相同系统上使用 Git 来同步项目,可以直接将换行符替换功能关闭,则 Git 不会对文件中的换行符做出改变,而是按原样压缩存入仓库:

    1
    git config --global core.autocrlf false
  • 如果你在多个不同系统之间使用 Git 来同步项目,则可以分别针对不同系统设置换行符替换功能:

    1
    2
    git config --global core.autocrlf true		# Windows 系统
    git config --global core.autocrlf input # Linux 和 Mac 系统

    前一条是告诉 Git 在 Windows 系统上,自动在文件系统和仓库间自动进行 LFCRLF 的替换(双向转换);后一条则是告诉 Git 在 Linux 和 Mac 系统上,如果发现仓库中存储的文件使用的是 CRLF 换行符,则自动转换成 LF 换行符(只是单向转换)。

附录