git config 是什么
git config 是读写 Git 配置的唯一入口。配置以「节.键=值」的形式保存,覆盖提交身份、默认分支、编辑器、换行符处理、别名等行为。它既能写也能查,配合 --list 与 --show-origin 可以看清最终生效的值来自哪个文件,是排查「配置怎么不生效」的第一站。
三级作用域
配置分三级:system 作用于整台机器、global 作用于当前用户、local 只作用于当前仓库。同名键按 local 覆盖 global、global 覆盖 system 的顺序生效。这既是同一台机器上不同仓库能使用不同提交身份的原因,也是仓库里改过的值会盖住你全局偏好的原因。
基本信息
| 适用平台 | Linux / macOS / Windows(Git 2.x) |
|---|---|
| 语法 | git config [选项] <键> [<值>] |
| 写入层级 | 默认写 local;--global 写用户级;--system 写机器级 |
| 常用键 | user.name、user.email、init.defaultBranch、core.editor、pull.rebase |
| 别名 | alias.<名字> 定义短命令 |
| 来源查看 | --list --show-origin 显示每个值的文件出处 |
典型使用场景
- 首次安装:设置 user.name 与 user.email,让提交能归属到账号
- 项目差异:在仓库内单独设置提交身份或换行符策略
- 定义别名:把常用长命令缩成 git st、git lg 这类短命令
- 统一默认分支:用 init.defaultBranch 让新仓库默认叫 main
- 复现环境:用 --list --show-origin 导出机器上的有效配置
- 排查异常:确认某个键的有效值到底来自哪一层
常用示例
常用示例
git config --global user.name zhangsan # 设置提交身份
git config --global user.email zhangsan@example.com # 与平台账号保持一致
git config --get user.email # 读取单个键的有效值
git config --list --show-origin | less # 查看全部配置及来源文件
git config --global alias.st status # 定义别名 git st
git config --local core.autocrlf false # 只对当前仓库设置换行符策略
git config --unset alias.st # 删除某个键
git config --edit # 手工编辑当前层配置文件常用配置项
| 键 | 作用 | 建议取值 |
|---|---|---|
| user.name | 提交中显示的作者名 | 与平台显示名一致 |
| user.email | 提交中的作者邮箱 | 必须与账号邮箱一致 |
| init.defaultBranch | 新仓库的初始分支名 | main |
| core.editor | 写提交信息时调用的编辑器 | 按使用习惯填写 |
| pull.rebase | pull 时的默认集成方式 | 团队统一约定后再设 |
| core.autocrlf | 换行符自动转换策略 | 按平台与团队约定 |
| alias.<名字> | 自定义命令别名 | 只在本机生效 |
设置前先用 git config --get 或 --list --show-origin 看现值,可以避免覆盖他人维护的仓库级配置,也能省掉事后排查冲突的时间。
user.email 与平台账号不一致时,提交无法归属到你的账号,贡献统计与评审指派都会出现异常,多账号环境下尤其容易搞混。
local 配置只保存在当前仓库的 .git/config 中,换电脑或重新克隆后不会跟随,需要重配;需要跨项目共享的偏好应该写进 global。
别名只影响你自己的命令行,不会随仓库分发。团队想统一命令口径要靠文档或脚本,不能依赖别人也配了同样的 alias。
什么时候该写哪一层
判断标准是生效范围:只影响你这台机器上所有仓库的偏好写 global;只影响某个项目的策略,例如换行符处理或提交身份,写 local;需要整机统一、而且你有管理员权限时才用 system。动手前先 git config --show-origin 看现值来自哪一层,才知道该覆盖谁。
配置不生效的排查顺序
- 用 --list --show-origin 找出这个键的全部来源与文件路径
- 确认环境变量有没有临时覆盖配置文件里的值
- 确认执行命令时有没有用 -c 传入一次性配置
- 确认当前仓库是否用 local 覆盖了 global 的设置
配置文件本身就是纯文本,可以直接编辑:git config --edit 打开当前层,加 --global 则打开用户级文件。改完用 --list 复核一遍,比在命令行里逐个试参数更直接。