一、GPG 简介

  • 签署标签与提交很棒,但是如果决定在正常的工作流程中使用它,必须确保团队中的每一个人都理解如何这样做。如果没有,将会花费大量时间帮助其他人找出并用签名的版本重写提交。在采用签署成为标准工作流程的一部分前,确保你完全理解 GPG 及签署带来的好处。
  • Git 虽然是密码级安全的,但它不是万无一失的,如果从因特网上的其他人那里拿取工作,并且想要验证提交是不是真正地来自于可信来源,Git 提供了几种通过 GPG 来签署和验证工作的方式。

二、GPG 的安装

  • MacOS 的安装:
# 安装工具
$ brew uninstall gpg
$ brew install gpg2
$ brew install pinentry-mac
$ pinentry-program /usr/local/bin/pinentry-mac# 选择秘钥类型
$ gpg --full-generate-key# the GPG config
$ echo no-tty >> ~/.gnupg/gpg.conf
$ git config --global gpg.program /usr/local/bin/gpg
  • Windows 的安装:
$ sed -i '/^no-tty/d' ~/.gnupg/gpg.conf
$ git config --global --unset gpg.program

三、GPG 的使用

  • 在开始签名之前,需要先配置 GPG 并安装个人密钥:
$ gpg --list-keys
/Users/escape/.gnupg/pubring.kbx
--------------------------------
pub   rsa2048 2020-04-18 [SC] [expires: 2022-04-18]C174E50D123452BA2EEA10223EAB1C5CF88E8888
uid           [ultimate] Escape <ecapelife@gmail.com>
sub   rsa2048 2020-04-18 [E] [expires: 2022-04-18]

  • 如果还没有安装一个密钥,可以使用 gpg --gen-key 生成一个,一旦你有一个可以签署的私钥,可以通过设置 Git 的 user.signingkey 选项来签署:
# 生成秘钥(输入用户和邮箱之后还需要在输入GPG的秘钥才能够生成)
$ gpg --gen-key
GnuPG needs to construct a user ID to identify your key.
Real name: Escape
Email address: ecapelife@gmail.com
You selected this USER-ID:"Escape <ecapelife@gmail.com>"
Change (N)ame, (E)mail, or (O)kay/(Q)uit? o# 按其ID导出ascii格式的密钥
gpg --armor --export C174E50D123452BA2EEA10223EAB1C5CF88E8888

# 全局设置
$ git config --global commit.gpgsign true
$ git config --global user.signingkey 0A46826A# 配置文件
[github]name = Escapeemail = ecapelife@gmail.comsigningkey = C174E50D123452BA2EEA10223EAB1C5CF88E8888
  • 现在,所有通过 GitHub Desktop 创建的提交都将经过签名和验证,客户可以在第一次提交时询问您一个 GPG 密钥代码短语:
# Add file
$ git add .# Creates a signed commit
$ git commit -S -m "your commit message"# Push to Github
$ git push

四、签署标签

  • 如果已经设置好一个 GPG 私钥,可以使用它来签署新的标签,所有需要做的只是使用 -s 代替 -a 即可。如果在那个标签上运行 git show,会看到 GPG 签名附属在后面:
$ git tag -s v1.5 -m 'my signed 1.5 tag'
You need a passphrase to unlock the secret key for
user: "Escape <ecapelife@gmail.com
2048-bit RSA key, ID 800430EB, created 2020-04-18
  • 要验证一个签署的标签,可以运行 git tag -v ,这个命令使用 GPG 来验证签名。为了验证能正常工作,签署者的公钥需要在钥匙链中:
$ git tag -v v1.4.2.1
object 883653babd8ee7ea23e6a5c392bb739348b1eb61
type commit
tag v1.4.2.1
tagger Escape <ecapelife@gmail.com> 1158138501 -0700GIT 1.4.2.1
Minor fixes since 1.4.2, including git-mv and git-http with alternates.
gpg: Signature made Mon Sep 13 02:08:25 2020 PDT using DSA key ID F3119B9A
gpg: Good signature from "Escape <ecapelife@gmail.com>"
gpg:                 aka "[jpeg image of size 1513]"
Primary key fingerprint: 3565 2A26 2040 E066 C9A7  4A7D C0C6 D9A4 F311 9B9A

五、签署提交

  • 在最新版本的 Git(v1.7.9 及以上) 中,也可以签署个人提交,如果相对于标签而言你对直接签署到提交更感兴趣的话,所有要做的只是增加一个 -S 到 git commit 命令。git log 也有一个 --show-signature 选项来查看及验证这些签名:
# 签名
$ git commit -a -S -m 'signed commit'# 验证
$ git log --show-signature -1
  • 在 Git 1.8.3 及以后的版本中,git merge 与 git pull 可以使用 --verify-signatures 选项来检查并拒绝没有携带可信 GPG 签名的提交,如果使用这个选项来合并一个包含未签名或有效的提交的分支时,合并不会生效:
$ git merge --verify-signatures non-verify
fatal: Commit ab06180 does not have a GPG signature.
  • 如果合并包含的只有有效的签名的提交,合并命令会提示所有的签名它已经检查过了然后会继续向前:
