2010-12-26 10 views
10

¿cómo hacemos para cambiar la versión (cada uno +1) usando git en cada inserción?versión de actualización cada vez que se hace git push?

ejemplo tengo un archivo php 2

libs/lib1.php 
libs/lib2.php 

en cada cabecera por lo general hay una cierta información como

/** 
* LIB1.PHP 
* this libs does something like this 
* and that this is a doc for you 
* @version 145 
* @todo something todo 
* @author DAMS 
*/ 

/** 
* LIB2.PHP 
* this libs does something like this 
* and that this is a doc for you 
* @version 445 
* @todo something todo 
* @author DAMS 
*/ 

podemos buscar y agregar 1 do versión cada vez que nos empuje?

+1

Vea también http://stackoverflow.com/questions/1127177/to-put-the-prefix-revision-number-to-codes-by-git-svn – VonC

Respuesta

13

Lo que está pidiendo es esencialmente la expansión de palabras clave. Para empezar, eche un vistazo a la pregunta sobre preguntas frecuentes de Git "Does git have keyword expansion?". Dice:

No se recomienda la expansión de palabras clave. La expansión de palabras clave causa todo tipo de problemas extraños y, de todos modos, no es realmente útil, especialmente en el contexto de un SCM. Puede realizar la expansión de palabras clave fuera de git usando un script personalizado. El script de exportación del kernel de Linux hace esto para establecer la variable EXTRA_VERSION en el archivo Makefile.

Consulte gitattributes(5) si realmente desea hacer esto. Si su traducción no es reversible (por ejemplo, expansión de palabra clave SCCS), esto puede ser problemático. (Sugerencia: el $Id$-expansion suministrado pone el nombre del objeto blob hexadecimal de 40 caracteres en el ID; puede averiguar qué confirmaciones incluyen este blob usando un script como this.)

Consulte here for a discussion y here on how GIT may help anyway.

Así Git tiene algo así como la expansión de palabras clave, aunque no es recomendable. Git tampoco tiene el concepto de una "revisión de archivo" (que es lo que parece ser su número @version), por lo que no podría darle exactamente lo que está pidiendo.

¿Podría crear alternativamente un gancho (probablemente un gancho de pre-recepción?), Que incrementaría la versión por usted. Esto es solo un ejecutable (por lo que puede ser un script shell/Python/Perl/Ruby/lo que sea que te sientas cómodo) que se ejecutará automáticamente cuando realices un push. Vea el githooks man page.

Su script gancho haría:

  • identificar los archivos que están a punto de ser modificado.
  • De ellos, encuentre los que contienen el patrón @version \d+
  • Incremente la versión. ¡Desea incrementar el valor en la confirmación primaria, no el valor que está actualmente en el archivo!

Tenga en cuenta que esto es al menos tan malo como el uso de la expansión de palabras clave que el FAQ Git recomienda en contra, y posiblemente mucho peor. Es probable que esto genere conflictos de fusión molestos. También podría terminar fácilmente con números de versión engañosos en su código, especialmente si alguna vez tiene que enviar una corrección de errores a una versión anterior, aunque probablemente también sucederá cada vez que combine cambios de múltiples repos/ramas (que es bastante común con la mayoría git workflows) si no tiene cuidado.

+0

¿así que mejor no? , quiero decir hacerlo manualmente? –

+2

Bueno, eso depende de usted para decidir, pero personalmente, creo que @author y @version están mejor fuera del código por completo.En lugar de almacenar cosas que tu SCCS conoce en el código, pregúntale a tu SCCS. –

Cuestiones relacionadas