是否有快速命令来检查我是否签署了特定提交?
(请注意,我不是问如何验证签名。我只是想知道:提交是否已签名?是或否)
我尝试了以下操作,但他们都告诉我提交是NOT签名的:
git log --show-signature HEAD -1
git verify-commit HEAD
git log --pretty="format:%h (%aN) %G? %GG %GK %GF" HEAD -1
以上所有内容都显示了 GPG 签名的一些东西,但如果提交是使用 SSH 密钥签名的,请告诉我“无签名”。
唯一说出全部真相的命令是
cat-file commit
:
$ git cat-file commit HEAD
tree 896fba0491baa9f122a2eae5bcd8b052c6481272
parent 97031bccd6744e24028be294059e5a24a454cb58
author [...]
committer [...]
gpgsig -----BEGIN SSH SIGNATURE-----
[...]
-----END SSH SIGNATURE-----
[...]
正如预期的那样,我签名的提交在 GitHub 上被标记为
Verified
。
我猜测 SSH 签名检查的支持不如 GPG 签名检查。我什至可以想象为什么更多具有安全意识的 git 维护者可能不喜欢 SSH 签名支持。
但我最初的实际问题仍然存在。 有没有比
cat-file
更方便的方法来验证我签署了提交?
您走在正确的道路上。
git show
将显示提交是否已签名
这是一个演示,我认为它与您所做的类似,您将看到提交已签名
#!/bin/bash
# Prepare repo
cd /tmp
rm -rf /tmp/local-repo
git init /tmp/local-repo
# Switch to the new repo
cd /tmp/local-repo
# Set up local repository flags fo sign
git config user.name "user"
git config user.email "email"
git config gpg.format ssh
git config user.signingkey ~/.ssh/id_rsa.pub
# Add some dummy content
echo a > a.txt
# Commit the changes
git add .
git commit -s -m "Initial commit"
echo -e ""
echo -e "----------------------------------------------------------------"
echo -e ""
echo -e "$ git verify-commit HEAD"
git verify-commit HEAD
echo -e ""
echo -e "----------------------------------------------------------------"
echo -e ""
echo -e "$ git show HEAD"
git show HEAD
Initialized empty Git repository in /private/tmp/local-repo/.git/
[main (root-commit) 623ab49] Initial commit
1 file changed, 1 insertion(+)
create mode 100644 a.txt
----------------------------------------------------------------
$ git verify-commit HEAD
----------------------------------------------------------------
$ git show HEAD
commit 623ab49b6fe911960494006ee0b80a7cd982b6a2 (HEAD -> main)
Author: user <email>
Date: Sat Apr 27 01:21:12 2024 +0300
Initial commit
Signed-off-by: user <email>
diff --git a/a.txt b/a.txt
new file mode 100644
index 0000000..7898192
--- /dev/null
+++ b/a.txt
@@ -0,0 +1 @@
+a