如何在交互式rebase压缩后保留提交gpg-signature?

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作为参数添加将签署最终压缩的提交.

  • 如果这不起作用,您可以执行 `git rebase -i HEAD~4` 并使用 `git commit --amend -S` 编辑每个提交。 (2认同)

小智 11

你能做到没有意义.gpg签名的重点是验证代码是否未被篡改.如果您在修改历史记录后可以保留签名,那将会破坏整个目的.

我目前没有使用gpg签署我的Git代码,所以我不知道确切的细节,但我想它可能会破坏树的最终提交对象.当您在示例中进行rebase时,Final commit将具有不同的sha1 ID,因此它与rebase之前的对象不同,因此具有相同的gpg签名可能是不可能的,并且就像我说的那样,它没有意义.

  • 如果它们是您的提交,并且您想保留A签名(而不是THE签名),则很有意义。 (2认同)
  • 这很有趣,但我想知道它是否 100% 有效。我们在功能分支上工作,并且我们的 Gitlab 被配置为仅当 MR 可以快速转发(准线性历史)时才允许它们,因此如果基本分支中的某些内容发生了变化,我们会重新设置这些分支的基础。当我提交功能分支并签署提交时,然后我的同事 rebase 分支,GPG 签名应该保持不变 如果提交被选中而没有更改(所以我的签名仍然有效,因为它是我提交和签名的确切代码)。然而,当签名提交被其他人重新定义时,GPG 签名会丢失(我们刚刚检查过)。 (2认同)

Pio*_*ski 7

一种选择是将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)


Von*_*onC 6

为了强调您不保留重新基址提交上的签名的事实,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-signaturesfor 的git rebase问题,但对有效工作流程的怀疑也随之增加。由于您通常将其他人的分支合并到您的分支中,因此您可能会感兴趣他们的一方是否具有有效的 GPG 签名。

另一方面,变基是在其他人的工作之上重建你的分支,以便将结果推回去,即使你发现他们的提交缺乏可接受的签名,拒绝他们的工作也为时已晚

让我们警告用户该--verify-signatures选项在“”期间被忽略pull --rebase用户不会想知道如果他们的提交缺乏可接受的签名会发生什么