237 votes

Pouvez-vous signer GPG les anciens commits ?

Git a maintenant la possibilité de signer commits avec git commit -S ce qui est très bien, mais parfois j'oublie le drapeau à commit et parfois je m'envoie des correctifs par courrier que j'applique avec am et cette commande n'a pas d'indicateur pour la signature.

Existe-t-il un moyen d'ajouter une signature à un commit déjà enregistré ?

11voto

Si vous voulez filtrer seulement des commits spécifiques et ne signer qu'eux, vous pouvez utiliser 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

Ceci est utile si, pour une raison quelconque, vous voulez signer uniquement vos propres commits.

7voto

Julien Carsique Points 151

Si aucun filtrage sur commit n'est nécessaire, alors il est préférable d'utiliser rebase que filter-branch :

git rebase -i master --exec 'git commit --amend --no-edit --no-verify -S --reset-author'

Sinon, vous pouvez laisser intacts les commits que vous ne possédez pas.
Définissez l'alias suivant dans ~/.gitconfig (remplacer your@address.com avec votre adresse électronique) :

resign = "!_() { : git checkout ; [ \"$#\" -eq 0 ] && echo 'Usage: resign <rev-list>' && exit 2; \
                   git filter-branch --commit-filter ' \
                   if [ \"$GIT_COMMITTER_EMAIL\" = \"your@address.com\" ]; then git commit-tree -S \"$@\"; else git commit-tree \"$@\"; fi' $1; }; _"

Alors par exemple, pour résilier tous vos commits dans la branche courante tirée de master, faites :

git resign master..

Crédits pour les réponses précédentes par BarryMode y Roberto Leinardi

3voto

Jubair Points 109

Voici celui que j'utilise pour tous les commits, oui il va réécrire l'historique :

git rebase --exec 'git commit --amend --no-edit -n -S' -i --root

5 votes

Notez que la date de commit est réinitialisée à la date du jour.

3voto

Fardin Abdi Points 119

Pour signer le dernier N commits, vous pouvez également faire :

git rebase HEAD~N --signoff

13 votes

Il convient de noter que --signoff est différent de signature (par exemple, lors de l'utilisation de git commit -S ). AFAIK signoff ajoute simplement une ligne comme Signed-off-by <author> <email> au message commit.

0 votes

Pour plus de détails sur les différences, voir medium.com/@MarkEmeis/

0 votes

La question sur la signature est ici : stackoverflow.com/questions/13043357/

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X