C'è un modo per "autosign" eseguire il commit in Git con una chiave GPG?


213

C'è un modo semplice per fare in modo che Git firmi sempre ogni commit o tag creato?

L'ho provato con qualcosa del tipo:

alias commit = commit -S

Ma questo non ha funzionato.

Non voglio installare un programma diverso per farlo accadere. È fattibile con facilità?

Solo una domanda a margine, forse i commit non dovrebbero essere firmati, ma solo tag, che non creo mai, poiché invio i commit singoli per un progetto come Homebrew, ecc.


8
Il motivo per cui il tuo alias ha funzionato è perché non puoi alias su un comando già esistente. (correlato: stackoverflow.com/questions/5875275/git-commit-v-by-default stackoverflow.com/questions/2500586/… stackoverflow.com/questions/1278296/… )
Dan D.

2
Solo per info: riscrivi tutti gli commit da spingere per firmarli: git filter-branch -f --commit-filter 'git commit-tree -S "$@"' HEAD@{u}..HEAD(non intendo che dovresti usare questo).
Vi.

Risposte:


275

Nota: se non vuoi aggiungere -Stutto il tempo per assicurarti che i tuoi commit siano firmati, c'è una proposta (branch ' pu' per ora, dicembre 2013, quindi nessuna garanzia che passerà a una versione git) per aggiungere un config che si occuperà di quell'opzione per te.
Aggiornamento maggio 2014: è in Git 2.0 (dopo essere stato reinviato in questa serie di patch )

Vedi commit 2af2ef3 di Nicolas Vigier (boklm) :

Aggiungi l' commit.gpgsignopzione per firmare tutti i commit

Se vuoi GPG firmare tutti i tuoi commit, devi sempre aggiungere l' -Sopzione.
L' commit.gpgsignopzione di configurazione consente di firmare automaticamente tutti i commit.

commit.gpgsign

Un valore booleano per specificare se tutti i commit devono essere firmati GPG.
L'uso di questa opzione quando si eseguono operazioni come rebase può comportare la firma di un gran numero di commit. Potrebbe essere conveniente usare un agente per evitare di digitare più volte la passphrase GPG.


Tale configurazione è generalmente impostata per repository (non è necessario firmare i repository locali sperimentali privati):

cd /path/to/repo/needing/gpg/signature
git config commit.gpgsign true

Dovresti combinarlo con user.signingKeyusato come impostazione globale (chiave univoca utilizzata per tutti i repository in cui vuoi firmare il commit)

git config --global user.signingkey F2C7AB29

user.signingKeyè stato introdotto in git 1.5.0 (gennaio 2007) con commit d67778e :

Non dovrebbe esserci l'obbligo di utilizzare la stessa forma del mio nome nel mio repository git e nella mia chiave gpg.
Inoltre potrei avere più chiavi nel mio portachiavi e potrei volerne usare una che non coincide con l'indirizzo che uso nei messaggi di commit.

Questa patch aggiunge una voce di configurazione " user.signingKey" che, se presente, verrà passata al parametro "-u" per gpg, consentendo la sostituzione della chiave di firma del tag.

Ciò viene applicato con commit aba9119 (git 1.5.3.2) al fine di individuare il caso in cui l'utente ha configurato erroneamente il user.signingKeyproprio .git/configo semplicemente non ha chiavi segrete nel proprio portachiavi.

Appunti:


È davvero fantastico. C'è un modo semplice su github di fare qualcosa come git descrivere senza dover scaricare il repository buche?

13
Non hai bisogno di firmare i tuoi repository sperimentali privati ​​... ma perché non dovresti?
Andy Hayden,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.