Git - 检测提交是否已签名

时间:2015-07-07 07:03:14

标签: git

是否有任何git命令或更简单的格式来确定提交是否已签名?

3 个答案:

答案 0 :(得分:3)

为方便点击" Signed-off-By",您现在(Git 2.12,2017年第1季度)只能使用"预告片"提交消息的一部分。 (预告片包含" Signed-off-By"以及其他" Acknowledged By"消息)

commit b1d31c8查看commit d9f31fbJacob 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 5a0d0c0Martin Ågren (``)(2017年8月20日) 请参阅commit 58311c6commit cc1735ccommit a388b10commit 99e09dacommit 0000239commit fdbdb64commit 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 optionscommit 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 436b359commit 66e83d9commit ffce7f5commit e5fba5dcommit 1688c9acommit c188668commit 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 fba9654commit 0b691d8commit fd2015bcommit 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并显示输出来检查已签名提交对象的有效性。