有没有办法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签署所有以前的提交?的主要内容,如果未能解决你的问题,请参考以下文章
gpg 未能签署数据致命:未能写入提交对象 [Git 2.10.0]