2011-09-03 9 views

risposta

27

Un semplice pre-commit hook che controlla se la stringa '@todo' è stato aggiunto potrebbe sembrare:

#!/bin/sh 

. git-sh-setup # for die 
git-diff-index -p -M --cached HEAD -- | grep '^+' | 
grep @todo && die Blocking commit because string @todo detected in patch 

Se questo è il contenuto della .git/hooks/pre-commit ed è eseguibile, qualsiasi patch che aggiunge la stringa @todo verrà rifiutata.

+0

Molto bello. Devo ancora provare questo, ma sembra esattamente quello che volevo. Domanda: è possibile "morire" a meno che non sia presente una bandiera personalizzata? Sarebbe stato usato come: 'git commit -m" msg "--ignore-todo' –

+1

Non penso che l'hook abbia accesso agli argomenti della riga di comando, ma puoi (nelle shell Bourne) fare 'IGNORE_TODO = yes git commit -m msg 'e verifica all'interno del hook se $ IGNORE_TODO = yes. –

+3

Puoi anche aggiungere -n per sopprimere tutti i ganci –

4

È possibile avere un hook pre-commit che cerca la stringa e blocca (avverte) il commit.

Il gancio di pre-commit di esempio (sotto .git/hook) dovrebbe iniziare.

+0

+1: Yup, ganci sul lato client sono il modo per farlo. –

1

zsh fornisce un hook di esecuzione pre-comando che potrebbe consentire l'esecuzione di alcuni tipi di script che interrogheranno il commit, grep-ing per @ to-do o @hack e avviseranno prima di eseguire il commit effettivo. Questo post (http://sebastiancelis.com/2009/11/16/zsh-prompt-git-users/) riguarda davvero la creazione di un prompt git fancy in zsh, ma parla dell'utilizzo del hook dell'esecuzione pre-comando.

4

Per una soluzione più generale e approfondita a questo, dare un'occhiata a Git Confirm:

Asciinema Git Confirm demo