En un repositorio de git con el que trabajo, cada vez que hago un cambio necesito copiar algunos archivos a un directorio específico.

Lo primero que hice fue crea un archivo Makefile con la regla copy para copiar todo donde correspondía. El cual dejé en la raíz del repositorio.

Hasta ahí, todo bien. Pero cada vez que había un nuevo cambio, era necesario tener presente la tediosa tarea de hacer

make copy

Una forma de automatizar esta tarea es con un hook de git, los cuales son scripts que son ejecutados cuando cierto tipo de acciones relacionadas con git ocurren.

Cualquier repositorio de git contiene el directorio ./git/githooks, con una serie de ejemplos.

En mi caso, me interesaba que make copy se ejecutara después de realizar un commit, por lo cual bastaba con crear, en el directorio .git/githooks, el archivo post-commit, o modificar el ya existente como ejemplo, y muy importante, darle permisos de ejecución.

Un hook se ejecuta en el directorio raíz de git, por lo cual, y como mi Makefile estaba en esa ubicación , al archivo post-commit sólo fue necesario agregar

make copy

Todas las ordenes de copiado podría haberlas escrito directamente en el hook, pero para algunas cosas prefiero usar make y el archivo Makefile ya estaba creado.

En man githooks está la lista de git hooks disponibles:

applypatch-msg
pre-applypatch
post-applypatch
pre-commit
prepare-commit-msg
commit-msg
post-commit
pre-rebase
post-checkout
post-merge
pre-receive
post-receive
post-update
pre-auto-gc
post-rewrite

Utilizando algo similar, pensaba crear un archivo changelog que se modificar automáticamente, ya que para algunos menos amigos de git, es más fácil contar con este tipo de registro de cambios.

También he leído que el hook pre-commit es utilizado para lanzar tests, lo cual suena a una muy buena practica.

###Referencias