我有PGP密钥,让我通过git commit -S
签署提交。为了签署我的上次提交,我做了git commit -S --amend --no-edit
并签署了我的提交。
现在,我想签署分支filtered
中的所有提交。
我试过了:git filter-branch --commit-filter 'git commit -S --amend --no-edit'
它给了我一条错误信息:
$ git filter-branch --commit-filter 'git commit --amend --no-edit -S' HEAD
Rewrite 07b0ac12f5fe1d8963d7ae0ac7fbda50cb6e74a9 (1/10)gpg: skipped "Anubhav Saini <IAmAnubhavSaini@users.noreply.github.com>": secret key not available
gpg: signing failed: secret key not available
error: gpg failed to sign the data
fatal: failed to write commit object
could not write rewritten commit
另一个问题:提出另一个git commit --amend --no-edit -S
会导致:
(filter-test)$ git commit -S --no-edit --amend
You need a passphrase to unlock the secret key for
user: "Anubhav Saini <iamanubhavsaini@gmail.com>"
[filter-test c5ea180] Removing defer and async from scripts
4 files changed, 28 insertions(+), 28 deletions(-)
答案 0 :(得分:2)
考虑重写历史以签署分支中的所有提交可能会有点过分。
由于git对象模型,上下文中存在提交。单独签署头部提交也会对您的直接父母(或父母,如果它是合并提交)以及他们的父母一直反馈到您的存储库的第一天。
这就是为什么签署正式版本的标签就足够了。 Git对象是不可变的,因为每个对象的SHA-1对象名称都是从其内容派生的。因此,从已知的受信任点开始,您和其他人可以追逐指针(这是git log
,git checkout
,git fsck
等在幕后做的事情)来验证完整性。< / p>
如果您正在处理未发布的历史记录,请考虑使用git merge --squash
或git rebase -i
压缩历史记录并签署生成的提交。
答案 1 :(得分:0)