Pour signer le commit précédent, utilisez l'option amend :
git commit --amend --signoff
Edit : l'amendement ne signe que le dernier commit. Pour signer plusieurs commits, filter-branch
y interpret-trailers
comme suggéré par vonc et autres devraient être utilisés. Voici ce qui a fonctionné pour moi.
Tout d'abord, configurez git pour remplacer le jeton sign
por Signed-off-by
. Ceci ne doit être fait qu'une seule fois et est nécessaire à l'étape suivante.
git config trailer.sign.key "Signed-off-by"
La commande git filter-branch
avec l'interrupteur --msg-filter
évaluera le filtre une fois pour chaque livraison. Le filtre peut être n'importe quelle commande shell qui reçoit le message de livraison sur stdin et le sort sur stdout. Vous pouvez écrire votre propre filtre, ou utiliser git interpret-trailers
qui est indépendant. Voici un exemple qui signera les deux derniers commits de la branche actuelle en utilisant l'utilisateur et l'email actuels :
export SIGNOFF="sign: $(git config --get user.name) <$(git config --get user.email)>"
git filter-branch -f --msg-filter \
"git interpret-trailers --trailer \"$SIGNOFF\"" \
HEAD~2..HEAD
Note 1) La modification des messages de commit change l'identifiant de commit, ce qui signifie que la poussée sur des branches déjà publiées devra être forcée soit avec --force
ou mieux --force-with-lease .
Note 2) si vous avez l'intention d'écrire votre script personnalisé, faites attention que git filter-branch
change le répertoire courant en <repo>/.git-rewrite/t
. L'utilisation d'un chemin relatif vers le script ne fonctionnera généralement pas. Au lieu de cela, le script doit se trouver dans votre fichier $PATH
ou fourni sous la forme d'un chemin absolu.