$ git merge --verify-signatures signed-branch
Commit 13ad65e has a good GPG signature by ecapelife (Git signing key) <ecapelife@gmail.com>
Updating 5c3386c..13ad65e
Fast-forwardREADME | 2 ++1 file changed, 2 insertions(+)
  • 也可以给 git merge 命令附加 -S 选项来签署自己生成的合并提交。如下所示,演示验证将要合并的分支的每一个提交都是签名的并且签署最后生成的合并提交:
$ git merge --verify-signatures -S  signed-branch
Commit 13ad65e has a good GPG signature by ecapelife (Git signing key) <ecapelife@gmail.com>You need a passphrase to unlock the secret key for
user: "ecapelife (Git signing key) <ecapelife@gmail.com>"
2048-bit RSA key, ID 0A46826A, created 2014-06-04Merge made by the 'recursive' strategy.README | 2 ++1 file changed, 2 insertions(+)

Git之签署工具GPG的安装和使用相关推荐

  1. Git版本SVN工具简介与安装配置及使用

    文章目录 SVN介绍 一.使用原理 二.安装配置SVN 1.安装Git 2.下载SVN 总结 SVN介绍 SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采 ...

  2. Git客户端Sourcetree工具安装使用详解命令

    目录 一.Git工作流程 二.Git安装 三.Sourcetree工具安装 四.Sourcetree配置 五.Sourcetree配置SSH 六.GIT常用命令 一.Git工作流程 二.Git安装与配 ...

  3. Git的具体使用,包括安装Git工具,把Git和IDEA结合,使用分支

    文章目录 Git的具体使用,包括安装Git工具,把Git和IDEA结合,使用分支 git安装及环境配置 git的必要配置 git config -l git config --system --lis ...

  4. TortoiseGit(大乌龟)安装教程(Git 图形化工具,告别手敲命令)

    TortoiseGit安装教程 1. 下载TortoiseGit 官方下载地址:https://tortoisegit.org/download/ 自行选择下载对应版本(大部分位64位),进行下载 2 ...

  5. Git客户端图文详解如何安装配置GitHub操作流程攻略

    Git客户端图文详解如何安装配置GitHub操作流程攻略 软件应用 爱分享  3个月前 (08-15)  8896浏览  0评论 Git介绍 分布式 : Git版本控制系统是一个分布式的系统, 是用来 ...

  6. Git分布式版本工具的部署与使用

    一.Git概述 1. Git诞生 很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了. Linus虽然创建了Linux,但Linu ...

  7. PHP性能追踪及分析工具xhprof的安装与使用

    PHP性能追踪及分析工具xhprof的安装与使用 对于本地开发环境来说,进行性能分析xdebug是够用了,但如果是线上环境的话,xdebug消耗较大,配置也不够灵活,因此线上环境建议使用xhprof进 ...

  8. linuxmint安装开发工具_vscode如何安装在Linuxmint系统_编程开发工具

    vscode怎么退出当前终端_编程开发工具 vscode退出当前终端的方法:1.使用"Ctrl+C"快捷键停止node环境终端.2.使用"exit"命令停止ss ...

  9. Git的GUI工具sourcetree的使用

    一.Git的学习 这部分学习廖雪峰的git教程,参加以下链接: https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67 ...

最新文章

  1. 蜜蜂实训平台c语言考试答案,北理c语言上机答案(全)
  2. NYOJ 610 定长覆盖
  3. 不用现有方法,把string转换成int型[C#]
  4. OpencvSharp的踩坑之路
  5. 上下双刘海设计感受下!夏普新旗舰亮相:骁龙855加持
  6. BeJavaGod - 如何正确使用数据字典进行分类统一操作(一)
  7. Ubuntu tee
  8. C++组合数(combination)的实现
  9. python中冒号的语法错误_找不出python的语法错误该如何解决?
  10. Multisim 10 添加可调电阻
  11. 企业生产过程能力分析(CPK)
  12. 在Centos8编译Wireshark3.4.5
  13. 图谱实战 | 开源知识图谱融合工具剖析:Dedupe与OpenEA工具实现思想、关键环节与实操分析...
  14. 微信小程序获取openId,传参问题导致参数无效(errcode: 40013、errcode:40125、errcode“:40029)
  15. 有关AntDesign的简单学习
  16. mysql drop column_MySQL DROP COLUMN
  17. jsp自定义标签 线程安全
  18. 微博图片设计模板素材推荐 精品 小众
  19. 认真过好你的二十几岁
  20. 非常实用的视频剪辑软件,它可以满足您进行视频制作的需要,使用剪映mac版能够轻松对视频进行各种编辑。

热门文章

  1. 51. N-Queens
  2. 【Task】- JVM逃逸分析等待学习任务
  3. sharePoint查看与更改用户登录账号
  4. 第八节:详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架
  5. 上传文件input(type=file)美化。
  6. Python 爬起数据时 'gbk' codec can't encode character '\xa0' 的问题
  7. windows server 注意windows的temp目录
  8. Chrome DevTools进阶教程
  9. HDU 4549 M斐波那契数列
  10. mysql 命令行导入sql脚本