Categorías
hoy aprendí ...

… a implementar los metadatos en GIT

Hace tiempo que quiero guardar la fecha de los archivos cuando se hacen los commits en GIT y que al hacer el checkout vuelva a restaurarlos.

Había encontrado un par de soluciones, entre ellas:

Pregunta en stackoverflow.com acerca de la misma inquietud, en donde se exponen algunas propuestas, hacer un script ad Hoc, Metastore (que ya está como caido) y git-cache-meta que parece funcionar
git-cache-meta

Que tiene varias contribuciones, entre ellas una de danny0838 con una adaptación para msysgit

Y para utilizarlo de manera automática encontré en la misma pregunta una forma de utilizarlo, el mismo danny0838 hizo una versión más ligera pero que utilizar Perl y depende de commandos *nix.

https://github.com/danny0838/git-store-meta

Lo que logré fue adaptar los hooks en pre-commit y post-checkout para que lanze el comando.

Falta mejorarlo para que cuando se clona el proyecto por primera vez, instale los hooks de manera automática y hace el –apply de los metadatos.

copiar_hooks_client_side.sh

#!/bin/sh

# Copia los hooks de un repositorio de hooks a la carpeta del proyecto GIT desde donde se llama.

echo "Copiando HOOKS de GIT-CACHE-META-MSYSGIT al proyecto $PWD"
cp /ruta-al-repo-de-hooks/git-cache-meta-msysgit.sh $PWD/.git/hooks/git-cache-meta-msysgit.sh
cp /ruta-al-repo-de-hooks/post-checkout $PWD/.git/hooks/post-checkout
cp /ruta-al-repo-de-hooks/pre-commit $PWD/.git/hooks/pre-commit

pre-commit

#!/bin/sh
# when running the hook, cwd is the top level of working tree

# store
echo "Almacenar metadatos de archivos en el repo ..."
sh $(dirname "$0")/git-cache-meta-msysgit.sh --store || exit 1

# remember to add the updated cache file
git add .git_cache_meta

post-checkout

#!/bin/sh
# when running the hook, cwd is the top level of working tree

sha_old=$1
sha_new=$2
change_br=$3

# apply metadata only when the HEAD is changed
if [ ${sha_new} != ${sha_old} ]; then
 echo "Recuperar metadatos de archivos ..."
 sh $(dirname "$0")/git-cache-meta-msysgit.sh --apply
fi

Nota: para saber sobre los directorios en script bash (

$PWD

http://unix.stackexchange.com/questions/188182/how-to-get-current-working-directory