有没有办法gpg签署所有以前的提交?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有办法gpg签署所有以前的提交?相关的知识,希望对你有一定的参考价值。

正如标题所说,我正在寻找一种方法来gpg签署我在存储库中的所有先前提交(最好不要在每次提交时输入我的密码)。

谢谢!

答案

你可以,但它必须重写你的整个历史记录才能这样做。

签署提交会更改提交更改其提交ID的提交。由于提交ID取决于先前的提交ID,因此必须更改之后的所有提交。而且无论如何你都要签名。

如果它是其他人没有工作的个人存储库,那么这不是问题。如果它是与其他协作者的存储库,则将其视为执行主要的rebase。

您可以使用git filter-branch来重做每次使用-S选项的提交。

git filter-branch --commit-filter 'git commit-tree -S "$@";' -- --all

至于不必为每次提交输入密码,您需要配置gpg以使用gpg-agent。如果您熟悉ssh-agent这是一个类似的想法,那么您只需将密码提供一次并将其保存在内存中即可。如何操作取决于您的操作系统和设置。在OS X上,我让GPG Tools处理它。

另一答案

如果您只想过滤特定提交并仅签名,则可以使用filter-branch

git filter-branch --commit-filter 'if [ "$GIT_COMMITTER_EMAIL" = "user@domain.com" ];
  then git commit-tree -S "$@";
  else git commit-tree "$@";
  fi' HEAD

如果由于某种原因,您只想签署自己的提交,这将非常有用。

另一答案

我的方法是

git rebase --exec 'git commit --amend --no-edit -n -S' -i 8fd7b22
git push --force

所有从8fd7b22开始的提交将被重新命名,除了签名之外没有任何变化。

以上是关于有没有办法gpg签署所有以前的提交?的主要内容,如果未能解决你的问题,请参考以下文章

Git之签署工具GPG的安装和使用

gpg 未能签署数据致命:未能写入提交对象 [Git 2.10.0]

gpg无法签署致命的数据:无法写入提交对象[Git 2.10.0]

Mac上的git - gpg:错误:gpg无法签署数据

Git之深入解析如何通过GPG签署和验证工作

GPG服务测试没有上传新的apk签署到谷歌播放