追溯签署git提交

时间:2012-11-22 02:13:33

标签: git security version-control commit gnupg

最新版本的git(> = 1.7.9)支持使用GPG签署个别提交。

是否可以追溯签署树中的所有提交?

3 个答案:

答案 0 :(得分:4)

来自git commit的{​​{1}}(又名--gpg-sign)选项的签名是用于生成标识提交的sha1哈希的数据的一部分。因此,追溯签名提交将需要更改已完成的每个提交的ID。

如果你真的想要,你可能会对-S做一些事情,但最好只签署新的提交。由于所有祖先的提交ID都会影响将由任何新提交签署的数据,因此仍然允许通过新的签名提交gpg验证旧提交。

答案 1 :(得分:2)

  

追溯签署树内的所有提交?

是:添加tag, that you would sign
实际上,这是签署提交时的preferred option:通过标记签署所有这些设置,而不是单独签署每个设置。
请参阅“How to get pusher's Information in post-receive hooks?”。


注意(2017年5月更新)只有Git 2.13.x / 2.14(2017年第3季度)才能完全修复签名过程,因为“git cherry-pick”和其他用于定序器的机器并错误处理了最后一个拖车块线是不完整的线 这已经修复,以便在完成现有的不完整行之后添加额外的签名等

commit 44dc738Jonathan Tan (jhowtan)(2017年4月26日) (2017年5月16日Junio C Hamano -- gitster -- commit 6ebfa10合并)

  

sequencer:在添加页脚

之前添加换行符      

遇到不以换行符结尾的提交消息时,   在确定是否为空行之前,sequencer未完成该行   应该加上。
  这会导致“(cherry picked...”和的签名行有时与提交消息的最后一行显示在同一行

     

此行为是由commit 967dfd4引入的(“sequencer:use   预告片的拖车布局“,2016-11-29)。然而,该提交的恢复   不会完全解决这个问题:在提交之前,a   符合标准的页脚被认为不符合   has_conforming_footer()如果没有终止换行,则生成   在符合和不符合标准的页脚中进行相同的处理   什么时候不应该。

     

解决此问题,包括符合和不符合的页脚,以及do_pick_commit()append_signoff()始终添加   提交消息的换行符,如果它在检查之前没有以一个结尾   符合性的页脚

答案 2 :(得分:1)

您可以尝试从要开始签名提交的位置创建新分支。我最近为我在一台机器上创建的分支机构执行了此操作,但无法访问我的私钥:

# git checkout -b new-branch <last-signed-commit>
# git cherry-pick <first-unsigned-commit>
# git checkout unsigned-branch
# git rebase new-branch

这要求你的Git配置为自动签署你的提交,显然不应该有太多的合并提交,其他的rebase看起来很奇怪。如果有疑问,樱桃挑选你的承诺;然后将签署每个选择的提交。