配置

邮箱

Settings -> Access -> Emails

  • 邮箱的作用:
    • 登录 Github
    • 归属于 Github 账户邮箱地址的提交将绑定你的账户(即能识别为你的账户的提交)
    • 各种通知
  • 可以设置多个邮箱,一个主邮箱
  • 可以设置保护你的邮箱地址,并阻止邮箱地址为你的邮箱地址的提交,如果开启后者,你需要设置邮箱地址为 @users.noreply.github.com 后缀的那个,如下,我的公开邮箱地址是 37324769+sean2077@users.noreply.github.com

SSH Key

配置多个 SSH Key

有些情况你需要多套 SSH Key,如你在公司电脑上,提交到 Github 的需要一套 name、email 和 SSH Key,而提交到 Github 则需要另一套 name、email 和 SSH Key。

GPG 签名

为什么需要签名

Git 提交签名(Signed Commits)主要用于提高代码安全性和可信度,常见原因如下:

  1. 证明作者身份

签名提交后,只有拥有对应密钥的人才能生成该签名。这样可以证明这条提交确实是你本人(或你的密钥持有者)所做,防止他人伪造你的提交。

提交很容易伪造

在不启用签名的情况下,Git 的提交者信息(user.name 和 user.email)是用户本地配置的字符串,你可以随意填写任何名字和邮箱,比如:

bash

git config user.name "Linus Torvalds"
git config user.email "torvalds@linux-foundation.org"

然后你提交的代码,别人看到的就是这个名字和邮箱,没有任何验证机制

  1. 防止篡改

签名是对 commit 内容的加密摘要。任何人如果试图修改提交内容,签名都会失效,GitHub/其它平台会标记为“Unverified”。保证代码在传输和协作过程中没有被恶意篡改

  1. 增加可信度

在开源项目、企业内部审计等场景,签名提交能让团队或外部用户确信代码的来源和完整性,减少供应链攻击风险。

  1. 合规/安全要求

很多企业或开源项目要求所有贡献者都使用签名提交,以满足安全合规要求(如 ISO、SOC2、GDPR 等)。

  1. 自动化和审计

部分 CI/CD 流程会检查 commit 是否已签名,只有通过验证的提交才能进入生产环境。这也是实现自动化安全审计的基础。

Note

你可以在 GitHub 上看到 “Verified” 标志,这说明提交已通过签名验证,增强了信任。

GPG 的作用

  1. 加密/解密 用于对文件或消息进行加密和解密,保证数据的机密性。例如,发送加密邮件,只有持有私钥的人才能解密内容。

  2. 签名/验证 用于数字签名,证明内容的真实性和完整性。例如,给 Git 提交或软件包签名,别人可以验证内容确实由你发布且未被篡改。

  3. 密钥管理 GPG 还负责生成、导入、导出和撤销密钥。

GPG 既能加密,也能签名。你可以只用它签名(比如 Git commit),也可以用它加密和签名(比如邮件、文件)。它是通用的加密和签名工具,并不是专门只做签名。

GPG 签名设置流程

Note

Git 版本要求: Git 2.0+(建议使用最新版本) GPG 版本要求: GPG 2.2+(建议使用最新版本)

以下是常见的 GPG 签名设置流程:

生成 GPG 密钥

如果你还没有 GPG 密钥,可以通过命令行生成:

gpg --full-generate-key

按提示选择密钥类型(一般选 RSA 和 RSA),然后设置密钥长度(推荐 4096),最后输入你的姓名、邮箱和密码。

Note

注意设置邮箱最好和 git 配置的邮箱一致,否则签名会失败。

获取 GPG 公钥

生成密钥后,使用以下命令获取你的公钥:

gpg --list-secret-keys --keyid-format LONG
gpg --armor --export <你的 GPG key ID>

Note

你可以用以下命令来查看你本地 GPG 密钥的 key ID:

gpg --list-secret-keys --keyid-format LONG

输出类似于:

/Users/youruser/.gnupg/secring.gpg
-
sec   rsa4096/3AA5C34371567BD2 2023-08-29 [SC]
      1234567890ABCDEF1234567890ABCDEF12345678
uid                          Your Name <youremail@example.com>
ssb   rsa4096/ABCDEF1234567890 2023-08-29 [E]

其中,rsa4096/3AA5C34371567BD2斜杠后的部分(如 3AA5C34371567BD2)就是你的 GPG key ID

如果你有多个密钥,会显示多行。选择你用于 GitHub 签名的那一行即可。

将 GPG 公钥添加到 GitHub

  1. 登录 GitHub,进入 Settings > SSH and GPG keys 页面。
  2. 点击 New GPG key,粘贴上一步导出的公钥内容,保存。

配置 Git 使用你的 GPG 密钥

设置你的 Git 用户邮箱与密钥一致:

git config --global user.email "你的邮箱"

设置默认签名密钥:

git config --global user.signingkey <你的 GPG key ID>

开启自动签名提交:

git config --global commit.gpgsign true

验证签名提交

提交时,Git 会自动用你的 GPG 密钥进行签名。你也可以手动签名:

git commit -S -m "你的提交信息"

推送到 GitHub 后,提交记录会显示 “Verified” 标记。

注意事项:

  • 你的 GPG 密钥邮箱需和 GitHub 账号邮箱一致。
  • Windows 用户建议用 Git Bash 或 WSL。
  • 如果遇到 gpg: signing failed: ... 错误,可以检查环境变量或者 GPG 代理设置。

如需更详细教程可参考 GitHub 官方文档