GnuGPG Git中的使用及配置
Posted by:  | Word Count: 582   | Reading Time: 2 Minute  

为什么需要使用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 ↩︎