2013-03-21 3 views
10

Per convenzione creo i rami della mia storia in git per includere gli ID dei numeri di Jira in essi, ad es. FOO-1001. Ho una sceneggiatura per farlo per me. Ora ho preparato un altro script che recupera il titolo di FOO-1001 da Jira API. Voglio ottenere che quando si digita:Come fornire un messaggio di commit git preparato?

$ git commit 

Il mio editore si apre preriempita con il seguente:

BUGFIX: FOO-1001 Some sample issue title downloaded using my script 

Qual è il modo più semplice per raggiungere questo obiettivo utilizzando gli script che ho descritto? La mia idea è di formattare in qualche modo il messaggio di commit su un file in modo che git possa trovarlo e usarlo come predefinito. Un modo sembra essere quello di utilizzare l'hook prepare-commit-msg, ma preferirei raggiungere il mio obiettivo utilizzando uno script standalone, senza alcuna configurazione in .git (in modo che i miei colleghi possano facilmente riutilizzarlo).

+0

La risposta da chepner a utilizzare i modelli è quella corretta. Se vuoi condividerlo con i tuoi colleghi è meglio mettere il tuo hook 'prepare-commit-msg' e alcuni file template in un repository accessibile a tutti i membri della tua organizzazione. Puoi anche inserire uno script di installazione in quel repository. –

+0

Sono andato con quella soluzione e funziona bene. L'unica cosa che mi addolora è che recuperare l'ID del problema richiede un po 'e rallenta 'git commit'. Se ne sono abbastanza infastidito, potrei salvare il messaggio di commit in qualche posto nella creazione del ramo. Grazie ragazzi. – VoY

risposta

16

Il comando commit ha un'opzione per la lettura di un messaggio di commit da un modello:

-t <file>, --template=<file> 
     When editing the commit message, start the editor with the contents 
     in the given file. The commit.template configuration variable is often 
     used to give this option implicitly to the command. This mechanism can 
     be used by projects that want to guide participants with some hints on 
     what to write in the message in what order. If the user exits the editor 
     without editing the message, the commit is aborted. This has no effect 
     when a message is given by other means, e.g. with the -m or -F options. 
+0

Questo non funziona con 'git tag --annotate'. C'è un modo per superare questa limitazione? – weaver

+0

Non che io sappia. Sembra strano che supporti '-m' ma non' -t'; l'ipotesi potrebbe essere che i messaggi di commit dei tag generalmente siano abbastanza brevi da non richiedere un modello. – chepner

+0

GitHub ha iniziato a utilizzare le annotazioni dei tag come annotazioni di rilascio, quindi voglio essere in grado di dire 'git tag --annotate --template <(git log $ (git describe --abbrev = 0) .. HEAD)' nel mio script di rilascio. Sembra impossibile :( – weaver

3

C'è anche -F:

-F <file>, --file=<file> 
     Take the commit message from the given file. Use - to read the message from the standard input. 
+1

Questo creerà il commit, non aprirà un editor – Andy

+1

Usa l'opzione '-e, --edit'. – klokop