为什么需要使用GnuGPG来签名Git commit?,请查看:Git 工具 - 签署工作

安装GPG

macOS brew 使用以下命令 :

1
2
    brew install gpg
    

使用GPG

使用以下生成密钥命令:1

1
2
3
4
    gpg --full-generate-key #git version 2.17.*以上使用这条命令
    # git version 2.1.17 last use under command
    gpg --default-new-key-algo rsa4096 --gen-key
    

根据提示一步一步的设置好信息,然后执行:

1
2
3
4
5
    #查看密钥信息ID
    gpg --list-secret-keys --keyid-format LONG
    #导出签名copy到Github个人设置界面->SSH and GPG keys中
    gpg --armor --export <GPG PUB UID>
    

上传密钥到公钥服务器2

1
2
    gpg --send-keys [用户ID] --keyserver hkp://subkeys.pgp.net
    

导出公钥和私钥

1
2
3
    gpg --output mygpgkey_pub.gpg --armor --export <gpg pub id>
    gpg --output mygpgkey_sec.gpg --armor --export-secret-key <gpg pub id>
    

导入密钥(公钥和私钥)

1
2
3
4
    gpg --import [密钥文件]
    gpg --import ~/mygpgkey_pub.gpg
    gpg --allow-secret-key-import --import ~/mygpgkey_sec.gpg
    

删除密码:

1
2
3
4
5
6
    gpg --edit-key 375A500B
    # 在弹出的界面中输入原来密码,新密码留空即可
    passwd
    # 保存修改
    save
    

配置Git项目

设置使用的GPG签名3

1
2
    git config --global user.signingkey <GPG PUB UID>
    

打开项目提交GPG签名

1
2
    git config --global commit.gpgsign true #所有项目打开,只针对当前项目打开则删除其中的--global
    

使用签名提交:4

1
2
3
4
    git commit -S -m commit message
    #Tag签名
    git tag -s
    

对tag进行签名:5

git tag -s tagname

Note

Git commit的时,出现以下错误:

1
2
gpg failed to sign the data
fatal: failed to write commit object
  • 确认是否导入: export GPG_TTY=$(tty)~/.zshrc~/.bash 文件中;
  • 使用: git config –list 查看 user.signingkey and commit.gpgsign 是否重复设置或设置错误,如果重复设置使用: git config –unset 删除对应的参数
  • 如果提示 Sorry, no terminal at all requested - can't get input 的话,需要 把 ~/.gnupg/gpg.conf 中的 no-tty 注释掉

  1. Generating a new GPG key ↩︎
  2. GPG入门教程 ↩︎
  3. Telling Git about your signing key ↩︎
  4. Signing commits ↩︎
  5. Signing tags ↩︎