正如标题所说,我正在寻找一种方法来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 XI上让GPG工具处理它.
如果您只想过滤特定提交并仅签名,则可以使用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
都将重新签名,除了签名之外,没有其他更改。