Uh, oh, esta pregunta parece haber resuelto las grietas. Espero que sigas ahí afuera, Esben!
Está buscando una update hook, que se ejecuta una vez por cada ref actualizada. Los argumentos son el nombre de la referencia, el nombre del objeto anterior (confirmación SHA1) y el nuevo nombre del objeto.
Por lo tanto, todo lo que necesita hacer es verificar la diferencia entre lo viejo y lo nuevo y asegurarse de que cumpla con sus estándares. Esto no es totalmente sencillo, por supuesto, pero es totalmente manejable. Esto es lo que haría:
Guarde la siguiente secuencia de comandos en .git/hooks/update
.
old=$2
new=$3
# that's a literal tab, because (ba)sh turns \t into t, not a tab
# make sure your editor doesn't expand it to spaces
git diff --name-only $old $new | egrep '(\.(cpp|h)$)|^CMakeLists.txt$' | xargs -d'\n' git diff -U0 $old $new -- | grep -q '^+.* ' && exit 1
que muestra todos los archivos que difieren entre las viejas y nuevas, greps para todos los deseados, obtiene el diff para ellos (con cero líneas de contexto, ya que no nos importa), y para greps una línea adicional (comenzando con +
) que contiene una pestaña. El grep sale exitoso si encuentra uno, lo que permitirá que &&
ejecute exit 1
, haciendo que el gancho salga de falla y aborte la actualización.
Tenga en cuenta que esto es ligeramente diferente de sus requisitos: comprueba si el diff agrega caracteres de pestañas. Esto es probablemente mejor a largo plazo; una vez que se haya asegurado de que su código actual está bien, es lo mismo, excepto mucho más rápido, ya que no tiene que buscar todo el contenido.
¿Está pidiendo ayuda para escribir el gancho, o si un gancho de actualización funcionará para este propósito? – Cascabel
Ambos en realidad :) Me sorprendió mucho que esto no fuera fácil de encontrar y descargar, así que tengo la sensación de que no es trivial. Un ejemplo de cómo podría ser ese gancho ayudaría mucho. –