我通常使用 gpg 密钥签署我的提交。但是,有时我需要通过电子邮件发送补丁,这是通过使用git-format-patch和 来实现的git-send-email。但是,这会导致我的 GPG 签名从补丁中删除。我的目标是让其他人实际将补丁应用到存储库并发送它,同时保留我的签名以确保代码的真实性。
通过使用git-am,提交者正在创建一个新的散列,因此是新的提交所以我不确定签名是否会起作用我不确定 gpg 中用于签名的内容,可能只有差异?如果是这样的话,我想这会奏效。这可能吗?
我查看了 git 文档git-format-patch,似乎有一个--signature选项,该选项没有很好的文档记录,我尝试做一些事情来将签名附加到补丁中,但没有一个能在目标 git 存储库中幸存下来。使用它的正确方法是什么?
最后,即使添加--signature实现了我正在尝试实现的目标,但在创建一系列补丁并通过电子邮件发送它们时可能会很麻烦。是否有一个批处理选项可以简单地将我可以清楚地看到附加到提交的签名附加到使用git cat-file -p <HASH>生成的补丁git-format-patch?
谢谢
因此,我只是花了很长时间遵循 git 说明,了解如何生成 gpg 密钥并签署我的提交,以便它们出现在我的帐户中。按照一切进行操作,顺利完成最后的步骤:
git config --global user.signingkey 70DA..(my key)
git config --global commit.gpgsign true
Run Code Online (Sandbox Code Playgroud)
但是,当我最终去:
git add .
git commit -S -m "whatever message"
Run Code Online (Sandbox Code Playgroud)
我收到这三个错误:
could not find identity matching specified user-id: 70DA..(my key)
error: gpg failed to sign the data
fatal: failed to write commit object
Run Code Online (Sandbox Code Playgroud)
我在其他帖子中看到了最后两个错误,但没有看到有关指定用户 ID 的错误。有谁知道如何解决这个问题或知道一些验证我的提交的捷径?我觉得花 2 个小时做这件事实在是太愚蠢了,我有点尴尬。
所以看起来我的 gpg 密钥是秘密的,但是当我尝试在 git 中签署我的提交时,它不被识别为秘密。我完全不知道为什么会这样。我相信我的设置正确,但我的提交标志失败。难道我做错了什么?在此先感谢您的帮助。
[brad@reason entry-criteria-test]$ gpg --list-secret-keys --keyid-format LONG
/home/brad/.gnupg/secring.gpg
-----------------------------
sec 4096R/15980D34B4EED3FA 2019-03-11
uid Brad <brad@work.com>
ssb 4096R/3B437BF0F7366F6C 2019-03-11
[brad@reason entry-criteria-test]$ git config user.signingkey 15980D34B4EED3FA
[brad@reason entry-criteria-test]$ git config --global user.signingkey 15980D34B4EED3FA
[brad@reason entry-criteria-test]$ git commit -S -m "testing signed commit"
gpg: key B4EED3FA: secret key without public key - skipped
gpg: skipped "15980D34B4EED3FA": No secret key
gpg: signing failed: No secret key
error: gpg failed to sign the data
fatal: failed to write commit object
[brad@reason …Run Code Online (Sandbox Code Playgroud) 我在签署我的提交时遇到错误git commit -S -m 'test'并收到以下错误:
error: gpg failed to sign the data
fatal: failed to write commit object
Run Code Online (Sandbox Code Playgroud)
我已经尝试过这个解决方案,但仍然无法正常工作。
也尝试过这个,但仍然一无所获。
我有配备最新 macOS 的 Macbook Pro 2017。
有没有其他解决方案可以修复它并正确地将我的提交提交到 Github 或 Gitlab?
我知道.asc签名作为文本文件输出,而.sig&.gpg是二进制文件。
一边说:
.sig和.gpg不同的扩展名相同的文件?如果没有,为什么要使用一个?我正在使用以下命令
gpg --keyserver hkp://pool.sks-keyservers.net --send-keys <MY-8-DIGIT-SIGNATURE>
Run Code Online (Sandbox Code Playgroud)
按照本文的指导https://getstream.io/blog/publishing-libraries-to-mavencentral-2021/
但是,当我尝试时,它会报告
gpg: sending key <MY-16-DIGIT-SIGNATURE> to hkp://pool.sks-keyservers.net
gpg: keyserver send failed: No keyserver available
gpg: keyserver send failed: No keyserver available
Run Code Online (Sandbox Code Playgroud)
我上面的命令有什么问题?
更新结果
这适用于 macOS Catalina、Intel Core i7 机器。但它不适用于 macOS Big Sur、M1 ARM64 机器。
不确定是 Big Sur 还是 M1 ARM64 机器问题?
跑步后
./gradlew bintrayUpload
Run Code Online (Sandbox Code Playgroud)
我收到以下错误。
:my-library:bintray上传失败
失败:构建失败,发生异常。
出了什么问题:任务':my-library:bintrayUpload'的执行失败。
无法签署版本'0.8.1':HTTP / 1.1 400错误的请求[消息:需要私钥,请使用JSON正文提供,也可以将其存储在Bintray配置文件中]
尝试:使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获取更多日志输出。
建立失败
如本教程所述,当我安装GPG身份验证时,它以前一直在工作。
然而,当我尝试更新的版本(如描述在这里),它停止工作。
我正在尝试执行以下命令,这是 Docker 安装的一部分,但它被卡住了。
gpg命令的部分被卡住了,如果我在管道之后删除,gpg它就可以工作。
---
- hosts: all
become: yes
tasks:
- name: add docker GPG key
shell: "curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg"
Run Code Online (Sandbox Code Playgroud)