Applicare un hook post-commit git a tutti i repository attuali e futuri

Ho scritto un hook post-commit Git e funziona correttamente. Tuttavia, voglio aggiungere questo hook per applicarlo a tutti i repository git attuali (e futuri) su cui sto lavorando. Ho provato ad aggiungere l’hook al mio ~/.git/hooks/ anziché alla directory hooks nella directory del progetto, tuttavia, questo non sembrava funzionare.

C’è un modo per creare hook Git globali che si applicheranno a tutti i repository sul mio sistema (senza doverli copiare in ogni directory di progetto)? In caso contrario, quale sarebbe la soluzione migliore in futuro, forse un modello git-init?

Voglio aggiungere questo hook per applicare a tutti i repository git attuali (e futuri) su cui sto lavorando

Con git 2.9+ (giugno 2016), tutto quello che devi fare è:

 git config --global core.hooksPath /path/to/my/centralized/hooks 

Vedi ” cambia i git predefiniti di git “: questo è stato fatto per gestire gli hook centralizzati.

A partire da git 1.7.1, puoi impostare init.templatedir nel tuo gitconfig per dire a git dove cercare i template.

Impostalo in questo modo:

 git config --global init.templatedir '~/.git_template' 

In seguito, i nuovi repository creati o clonati utilizzeranno questa directory per i modelli. Metti i ganci che vuoi in ~/.git_template/hooks . I repository esistenti possono essere reinizializzati con i template appropriati eseguendo git init nella stessa directory in cui si trova .git .

Per le versioni git precedenti alla 1.7.1, l’esecuzione di git init --template ~/.git_template funzionerà se sei come me e vuoi ancora gestire la tua .git_template insieme al resto dei tuoi file dot. Puoi anche usare l’ambiente $GIT_TEMPLATE_DIR per dire a git init dove si trova la tua directory template.

Se li vuoi ovunque sul tuo sistema (compresi gli utenti oltre a te), puoi modificare il contenuto della directory del modello installato – quelli sono in $PREFIX/share/git-core/templates/hooks , dove $PREFIX è probabilmente /usr/local o /usr .

Se vuoi che questo sia solo per te, allora sì, la cosa più semplice sarebbe l’opzione --template di git-init. Si può facilmente tenere una directory di template personale che ha dei collegamenti simbolici alla versione installata dei valori di default che si desidera conservare (singoli hook, la directory delle informazioni …) e quindi il proprio contenuto in hooks/post-commit e qualsiasi altra cosa si desideri personalizzare.

Un approccio minimalista è quello di creare una directory git_hooks/ nel tuo repository per tracciare gli hook che scrivi per quel progetto, portarlo all’attenzione degli utenti futuri menzionandolo in un README e affidarsi a loro per fare la cosa giusta dopo averli hai clonato. Ho riflettuto su questo per un po ‘e ho scelto un approccio incrementale. In fondo alla strada potrei prendere in considerazione l’uso di uno strumento come git-hooks .