Git配置的三个作用域和常见配置项

Git 有三个配置级别:local(仓库)>global(用户)>system(系统),优先级从高到低。配置文件分别在 .git/config、~/.gitconfig、/etc/gitconfig。常用配置:user.name/email、credential.helper store 记住密码、alias 别名、代理。

Git 的配置系统分三个层级,很多人都搞混了,特别是在多个项目、多个机器之间切换时。搞清楚这三个层级,配置 Git 就没啥难的。

Git 配置的三个层级

从高到低的优先级:

  1. Local(仓库级别):只对当前仓库生效

    • 配置文件:.git/config
    • 范围:当前仓库目录
    • 命令行参数:git config --local
  2. Global(用户级别):对当前用户的所有仓库生效

    • 配置文件:~/.gitconfig(Linux/Mac)或 C:\Users\<用户名>\.gitconfig(Windows)
    • 范围:当前用户
    • 命令行参数:git config --global
  3. 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 使用就会顺畅很多,不用每次都重新配置。

更多推荐

章节目录