回答:
署名する各コミットの後に次の行を追加します
exec git commit --amend --no-edit -S
これは、各コミットを選択した後にこのコマンドを実行します。
これを行う簡単な方法は次のとおりです。
git rebase --exec 'git commit --amend --no-edit -n -S' -i development
これにより、開発(または任意のハッシュ)まですべてがリベースされ、コミットするたびに貼り付けをコピーする必要がなくなります。
resign = "!re() { git rebase --exec 'git commit --amend --no-edit -n -S' -i $1; }; re"
になるgit resign HASH
git commit --amend --no-edit -n -S
です。
git push --force
か?
を使用してgit rebase -i --root
(「履歴の書き換え」を参照)、に変更pick
しedit
ます。
次に、各コミットにgit commit -S --amend --no-edit && git rebase --continue
(Windowsで)使用します。
これは、コミットごとに手動で署名します。より良い解決策が見つかることを願っています。
特定のコミットのみをフィルタリングし、それらにのみ署名する場合は、次を使用できます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
これは、何らかの理由で、自分のコミットのみに署名したい場合に便利です。
現在のブランチの特定のコミット以降、すべてのコミットにGPGで署名する必要がある場合は、代わりに次を使用できます。
git filter-branch --commit-filter 'git commit-tree -S "$@";' <COMMIT>..HEAD
<COMMIT>
コミットIDはどこにありますか(例abc123e5
)。
これには、コミットメタデータ(コミット日を含む)を妨げないという追加の利点があります。
また、コミットのたびにGPGパスフレーズの入力を求められないようにする場合は、https://askubuntu.com/a/805550も ご覧ください。
注:からの切り替えgpg
にgpg2
GIT署名には、GPG 2で再インポートする秘密鍵にあなたが必要となります。
git config commit.gpgsign true
。