02. Git 配置总踩坑?全局/仓库/SSH 密钥一次搞懂
「Git」系列已发布: 00. 改崩代码不敢回退?Git 版本控制 3 分钟救你狗命 | 01. Git 装完不会配?Windows/macOS/Linux 三端配置一次到位 | 02. Git 配置总踩坑?全局/仓库/SSH 密钥一次搞懂(本文) | 03. add/commit/push 别再死记:Git 工作流核心概念实操
全局配置、仓库级配置、SSH 密钥——Git 配置的层级与优先级常让人迷糊。本文一次讲清所有细节,从此配置不再靠试错。
确保已装好 Git(见第 01 篇)。不需要其他软件。
一、Git 的三层配置体系
Git 的配置分成三层,每层作用域和优先级都不一样。搞懂这个,后面配什么都不会乱。
| 层级 | 配置文件路径 | 作用范围 | 优先级 | 常用来干嘛 |
|---|---|---|---|---|
| 系统级 | /etc/gitconfig(Linux/macOS);C:\ProgramData\Git\config(Windows) |
本机所有用户 | 最低 | 企业统一策略、安全基线 |
| 全局级 | ~/.gitconfig或~/.config/git/config |
当前用户所有仓库 | 中 | 个人信息、编辑器偏好 |
| 仓库级 | <repo>/.git/config |
当前仓库 | 最高 | 仓库特有的远程地址、分支策略 |
同一个配置项在多个层级都设了的话,仓库级盖全局级,全局级盖系统级。Git 读配置"就近优先"——从仓库级开始,逐级往上找。
1.1 查看各层级配置
# 系统级
git config --system --list
# 全局级
git config --global --list
# 仓库级(要在 Git 仓库目录里跑)
git config --local --list
# 所有层级合并后的最终效果
git config --list
# 看每个配置项出自哪个文件
git config --list --show-origin
# 输出示例:
# file:/home/user/.gitconfig user.name=Zhang San
# file:/home/user/.gitconfig user.email=zhangsan@example.com
# file:.git/config core.repositoryformatversion=0
# file:.git/config remote.origin.url=git@gitlab.com:team/project.git
1.2 用户身份配置
提交之前必须设用户名和邮箱——Git 靠这个来标识每次提交是谁干的。
# 全局配(推荐,所有仓库默认用)
git config --global user.name "Zhang San"
git config --global user.email "zhangsan@example.com"
# 仓库级覆盖(公司项目用企业邮箱,个人项目用私人邮箱)
cd /path/to/work-project
git config --local user.name "Zhang San"
git config --local user.email "zhangsan@company.com"
1.2.1 多身份自动切换
同时维护个人和公司项目的人经常会头疼:这个仓库到底用了哪个邮箱?解决方案是用includeIf:
# 编辑 ~/.gitconfig,加以下内容
[includeIf "gitdir:~/work/"]
path = ~/.gitconfig-work
[includeIf "gitdir:~/personal/"]
path = ~/.gitconfig-personal
然后分别创建两个文件:
# ~/.gitconfig-work
[user]
name = Zhang San
email = zhangsan@company.com
# ~/.gitconfig-personal
[user]
name = san-zhang
email = san@gmail.com
搞定之后
,~/work/下的仓库自动用企业配置,~/personal/下自动切个人配置。不用每次 cd 进去再手动设了。
二、编辑器与 diff/merge 工具
2.1 默认编辑器
# VS Code
git config --global core.editor "code --wait"
# Vim
git config --global core.editor vim
# Sublime Text
git config --global core.editor "subl -n -w"
# macOS TextEdit(备用)
git config --global core.editor "open -W -n"
这个编辑器会在
git commit(不带-m)和git rebase -i时弹出来。
三、diff 和 merge 工具
# 可视化 diff 用 VS Code
git config --global diff.tool vscode
git config --global difftool.vscode.cmd "code --wait --diff \$LOCAL \$REMOTE"
# 可视化 merge 用 VS Code
git config --global merge.tool vscode
git config --global mergetool.vscode.cmd "code --wait --merge \$REMOTE \$LOCAL \$BASE \$MERGED"
# 实际使用
git difftool HEAD~3 HEAD # 可视化看最近 3 次提交的差异
git mergetool # 冲突时启动可视化合并
四、别名:建你自己的命令工具箱
别名是提升日常效率最快的手段。把常用命令映射成短别名,省掉大量重复输入。
4.1 基础别名
# 状态和切换
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.lg "log --oneline --graph --decorate --all"
git config --global alias.lg10 "log --oneline --graph --decorate -10"
git config --global alias.ll "log --pretty=format:'%C(yellow)%h%Creset %C(cyan)%ad%Creset %s %C(green)(%an)%Creset' --date=short"
# diff
git config --global alias.d diff
git config --global alias.dc "diff --cached"
git config --global alias.ds "diff --stat"
4.2 稍微进阶一点的
# 看每个作者提交了多少次
git config --global alias.count "shortlog -sn"
# 撤销上一次提交,保留修改
git config --global alias.undo "reset --soft HEAD~1"
# 看还没合进当前分支的分支
git config --global alias.unmerged "branch --no-merged"
# 已合并的
git config --global alias.merged "branch --merged"
# 列出所有别名
git config --global alias.alias "config --get-regexp ^alias\."
# 当前分支名
git config --global alias.current "rev-parse --abbrev-ref HEAD"
4.3 带参数的外部命令
别名开头加!可以执行 Shell 命令:
# 删掉已合并到当前分支的本地分支(排除 main 和当前分支)
git config --global alias.clean-branches '!git branch --merged | grep -v "\*\|main\|master" | xargs -r git branch -d'
# 看看每个文件的行数贡献
git config --global alias.lines "!git ls-files | xargs wc -l"
# 拉取所有远程分支到本地
git config --global alias.fetch-all "!git branch -r | grep -v '\->' | while read remote; do git branch --track \"${remote#origin/}\" \"$remote\"; done && git fetch --all"
验证:
git alias
# 或
git config --global --get-regexp alias
五、换行符与编码:跨平台的隐形坑
换行符差异是跨平台协作里最常见的隐形问题。Windows 用 CRLF(\r\n),macOS/Linux 用 LF(\n)。
5.1 core.autocrlf
| 值 | 行为 | 适合谁 |
|---|---|---|
true |
提交时 CRLF→LF,检出时 LF→CRLF | Windows 开发者 |
input |
提交时 CRLF→LF,检出时不转 | macOS/Linux 开发者 |
false |
完全不转 | 纯二进制项目或统一了换行符 |
# macOS/Linux
git config --global core.autocrlf input
# Windows
git config --global core.autocrlf true
5.2 .gitattributes 精细控制
如果需要更精确的控制,用.gitattributes文件:
# 所有文本文件统一换行符为 LF
* text=auto
# 特定文件类型
*.sh text eol=lf
*.bat text eol=crlf
# 二进制文件不做转换
*.png binary
*.jpg binary
*.pdf binary
5.3 编码
# 提交信息用 UTF-8
git config --global i18n.commitEncoding utf-8
# 日志输出用 UTF-8
git config --global i18n.logOutputEncoding utf-8
# 中文文件名别转义
git config --global core.quotepath false
六、凭据管理
HTTPS 方式推拉代码,每次输密码太烦了。配一下凭据管理:
# macOS — 系统钥匙串
git config --global credential.helper osxkeychain
# Linux — 缓存凭据(默认保留 15 分钟)
git config --global credential.helper cache
# Linux — 自定义超时(单位秒)
git config --global credential.helper 'cache --timeout=3600'
# Linux — 永久存储(明文,安全性较低)
git config --global credential.helper store
# Windows — Git Credential Manager(Git for Windows 自带)
git config --global credential.helper manager
七、性能相关
# 文件系统缓存(Windows 平台提升明显)
git config --global core.fscache true
# untracked 文件缓存(大型仓库建议开)
git config --global core.untrackedCache true
# 并行索引预加载
git config --global core.preloadindex true
# 增加 delta 压缩线程数(0 = 自动检测 CPU 核心数)
git config --global pack.threads 0
# 限制 delta 压缩内存(512MB)
git config --global pack.deltaCacheSize 512m
# 大文件压缩级别(1-9,低值更耗 CPU 但更快)
git config --global core.compression 1
八、日常管理
8.1 备份全局配置
cp ~/.gitconfig ~/.gitconfig.backup
# 提取关键配置项便于迁移
git config --global --list | grep -E "(user\.|core\.|alias\.)" > git-config-essentials.txt
8.2 团队统一配置
在项目里维护一份仓库级配置,纳入版本控制:
# 项目根目录下创建 .gitconfig-repo
# .gitconfig-repo
[pull]
rebase = true
[merge]
ff = only
# 引用
git config --local include.path ../.gitconfig-repo
8.3 配置审计
# 定期检查可能出问题的配置
git config --list | grep -E "(autocrlf|filemode|ignorecase)"
# 看某个配置项从哪来的、当前值是什么
git config --show-origin user.name
九、文章引用
📌 本文首发于微信公众号 【运维知识点滴】——专注运维实战干货,微信搜索“运维知识点滴”或扫下方二维码关注,更新不迷路。
📎 微信原文:02. Git 配置总踩坑?全局/仓库/SSH 密钥一次搞懂
| 微信公众号【运维知识点滴】 | 微信小程序【A5单据合并&大试卷拆分转A4打印】 |
|---|---|
![]() |
![]() |
| 运维实战干货 · 关注追更 | Word 转 PDF · 试卷/发票打印神器 · 免费 |
💡 小程序【A5单据合并&大试卷拆分转A4打印】是干嘛的? 一个 Word 转 PDF 的打印神器,专治“文档版式和打印机对不上”:
- A3 试卷打不出来? 学校发的电子版试卷多是 A3,家用打印机只吃 A4——上传 Word 一键转换:可缩到一页 A4(页数不变),也可对半拆成两张 A4(1:1 原大、字更清晰),两种模式自选;
- 版式不乱:真实渲染引擎原样转换、绝不重排内容,转出的 PDF 和原 Word 排版一致,公式/表格/图片不跑版;
- 两张 A5 单据拼一张 A4:出租车票、火车票等报销凭证拼版后,一次打印、整齐粘贴;
- 隐私省心:无需注册,转换结果留存 5 天、最多下载 5 次即自动删除,不留任何历史记录;
- 微信扫码即用,免费、免安装,支持 doc / docx(≤50MB)。
上一篇:01. Git 装完不会配?Windows/macOS/Linux 三端配置一次到位 | 下一篇:03. add/commit/push 别再死记:Git 工作流核心概念实操

