¿Cómo habilito la cadena de identificación para repositorys Git?

¿Cómo ident $Id$ en files en un repository de Git?

Resumen: la forma recomendada de incorporar información de versión en el producto es usar el sistema de compilation para eso; ver a continuación para get detalles y enfoques alternativos.


En Git (y creo que generalmente también en otros sistemas VCS con commits atómicos) no existe la versión de un solo file .

Git admite la expansión bajo demanda de la palabra key $Id:$ , pero:

  1. Se realiza solo bajo petición . Debe especificar (quizás utilizando un patrón globbing) que un file (o un set de files) tiene un set de attributes ident (en el file '.gitattributes' en tree, o en '.git / info / attributes' para la configuration del repository local) .
  2. Se expande a SHA-1 de contenido de files (o para ser más exacto a $Id:<sha-1 of blob>$ ). El motivo de esta elección es que Git no toca files que no han cambiado durante el cambio de twig o el rebobinado; si '$ Id: $' se expandió a la información de revisión, se necesitaría actualizar cada file controlado por la versión, por ejemplo, al cambiar de twig.

Git admite un set bastante amplio de $Format:...$ placeholders que se expande para confirmar la información (por ejemplo, $Format:%H$ reemplazado por un commit hash) pero:

  1. La expansión solo se realiza al ejecutar git archive , en su file de salida.
  2. Se realiza a petición , controlado mediante export-subst atributo export-subst .

La forma recomendada de incorporar información de versión es hacerlo a través del sistema de compilation (en una etapa de compilation); ver, por ejemplo, el script Git Makefile y GIT-VERSION-GEN utilizado por Makefile en la interfaz web de git para el repository de git.git.

Sin embargo, puede (ab) usar un controller de filter clean / smudge (a través del atributo de filter ) para get una expansión de palabras key similar a CVS, expandir las palabras key al momento del pago y limpiarlas al ingresar los contenidos en el repository.

Puede hacer esto agregando un patrón para qué files desea esta funcionalidad, seguido de ident en el file .gitattributes . Esto replaceá $ Id $ con $ Id: <40-digit SHA> $ en la salida del file. Sin embargo, tenga en count que no le dará un número de revisión del file como en CVS / SVN.

Ejemplo:

 $ echo '*.txt ident' >> .gitattributes $ echo '$Id$' > test.txt $ git commit -a -m "test" $ rm test.txt $ git checkout -- test.txt $ cat test.txt 

Enlace a gitattributes (5) Página manual

Ident de Git no hace lo que $ Id $ hace en otros sistemas de versiones. Como un kludge, use RCS junto con git: RCS para revisiones de files individuales y git para marcar el proyecto como un todo. Como dije, esto es un desafío, pero tiene sentido (a veces para algunas cosas).