Git 配置:git config、用户名、邮箱与 SSH 密钥
基本的 Git 配置是执行 git config --global user.name 和 git config --global user.email,它们为你的提交署名;另外还要选择编辑器和默认分支。要免密登录 GitHub,请用 ssh-keygen -t ed25519 生成 SSH 密钥,把公钥添加到账户设置中,并用 ssh -T git@github.com 检查连接。
一分钟完成最基本的 Git 配置
安装完成后,执行以下四条命令。没有前两条,Git 会拒绝提交;后两条则能避免常见的不便。
git config --global user.name "Anna Smirnova"
git config --global user.email "anna@example.com"
git config --global init.defaultBranch main
git config --global core.editor "code --wait"
检查结果:
$ git config --global --list
user.name=Anna Smirnova
user.email=anna@example.com
init.defaultbranch=main
core.editor=code --wait
接下来说明每项设置的作用、Git 将其保存在哪里,以及如何通过 SSH 连接 GitHub。
git config 的工作原理:三个层级
git config 会从三个文件之一读取或写入配置。范围更窄的层级会覆盖范围更宽的层级。
| 层级 | 参数 | 文件 | 作用范围 |
|---|---|---|---|
| 系统级 | --system | /etc/gitconfig(Windows 中位于 Git 安装目录) | 计算机上的所有用户 |
| 全局级 | --global | ~/.gitconfig 或 ~/.config/git/config | 你的所有仓库 |
| 本地级 | --local(默认) | 仓库内部的 .git/config | 仅限该仓库 |
大部分个人设置都应全局配置,特殊情况在本地配置。例如,公司项目使用的工作邮箱,就应当在具体的仓库中设置,不加 --global 参数。
有用的 git config 命令
git config user.email # 查看当前值
git config --list --show-origin # 所有设置,以及每项来自哪个文件
git config --global --edit # 在编辑器中打开 ~/.gitconfig
git config --global --unset core.editor # 删除某个设置
--show-origin 是调试时最好的帮手:它会指出某个值(比如“错误的”邮箱)来自哪个文件。
用户名与邮箱:为什么不是形式主义
每个提交都永久记录了作者的姓名和邮箱。它们不是登录名或密码,Git 不会验证它们。但 GitHub 和 GitLab 通过邮箱把提交与你的账户关联:如果地址与个人资料中任何已确认的邮箱都不匹配,这些提交就不会计入活跃度图,并且会显示为没有头像。
事后修改姓名或邮箱而不改写历史是做不到的,因此请在第一次提交之前检查设置。
隐藏真实邮箱
如果仓库是公开的,任何人都可以在历史中看到你的邮箱。GitHub 提供了一个专用的隐私地址,格式为 ID+username@users.noreply.github.com(可在 Settings → Emails 中找到)。把它设置到 Git 中:
git config --global user.email "12345678+anna@users.noreply.github.com"
工作与个人项目使用不同的邮箱
为了不必在每个工作仓库中手动设置,可以使用条件引入配置。在 ~/.gitconfig 中写入:
[includeIf "gitdir:~/work/"]
path = ~/.gitconfig-work
然后在 ~/.gitconfig-work 中写入:
[user]
email = anna@company.com
这样,~/work/ 下的所有仓库都会自动使用工作邮箱。路径末尾的斜杠是必需的。
其他有用的 Git 设置
编辑器
Git 在编写提交说明、交互式 rebase 和合并时会打开编辑器。默认经常是 Vim。可以选择:
git config --global core.editor "code --wait" # VS Code
git config --global core.editor "nano" # Nano
git config --global core.editor "subl -n -w" # Sublime Text
默认分支
init.defaultBranch main 设置新仓库中第一个分支的名称(自 Git 2.28 起可用)。如果不设置,Git 会创建 master,并提示你更改名称。
换行符
git config --global core.autocrlf true # Windows
git config --global core.autocrlf input # macOS 和 Linux
这样,仓库中始终保存 LF 换行符,团队中也不会出现每一行都“被修改”的情况。
git pull 的行为
如果没有设置策略,当分支出现分叉时,现代 Git 会要求你明确选择。请选定一种:
git config --global pull.rebase false # 合并(merge),默认行为
git config --global pull.rebase true # 变基(rebase),线性历史
git config --global pull.ff only # 只允许快进,否则报错
文件名中的中文与颜色
git config --global core.quotepath false
git config --global color.ui auto
别名
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.lg "log --oneline --graph --decorate --all"
git config --global alias.last "log -1 HEAD"
之后,git lg 会显示分支图,git last 会显示最后一次提交。
配置完成后的 ~/.gitconfig 是什么样子
[user]
name = Anna Smirnova
email = anna@example.com
[init]
defaultBranch = main
[core]
editor = code --wait
autocrlf = input
quotepath = false
[pull]
rebase = false
[alias]
st = status
lg = log --oneline --graph --decorate --all
这是普通的文本文件,可以手动编辑,也可以在不同电脑之间复制。
Git 登录:如何进入 GitHub
Git 没有 git login 命令,这是新手常见的误区。Git 不保存“账户”:身份验证发生在访问服务器时(clone、push、fetch),通过以下两种协议之一完成。
| HTTPS | SSH | |
|---|---|---|
| 地址 | https://github.com/user/repo.git | git@github.com:user/repo.git |
| 身份凭据 | 访问令牌,或通过浏览器登录(Credential Manager) | 一对 SSH 密钥 |
| 账户密码 | 自 2021 年起不再接受 | 不需要 |
| 更适合 | 使用 Git Credential Manager 的 Windows,企业代理环境 | macOS、Linux、服务器、CI |
通过 HTTPS 登录
在 Git for Windows 以及带有 Git Credential Manager 的 macOS 版本中,第一次执行 git push 时会打开浏览器窗口登录 GitHub,凭据保存在系统的凭据库中。另一种方式是官方的 GitHub CLI:执行 gh auth login 即可完成授权并自动配置 Git。如果希望手动操作,可以在 GitHub 的开发者设置(Developer settings)中创建个人访问令牌(Personal access token),并用它代替密码输入。
用于 Git 的 SSH:分步配置
SSH 密钥是一对文件:私钥留在你的电脑上,公钥提供给 GitHub。服务器会验证你持有私钥,此后便不再要求输入密码。
第 1 步:检查是否已有密钥
ls -la ~/.ssh
如果已经有 id_ed25519 和 id_ed25519.pub,直接进入第 3 步。
第 2 步:生成密钥
ssh-keygen -t ed25519 -C "anna@example.com"
按 Enter 键使用默认路径保存密钥,并设置一个口令(passphrase)——如果笔记本被盗,它能保护你的密钥。ed25519 是目前推荐的算法。如果旧系统不支持它,可以使用 ssh-keygen -t rsa -b 4096 -C "anna@example.com"。
第 3 步:把密钥添加到 ssh-agent
ssh-agent 会把解密后的密钥保存在内存中,这样每次 push 时都无需重新输入口令。
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
在 macOS 上,可以在 ~/.ssh/config 中添加以下内容,让口令保存在钥匙串中:
Host github.com
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ed25519
然后执行 ssh-add --apple-use-keychain ~/.ssh/id_ed25519。
第 4 步:把公钥添加到 GitHub
cat ~/.ssh/id_ed25519.pub
复制整行内容,从 ssh-ed25519 开始。在 GitHub 中依次进入 Settings → SSH and GPG keys → New SSH key,粘贴密钥并起一个容易辨认的名称,例如“笔记本 2026”。永远不要发布或分享不带 .pub 后缀的文件——那是私钥。
第 5 步:检查连接
$ ssh -T git@github.com
Hi anna! You've successfully authenticated, but GitHub does not provide shell access.
首次连接时,SSH 会询问是否信任该主机。请对照 GitHub 官方文档中公布的指纹进行核对,然后回答 yes。
第 6 步:把仓库切换为 SSH
如果仓库是通过 HTTPS 克隆的,可以更改 remote 的地址:
git remote -v
git remote set-url origin git@github.com:anna/my-project.git
git push
同一台电脑上使用多个 GitHub 账户
一把 SSH 密钥只能绑定到一个 GitHub 账户。对于工作账户和个人账户,应分别创建两把密钥,并在 ~/.ssh/config 中设置主机别名:
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
IdentitiesOnly yes
通过别名克隆工作仓库:git clone git@github-work:company/app.git。再结合前面针对邮箱的 includeIf 设置,工作环境与个人环境就完全分开了。
配置时的常见错误
“Please tell me who you are”
没有设置 user.name 和 user.email。执行文章开头的命令,然后重新提交。
“Permission denied (publickey)”
GitHub 找不到匹配的密钥。检查密钥是否已添加到 agent(ssh-add -l),公钥是否已添加到账户中;使用 ssh -vT git@github.com 可以查看详细信息。
“Support for password authentication was removed”
你在 HTTPS 方式下输入了账户密码。请改用令牌、通过 Credential Manager 登录,或者切换到 SSH。
GitHub 上的提交没有头像
git config user.email 中的邮箱没有添加到 GitHub 个人资料中。请在 Settings → Emails 中添加它——之前的提交会自动关联。
网络中 22 端口被封锁
GitHub 也支持通过 443 端口使用 SSH。在 ~/.ssh/config 中写入 Host github.com、Hostname ssh.github.com 和 Port 443 即可。
在新电脑上的配置步骤
- 安装 Git,并执行
git --version检查。 - 设置
user.name、user.email、init.defaultBranch和编辑器。 - 迁移或新建
~/.gitconfig,加入别名和 pull 策略。 - 生成新的 SSH 密钥(除非必要,不要把旧的私钥复制到另一台机器上),并将其添加到 GitHub。
- 用
ssh -T git@github.com检查访问,然后通过 SSH 地址克隆工作仓库。
为每台设备分别使用一把密钥还有一个好处:如果笔记本丢失,只需在 GitHub 上删除那一把密钥,其他设备的访问不受影响。
总结
Git 的配置可以归结为三步:用 git config --global 设置姓名和邮箱,选择编辑器、默认分支和 pull 策略,然后配置 GitHub 登录——最简单、最可靠的方式是 SSH 密钥。要记住,并不存在 git login 命令:身份验证发生在访问服务器时。配置文件和 SSH 访问的实践,在 Git 课程中有讲解。
常见问题
Windows 上 Git 的配置文件存放在哪里?
全局配置位于 C:\Users\用户名\.gitconfig,每个仓库的本地配置位于 .git\config。想确定具体位置,可以执行 git config --list --show-origin。
如何重置 Git 的配置?
删除或重命名 ~/.gitconfig,Git 就会恢复默认值。删除单个设置则使用 git config --global --unset 名称。
GitHub 和 GitLab 可以共用一把 SSH 密钥吗?
可以,同一个公钥可以添加到多个服务中。唯一的限制是:在 GitHub 上,一把密钥只能绑定到一个账户。
如何对提交签名,让 GitHub 显示 Verified?
使用 GPG 或 SSH 密钥进行签名:例如 git config --global gpg.format ssh,设置 user.signingkey 为公钥路径,并执行 commit.gpgsign true;然后将该密钥作为 Signing key 添加到 GitHub。
升级 Git 之后需要重新配置吗?
不需要。升级不会改动 ~/.gitconfig 和 ~/.ssh 中的密钥,所有设置都会保留。