Git配置的三个作用域和常见配置项
Git 有三个配置级别:local(仓库)>global(用户)>system(系统),优先级从高到低。配置文件分别在 .git/config、~/.gitconfig、/etc/gitconfig。常用配置:user.name/email、credential.helper store 记住密码、alias 别名、代理。
Git 的配置系统分三个层级,很多人都搞混了,特别是在多个项目、多个机器之间切换时。搞清楚这三个层级,配置 Git 就没啥难的。
Git 配置的三个层级
从高到低的优先级:
-
Local(仓库级别):只对当前仓库生效
- 配置文件:
.git/config - 范围:当前仓库目录
- 命令行参数:
git config --local
- 配置文件:
-
Global(用户级别):对当前用户的所有仓库生效
- 配置文件:
~/.gitconfig(Linux/Mac)或C:\Users\<用户名>\.gitconfig(Windows) - 范围:当前用户
- 命令行参数:
git config --global
- 配置文件:
-
System(系统级别):对整个系统的所有用户生效
- 配置文件:
/etc/gitconfig(Linux/Mac)或C:\ProgramData\Git\config(Windows) - 范围:整个系统
- 命令行参数:
git config --system - 通常需要管理员权限
- 配置文件:
优先级示意图:
Local > Global > System
如果三个级别都设置了同一个配置项,Git 会优先用 Local 的值。
查看配置
# 查看所有配置(包括三个级别,优先级从高到低)
git config -l
# 查看当前生效的配置(会显示来源文件)
git config -l --show-origin
# 只查看当前级别的配置
git config -l --local # Local
git config -l --global # Global
git config -l --system # System
# 查看单个配置项
git config user.name
git config --local user.name
设置和删除配置
# 设置配置项
git config --global user.name "mebugs"
git config --global user.email "[email protected]"
# 删除配置项
git config --global --unset user.name
# 编辑配置文件(推荐)
git config --global --edit # 用编辑器打开 ~/.gitconfig
git config --local --edit # 用编辑器打开 .git/config
常见配置项
身份认证配置
# 设置用户名和邮箱(必须,否则 commit 会失败)
git config --global user.name "mebugs"
git config --global user.email "[email protected]"
# 为不同的仓库设置不同的邮箱
cd ~/my-company-repo
git config --local user.email "[email protected]" # 这个仓库用公司邮箱
凭证存储
每次 push 都要输密码很烦。Git 可以记住凭证。
# 方式一:用系统的凭证管理器(推荐)
git config --global credential.helper store # Linux/Mac
git config --global credential.helper wincred # Windows
# 第一次 push 时输入用户名和密码,后续会自动记住
# 方式二:缓存凭证 15 分钟(security 更好)
git config --global credential.helper cache
git config --global credential.helper "cache --timeout=3600" # 1 小时
# 方式三:不推荐,明文存在文件
git config --global credential.helper store # 会把凭证存在 ~/.git-credentials(明文!)
store 方式会把凭证明文保存在 ~/.git-credentials,有安全隐患。用 wincred(Windows)或 osxkeychain(Mac)更安全。
编辑器配置
# 设置默认编辑器(写 commit message 或 rebase -i 时用)
git config --global core.editor "vim"
git config --global core.editor "nano"
git config --global core.editor "code --wait" # VS Code
# 如果编辑器路径有空格,要加引号
git config --global core.editor "C:\Program Files\Notepad++\notepad++.exe"
别名配置
减少打字,提高效率。
# 常用别名
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.unstage "reset HEAD --"
git config --global alias.last "log -1 HEAD"
git config --global alias.visual "log --graph --oneline --all"
# 之后可以用
git st # 替代 git status
git co main # 替代 git checkout main
git ci -m "msg" # 替代 git commit -m "msg"
git last # 看最后一个 commit
也可以直接编辑 ~/.gitconfig:
[alias]
st = status
co = checkout
br = branch
ci = commit
unstage = reset HEAD --
last = log -1 HEAD
visual = log --graph --oneline --all
代理配置
如果在公司网络后面,需要走代理。
# HTTP/HTTPS 代理
git config --global http.proxy http://proxy.company.com:8080
git config --global https.proxy https://proxy.company.com:8080
# Socks5 代理
git config --global http.proxy socks5://127.0.0.1:1080
# 仅对某个域名走代理
git config --global http.https://github.com.proxy socks5://127.0.0.1:1080
# 取消代理
git config --global --unset http.proxy
换行符配置
Windows 和 Linux 对换行符的处理不同(CRLF vs LF)。
# 推荐做法:在 Git 里用 LF,提交到仓库时自动转换
git config --global core.safecrlf true
git config --global core.autocrlf true # Windows
git config --global core.autocrlf input # Linux/Mac
# core.autocrlf 的三个选项
# true: 提交时 CRLF→LF,拉取时 LF→CRLF(Windows)
# input: 提交时 CRLF→LF,拉取时保持 LF(Linux/Mac)
# false: 不做任何转换
默认分支名
# 设置新仓库的默认分支名(Git 2.28+)
git config --global init.defaultBranch main # 不用 master
# 之后 git init 会创建 main 分支而不是 master
颜色和输出
# 开启彩色输出
git config --global color.ui true
# 自定义颜色
git config --global color.diff.new green
git config --global color.diff.old red
# 分页输出
git config --global core.pager "less -R" # 用 less 显示,-R 保留颜色
完整的 Global 配置示例
# 一次性配置好,后面就不用改了
git config --global user.name "mebugs"
git config --global user.email "[email protected]"
# 凭证
git config --global credential.helper store
# 编辑器
git config --global core.editor "vim"
# 别名
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.unstage "reset HEAD --"
git config --global alias.last "log -1 HEAD"
git config --global alias.visual "log --graph --oneline --all"
# 换行符
git config --global core.autocrlf input
git config --global core.safecrlf true
# 默认分支名
git config --global init.defaultBranch main
# 颜色
git config --global color.ui true
最后查看一下是否都设置好了:
git config --global -l
Local vs Global 使用场景
场景一:公司和个人项目用不同的邮箱
# 全局用个人邮箱
git config --global user.email "[email protected]"
# 公司项目的仓库用公司邮箱
cd ~/work/company-project
git config --local user.email "[email protected]"
# 查看当前生效的邮箱
git config user.email # 会显示 [email protected](local 优先级高)
场景二:某个项目不走代理
# 全局设置代理
git config --global http.proxy socks5://127.0.0.1:1080
# 某个项目关闭代理
cd ~/no-proxy-needed
git config --local http.proxy ""
# 或者清除代理
git config --local --unset http.proxy
场景三:团队统一配置
如果团队有统一的配置要求(比如 commit message 格式),可以在仓库里提交一个 .gitconfig 文件,然后让大家用 local 配置指向它(Git 2.9+):
# .git/config 里
[include]
path = ../.gitconfig-shared # 包含根目录的 .gitconfig-shared
调试配置问题
# 查看某个配置项的来源
git config --show-origin user.name
# Output: file:/home/mebugs/.gitconfig\tmebugs
# 列出所有配置及其来源
git config --list --show-origin
# 查看执行 Git 命令时的 debug 信息
GIT_TRACE=1 git status
GIT_TRACE_PERFORMANCE=1 git status
小结
Git 配置的三个层级:
- Local(.git/config):当前仓库,优先级最高
- Global(~/.gitconfig):当前用户,优先级中等
- System(/etc/gitconfig):整个系统,优先级最低
常用配置项:
- user.name / user.email:必设
- credential.helper:方便凭证存储
- alias:节省打字
- core.editor:编辑器
- core.autocrlf:换行符
- http.proxy:代理
- init.defaultBranch:默认分支名
一旦在 global 级别配置好这些,后续 Git 使用就会顺畅很多,不用每次都重新配置。
