Git配置指南
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 | git config --global user.name <yourname> # 设置 commit 的用户名 |
其它一些可选的基本信息也可以考虑进行配置:
1 | git config --global core.editor vim # 设置 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,因此当 clone
或 pull
到 Windows 文件系统中时,Git 会给文件添加假的 executable bit。
当在 Windows 系统上使用 Git 出现警告信息:old mode 100755 => new mode 100644
,则说明文件模式发生了改变(主要是 st_mode
位发生了变更,755
=rwxr-xr-x
,644
=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
2git config --global core.autocrlf true # Windows 系统
git config --global core.autocrlf input # Linux 和 Mac 系统前一条是告诉 Git 在 Windows 系统上,自动在文件系统和仓库间自动进行
LF
和CRLF
的替换(双向转换);后一条则是告诉 Git 在 Linux 和 Mac 系统上,如果发现仓库中存储的文件使用的是CRLF
换行符,则自动转换成LF
换行符(只是单向转换)。