2011-09-03 11 views

Respuesta

27

Un simple gancho pre-commit que comprueba si la cadena '@todo' está siendo añadido podría parecer:

#!/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 

Si este es el contenido de .git/hooks/pre-commit y es ejecutable, cualquier parche que añade la la cadena @todo será rechazada.

+0

Muy bueno. Todavía tengo que probar esto, pero parece exactamente lo que quería. Pregunta: ¿Es posible 'morir' a menos que esté presente una bandera personalizada? Se usaría similar a: 'git commit -m'msg '' --ignore-todo' –

+1

No creo que el gancho tenga acceso a los argumentos de la línea de comando, pero puedes (en los shells de Bourne) do 'IGNORE_TODO = yes git confirmar -m msg 'y verificar dentro del gancho si $ IGNORE_TODO = yes. –

+3

También puede agregar -n para suprimir todos los ganchos –

4

Puede tener un gancho pre-commit que busca la secuencia y bloquea (avisa) la confirmación.

El gancho de precompilación de muestra (en .git/ganchos) debe comenzar.

+0

+1: Sí, ganchos del lado del cliente son la forma de hacerlo. –

1

zsh proporciona un gancho de ejecución previo al comando que podría permitir la ejecución de algún tipo de script que interrogaría su confirmación, grep-ing para @ do-do o @hack, y le avisará antes de realizar la confirmación real. Esta publicación (http://sebastiancelis.com/2009/11/16/zsh-prompt-git-users/) se trata realmente de crear un elegante prompt de git en zsh, pero habla sobre el uso del enlace de ejecución previo al comando.

4

Para una solución más general y completa de esto, echar un vistazo a Git Confirm:

Asciinema Git Confirm demo

Cuestiones relacionadas