web-dev-qa-db-fra.com

Git signe les validations précédentes?

Je me demandais comment signer (-s) sur les validations précédentes que j'ai faites dans le passé avec git?

55
camelCaseD

Pour approuver le commit précédent, utilisez l'option de modification:

git commit --amend --signoff

Modifier: l'amendement ne valide que le dernier commit. Pour approuver plusieurs validations, filter-branch et interpret-trailers comme suggéré par vonc et. Al. Devrait être utilisé. Voici ce qui a fonctionné pour moi.

Tout d'abord, configurez git pour remplacer le jeton sign par Signed-off-by. Cela 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 validation. Le filtre peut être n'importe quelle commande Shell qui reçoit le message de validation sur stdin et sort sur stdout. Vous pouvez écrire votre propre filtre ou utiliser git interpret-trailers, qui est indépendant. Voici un exemple qui validera les deux derniers validations de la branche actuelle en utilisant l'utilisateur et l'adresse e-mail 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

Remarque 1) La modification des messages de validation change l'ID de validation, ce qui signifie que le déplacement sur les branches déjà publiées devra être forcé soit avec --force ou mieux - force-with-lease .

Note 2) si vous avez l'intention d'écrire votre script personnalisé, sachez 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 être dans votre $PATH ou fourni comme chemin absolu.

77
fgiraldeau

Essayez celui-ci pour refaire les anciens commits avec un -S:

git filter-branch -f --commit-filter 'git commit-tree -S "$@"' HEAD

Après cela, vous devez git Push -f. Mais soyez prudent, les ID de validation changeront et les autres personnes seront désynchronisées.

23
Sebastian Mancke

Étant donné que les approbations modifient le message de validation, utilise git filter-branch pour y parvenir.

git filter-branch --msg-filter \
    "cat - && echo && echo 'Signed-off-by: Dan McGee <[email protected]>'" \
    HEAD

(exemple de " git filter-branch magie ")

Ou, en suivant Curt J. Sampson 's suggestion , en utilisant git interpret-trailers :

git config trailer.sign.key "Signed-off-by"
git filter-branch --msg-filter \
    "cat - && echo && git interpret-trailers --trailer 'sign: 'Signed-off-by: Dan McGee <[email protected]>'" \
    HEAD

mise en garde : cela changera le SHA1 de vos validations existantes, et vous devrez peut-être forcer Push le résultat, ce qui peut être problématique si vos validations sont déjà partagées par d'autres.

vorburger ajoute dans le commentaire un exemple:

En utilisant la version 2.20.1 de git, j'ai dû omettre "Signed-off-by" dans --trailer 'sign:, et faites comme ceci:

git filter-branch --msg-filter \
  "cat - && echo && git interpret-trailers --trailer 'sign: Michael Vorburger <[email protected]>'" \
  HEAD
10
VonC

Pour moi, juste modifier signof, n'a pas réellement vérifié mes commits sur github.

La solution qui a fonctionné pour moi revient, puis signez chaque commit avec -S

git commit --amend -S

Aussi, si vous vérifiez si votre commit est réellement signé et que votre email/nom n'est tout simplement pas ajouté, utilisez cette commande

git show HEAD --show-signature

Astuce supplémentaire: Si vous modifiez déjà vos commits, vous voudrez peut-être y insérer votre vrai nom (voir en utilisant git log). Vous utilisez peut-être le nom de votre identifiant github, qui n'est pas nécessaire. Seul un e-mail correct est nécessaire et dans le champ du nom d'utilisateur, vous devez utiliser votre nom complet et github le suivra correctement avec le nom de votre identifiant github. Donc, pour corriger votre nom d'utilisateur et signer la dernière validation, utilisez:

git commit --amend --author="FULL NAME <email>" -S

et également définir le nom complet du nom d'utilisateur à l'avenir par

git config --global user.name "FULL NAME"
6
Varun Garg

J'ai eu un problème similaire. Ici, grâce à Robin Johnson de Gentoo Linux est une astuce pour ajouter la signature à tous mes précédents commits non poussés:

$ git pull && git rebase --gpg-sign --force-rebase Origin/master && git Push --signed
Already up-to-date.
Current branch master is up to date, rebase forced.
First, rewinding head to replay your work on top of it...
Applying: sci-biology/KING: new package
Applying: dev-lang/yaggo: version bump, fix install procedure
Applying: sci-libs/htslib: version bump
Applying: sci-biology/bcftools: version bump
Applying: sci-biology/samtools: version bump
Applying: sci-biology/libBigWig: new release with io.h renamed to bigWigIO.h
Applying: sci-biology/MaSuRCA: add more URLs to HOMEPAGE
Applying: sci-biology/SPAdes: update comments on bundled dev-libs/boost
Applying: sci-biology/khmer: added a comment how to proceed with src_compile()
Applying: sci-biology/picard: version bump
Applying: sci-biology/ruffus: pint EGIT_REPO_URI to the archive URL of code.google.com
Applying: sci-biology/vcftools: the 0.1.15_pre release was just renamed to 0.1.15 by upstream
Applying: sci-biology/nanopolish: new package
Applying: sci-biology/libBigWig: version bump
Counting objects: 75, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (75/75), done.
Writing objects: 100% (75/75), 14.51 KiB | 0 bytes/s, done.
Total 75 (delta 55), reused 0 (delta 0)
remote: To github.com:gentoo/sci.git
remote:    29c5e3f5d..b37457700  master -> master
To git+ssh://git.gentoo.org/proj/sci.git
   29c5e3f5d..b37457700  master -> master
$
5
Martin