教程

Git 配置:git config、用户名、邮箱与 SSH 密钥

更新于: · Skillaria.Top

基本的 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),通过以下两种协议之一完成。

HTTPSSSH
地址https://github.com/user/repo.gitgit@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 即可。

在新电脑上的配置步骤

  1. 安装 Git,并执行 git --version 检查。
  2. 设置 user.name、user.email、init.defaultBranch 和编辑器。
  3. 迁移或新建 ~/.gitconfig,加入别名和 pull 策略。
  4. 生成新的 SSH 密钥(除非必要,不要把旧的私钥复制到另一台机器上),并将其添加到 GitHub。
  5. 用 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 中的密钥,所有设置都会保留。

通过视频学习本主题

课程“Git 从零基础到胜任开发者”结合实践详细讲解了这一主题。

前往课程