Idealmente, gli hook vengono scritti in bash, se si seguono i file di esempio. Ma puoi scriverlo in qualsiasi lingua disponibile e assicurarti che abbia il flag eseguibile.
Quindi, puoi scrivere un codice Python o Go per raggiungere i tuoi obiettivi e posizionarlo nella cartella hook. Funzionerà, ma non sarà gestito insieme al repository.
Due opzioni
a) Script multipli
Puoi codificare i tuoi hook all'interno del tuo aiuto e aggiungere un piccolo frammento di codice agli hook, per chiamare il tuo script perfetto, in questo modo:
$ cat .git/hooks/pre-commit
#!/bin/bash
../../hooks/myprecommit.js
b) Script singolo
Un'opzione più interessante è quella di aggiungere solo uno script per governarli tutti, anziché diversi. Quindi, crei un hook / mysuperhook.go e punti ogni hook che vuoi avere.
$ cat .git/hooks/pre-commit
#!/bin/bash
../../hooks/mysuperhook.go $(basename $0)
Il parametro fornirà al tuo script quale hook è stato attivato e puoi differenziarlo all'interno del tuo codice. Perché? A volte potresti voler eseguire lo stesso controllo per commit e push, ad esempio.
E poi?
Quindi, potresti voler avere ulteriori funzionalità, come:
- Attiva manualmente l'hook per verificare se tutto è ok anche prima di un commit o push. Se chiami semplicemente il tuo script (opzione a o b) farebbe il trucco.
- Attiva gli hook su CI, quindi non è necessario riscrivere gli stessi controlli per CI, ad esempio sarebbe solo chiamare il commit e premere i grilletti. Lo stesso di quanto sopra dovrebbe risolverlo.
- Chiama strumenti esterni, come un validatore markdown o un validatore YAML. Puoi creare syscall e devi gestire STDOUT e STDERR.
- Assicurati che tutti gli sviluppatori abbiano un modo semplice per installare gli hook, quindi è necessario aggiungere uno script piacevole al repository per sostituire gli hook predefiniti con quelli corretti
- Avere alcuni aiutanti globali, come un controllo per bloccare, si impegna a sviluppare e padroneggiare i rami, senza doverlo aggiungere a tutti i repository. Puoi risolverlo avendo un altro repository con script globali.
Questo può essere più semplice?
Sì, ci sono diversi strumenti per aiutarti a gestire git-hook. Ognuno di essi è progettato su misura per affrontare il problema da una prospettiva diversa e potrebbe essere necessario comprenderli tutti per ottenere quello che è meglio per te o il tuo team. GitHooks.com offre molte letture sull'aggancio e diversi strumenti disponibili oggi.
Ad oggi, ci sono 21 progetti elencati lì con diverse strategie per gestire git hook. Alcuni lo fanno solo per un singolo hook, altri per una lingua specifica e così via.
Uno di quegli strumenti, scritto da me e offerto gratuitamente come progetto opensource, si chiama hooks4git . È scritto in Python (perché mi piace) ma l'idea è quella di gestire tutti gli elementi sopra elencati in un singolo file di configurazione chiamato .hooks4git.ini, che vive all'interno del tuo repository e può chiamare qualsiasi script che desideri chiamare, in qualsiasi lingua .
L'uso dei git git è assolutamente fantastico, ma il modo in cui vengono offerti di solito allontana solo le persone.