是否有任何git命令或更简单的格式来确定提交是否已签名?
答案 0 :(得分:3)
为方便点击" Signed-off-By
",您现在(Git 2.12,2017年第1季度)只能使用"预告片"提交消息的一部分。 (预告片包含" Signed-off-By
"以及其他" Acknowledged By
"消息)
请commit b1d31c8查看commit d9f31fb,Jacob Keller (jacob-keller
)(2016年11月19日)。
(Junio C Hamano -- gitster
--合并于commit f008159,2016年12月19日)
pretty
:添加%(trailers)
格式以显示提交消息的预告片
除了%(subject)
,%(body)
," git log --pretty=format:...
"
了解了一个新的占位符%(trailers)
和%(contents:trailers)
。
您还有 git interpret-trailers
,它刚刚在Git 2.14.x / 2.15(2017年第3季度)中发展而来
commit 5a0d0c0见Martin Ågren (``)(2017年8月20日)
请参阅commit 58311c6,commit cc1735c,commit a388b10,commit 99e09da,commit 0000239,commit fdbdb64,commit 56c493e(2017年8月15日)和{ {3}}(2017年8月10日)commit 8abc898
(Jeff King (peff
)于2017年8月27日Junio C Hamano -- gitster
--合并)
"
git interpret-trailers
"已经教过一个commit 06cf4f2,以便脚本更容易抓住现有的 提交日志消息中的预告片行。
git log --pretty=format:%(trailers:only:unfold)
实际上:
git log --pretty=format:%(trailers:only,unfold)
^^^^^
"--parse
" and a few
other options见commit 84ff053(2017年10月1日)
(Taylor Blau (ttaylorr
)于2017年10月7日Junio C Hamano -- gitster
--合并)
的参数
pretty.c
:分隔"%(trailers)
"与",
"准备添加一致的"
%(trailers)
"原子选项git-for-each-ref(1)
'--format
"争论,改变"%(trailers)
"在pretty.c
将子参数与",
"分开,而不是":
"。多个子参数可以"
%(trailers:unfold,only)
"要么 "%(trailers:only,unfold)
"此更改消除了"顶级"之间的歧义。参数和参数 给予拖车原子本身。这符合行为 "
%(upstream)
"和"%(push)
"原子。
注意:对于Git 2.20(Q4 2018),这是更强大的,因为" git interpret-trailers
"并且它的底层机器有一个错误的代码,试图在提交日志消息之后忽略补丁文本,这会在各种代码路径中触发,这些代码路径将始终单独获取日志消息并且永远不会得到这样的输入。
请参阅commit 436b359,commit 66e83d9,commit ffce7f5,commit e5fba5d,commit 1688c9a,commit c188668,commit 00a21f5,{{3} (2018年8月23日)commit a3b636e
(由commit 0d2db00合并于Jeff King (peff
),2018年9月17日)
sequencer
:忽略"---
"解析预告片时的分隔符当音序器代码附加一个signoff或者cherry-pick起源时,它会使用默认的预告片解析选项,这些选项可以处理"
---
"作为提交消息的结束 因此,它可能被包含该字符串的提交消息所欺骗,并且无法找到现有的预告片块。更令人困惑的是,实际的附加代码不知道"---
",并且总是追加到字符串的末尾。
这可能导致奇怪的结果。例如,在这样的提交消息中附加签名:
subject body --- these dashes confuse the parser! Signed-off-by: A
导致输出最后一个块,如:
Signed-off-by: A Signed-off-by: A
解析器认为消息的最后一行是" body",并忽略其他所有内容,声称没有预告片。
因此我们输出一个额外的换行符分隔符(错误)并添加重复签名(也是错误的)。因为我们知道我们正在提供纯粹的提交消息,所以我们可以简单地告诉解析器忽略"
---
"除法器。
Git 2.22(2019年第二季度)增加了几个选项:
请参阅Junio C Hamano -- gitster
--,commit fba9654,commit 0b691d8,commit fd2015b,commit d9b936d(2019年1月28日),commit 250bea0(2019年1月29日),和commit 3e3f347(2018年12月8日)commit 4f732e0
(由commit 4261775合并于Anders Waldenborg (wanders
),2019年3月7日)
中添加对
pretty
:在separator
%(trailers)
选项的支持默认情况下,拖车行以换行符终止('
\n
')。
通过指定新的'separator
'选项他们将被分开 用户提供的字符串并具有分隔符语义而不是终止符 语义。
分隔符字符串可以包含文字格式代码%n
和%xNN
,使其成为难以输入的内容,例如%x00
,或逗号和结束括号,这将破坏解析。E.g:
$ git log --pretty='%(trailers:key=Reviewed-by,valueonly,separator=%x00)'
和
中的选项
pretty
:添加对"valueonly
"的支持%(trailers)
使用新的"
key=
"%(trailers)
的选项通常没什么意义 显示密钥,因为根据定义已经知道哪个预告片是 印在那里。
这个新的"valueonly
"选项使其在打印预告片时省略了键。E.g:
$ git show -s --pretty='%s%n%(trailers:key=Signed-off-by,valueonly)' aaaa881 will show:
> upload-pack: fix broken if/else chain in config callback
> Jeff King <peff@peff.net>
> Junio C Hamano <gitster@pobox.com>
答案 1 :(得分:2)
您可以在Git 2.4及更高版本中使用git log --invert-grep --grep="Signed-off-By"
。 (--invert-grep
选项已在2.4中添加。)
答案 2 :(得分:0)
git log --show-signature
git show --show-signature
-显示签名
通过将签名传递给gpg --verify并显示输出来检查已签名提交对象的有效性。