2010-02-26 12 views
11

Uno de los caprichos inevitables de git es su incapacidad para almacenar y recuperar metadatos sobre un archivo. Por ejemplo, en el mac, las etiquetas se almacenan con "atributos extendidos" (accesible con xattr), y cualquier comando de extracción/reinicio/fusión/extracción borrará esos atributos si el archivo se ve afectado por el pago y envío.Git hooks para almacenamiento/recuperación de metadatos

Miré a mi alrededor para ver si alguien ya había escrito guiones para guardar metadatos, pero me quedé seco.

Así que lo que me gustaría hacer es utilizar el sistema de gancho de Git a:

  1. Leer atributos extendidos cuando se cometen archivos,
  2. Escribir los atributos de un archivo almacenado en el repositorio que también recibe el cometido ,
  3. Aplicar los atributos extendidos a los archivos que se modifican en un merge/checkout/reset.

¿Cuál de los ganchos debo usar? ¿Son post-receive y pre-commit todo lo que necesito? ¿Puede pre-commit agregar también un archivo a la confirmación (es decir, después de escribir los nuevos atributos)?

+0

¿Por qué la downvote? Si la pregunta no es satisfactoria, deje un comentario para que pueda corregirla. –

Respuesta

3

El gibak tool utiliza pre-commit y post-checkout para que su herramienta ometastore salvar/restaurar los metadatos (que incluye opcionalmente xattrs).

No desea post-receive. Se ejecuta en el extremo remoto de los empujes. Se ejecuta en repositorios simples, por lo que no tiene sentido tratar de actualizar los archivos de los contenidos de una confirmación push. Hágalo en post-checkout donde sabe que tendrá un árbol de trabajo disponible.

+1

post-merge también es uno que se debe utilizar. Ver githooks (5) http://ftp.kernel.org/pub/software/scm/git/docs/githooks.html –

+0

@Seth Johnson: buena captura. Podría hacer que 'post-merge' haga el mismo tipo de trabajo que' post-checkout' para reconstruir cualquier metadato que se haya perdido cuando la fusión reescribió los archivos. Sin embargo, combinar los metadatos puede ser complicado, dependiendo de cómo las herramientas elegidas lo almacenen y lo pongan a disposición para su visualización/difusión. –

+0

Si alguien más está interesado en una herramienta como gibak, parece que Slug (https://github.com/hbaragar/slug) es una bifurcación mantenida más recientemente de gibak con la capacidad de realizar copias de seguridad en un repositorio remoto. – mormegil

0

metastore es capaz de guardar y restaurar los metadatos del archivo, almacenarlo en un archivo separado (que se puede incluir en sus confirmaciones)