Ale*_*ruk 26 git version-control gnupg git-rebase
当我想通过交互式压缩一些提交时rebase
:
git rebase -i HEAD~3
Run Code Online (Sandbox Code Playgroud)
然后:
pick cbd03e3 Final commit (signed)
s f522f5d bla-bla-bla (signed)
s 09a7b7c bla-bla (signed)
# Rebase c2e142e..09a7b7c onto c2e142e
...
Run Code Online (Sandbox Code Playgroud)
尽管所有提交都具有相同的签名,但最终提交还没有gpg签名.交互式rebase压缩后是否可以保留提交gpg-signature?
小智 48
就像Cupcake所说的那样,你不能保留未撤销提交中的旧签名,但如果你像这样重新设置,你可以签署新的压缩提交:
git rebase --interactive --gpg-sign=myemail@example.com HEAD~4
--gpg-sign=myemail@example.com
作为参数添加将签署最终压缩的提交.
小智 11
你能做到没有意义.gpg签名的重点是验证代码是否未被篡改.如果您在修改历史记录后可以保留签名,那将会破坏整个目的.
我目前没有使用gpg签署我的Git代码,所以我不知道确切的细节,但我想它可能会破坏树的最终提交对象.当您在示例中进行rebase时,Final commit
将具有不同的sha1 ID,因此它与rebase之前的对象不同,因此具有相同的gpg签名可能是不可能的,并且就像我说的那样,它没有意义.
一种选择是将commit.gpgSign
设置设置为true
。这将始终对提交进行签名,包括重新定位的提交。
要在存储库中本地执行此操作:
git config commit.gpgSign true
Run Code Online (Sandbox Code Playgroud)
要在全球范围内进行:
git config --global commit.gpgSign true
Run Code Online (Sandbox Code Playgroud)
为了强调您不保留重新基址提交上的签名的事实,git 2.9.x+(2016 年第 3 季度)将明确声明 agit pull --rebase
不会检查签名(因为重新基址部分会丢失它们)
请参阅Alexander Hirsch (``)提交的 c57e501(2016 年 5 月 20 日)。(由Junio C Hamano 合并 -- --在提交 73bc4b4中,2016 年 6 月 20 日)
gitster
pull
--verify-signatures
:警告--rebase
git-pull
--verify-signatures
运行时默默地忽略该选项--rebase
,可能会让用户相信变基操作会检查有效的 GPG 签名。人们讨论了实现
--verify-signatures
for 的git rebase
问题,但对有效工作流程的怀疑也随之增加。由于您通常将其他人的分支合并到您的分支中,因此您可能会感兴趣他们的一方是否具有有效的 GPG 签名。另一方面,变基是在其他人的工作之上重建你的分支,以便将结果推回去,即使你发现他们的提交缺乏可接受的签名,拒绝他们的工作也为时已晚。
让我们警告用户该
--verify-signatures
选项在“”期间被忽略pull --rebase
;用户不会想知道如果他们的提交缺乏可接受的签名会发生什么。