Help us learn about your current experience with the documentation. Take the survey.

已签名的提交

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

当你为提交添加数字签名时,你提供了额外的保证,证明该提交确实来自你本人,而不是冒名顶替者。数字签名是一种用于验证真实性的加密输出。

理解已签名提交和已验证提交之间的区别很重要:

  • 已签名提交附加了加密签名,证明提交的完整性和真实性。签名使用私钥创建。
  • 已验证提交的签名可以被 GitLab 与存储在用户 GitLab 配置文件中的已知公钥进行验证。

如果 GitLab 能够使用公钥验证提交者的身份,该提交在 GitLab 界面中会被标记为 已验证

在 Git 中,提交者和作者字段是不同的。作者编写提交内容,提交者应用提交。提交签名仅验证提交者的身份。

GitLab 支持以下提交签名方法:

验证提交

要审查合并请求或整个项目的提交,并验证它们是否已签名:

  1. 在左侧边栏,选择 搜索或跳转至 并找到你的项目。

  2. 要审查提交:

    • 对于项目,选择 代码 > 提交
    • 对于合并请求:
      1. 选择 代码 > 合并请求,然后选择你的合并请求。
      2. 选择 提交
  3. 识别你想要审查的提交。根据签名的验证状态,已签名的提交会显示 已验证未验证 标志。

    带有已验证和未验证标志的提交列表。

    未签名的提交不显示标志。

  4. 要显示提交的签名详情,选择 已验证未验证 来查看指纹或密钥 ID:

    提交的已验证签名详情。

    提交的未验证签名详情。

你也可以 使用提交 API 来检查提交的签名。

验证 Web UI 提交

GitLab 使用 SSH 来签名通过 Web UI 创建的提交。 要在本地验证这些提交,请使用 Web 提交 API 获取用于签名 Web 提交的 GitLab 公钥。

在已验证提交中使用 gitmailmap

此功能的可用性由功能开关控制。 有关更多信息,请查看历史记录。

gitmailmap 功能允许用户映射作者姓名和电子邮件地址。 GitLab 使用这些电子邮件地址来提供指向提交作者的链接。 当使用 mailmap 作者映射时,可能会出现提交已验证但作者电子邮件未验证的情况。

对于使用 mailmap 作者映射的 SSH 和 UI 签名,GitLab 会显示带有警告标志的橙色验证标签。 要恢复绿色验证标签,请验证映射的电子邮件地址,或删除 mailmap 条目。

使用推送规则强制要求已签名提交

你可以使用推送规则在整个项目中要求已签名提交。 拒绝未签名提交 推送规则会阻止任何未签名的提交推送到仓库,帮助组织维护代码完整性并满足合规要求。

有关此工作原理及其限制的更多信息,请参阅 要求已签名提交

故障排除

修复已签名提交的验证问题

使用 GPG 密钥或 X.509 证书签名的提交的验证过程可能会因多种原因失败:

描述 可能的修复方法
UNVERIFIED 提交签名无效。 使用有效的签名对提交进行签名。
SAME_USER_DIFFERENT_EMAIL 用于签名的 GPG 密钥不包含提交者电子邮件,但包含提交者的其他有效电子邮件。 修改提交以使用与 GPG 密钥匹配的电子邮件地址,或更新 GPG 密钥 以包含电子邮件地址
OTHER_USER 签名和 GPG 密钥有效,但密钥属于与提交者不同的用户。 修改提交以使用正确的电子邮件地址,或修改提交以使用与你用户关联的 GPG 密钥。
UNVERIFIED_KEY 与 GPG 签名关联的密钥没有与提交者关联的已验证电子邮件地址。 将电子邮件添加并验证到你的 GitLab 配置文件中,更新 GPG 密钥以包含电子邮件地址,或修改提交以使用不同的提交者电子邮件地址。
UNKNOWN_KEY GitLab 不知道与此提交的 GPG 签名关联的 GPG 密钥。 将 GPG 密钥 添加到你的 GitLab 配置文件中。
MULTIPLE_SIGNATURES 为提交找到了多个 GPG 或 X.509 签名。 修改提交以仅使用一个 GPG 或 X.509 签名。