2009-11-29 5 views
16

¿Cómo podría simular un número de revisión cada vez mayor para cada confirmación en la línea principal de git?Simulando un número de revisión global con git

Así que, después de comprometerme, me gustaría que un script se ejecute aumenta un número en algún lugar.

Esto me permitirá decirle a mis clientes fácilmente que la característica X se ha corregido en la revisión git XYZ.

Estoy buscando un guión de muestra práctico que sea lo suficientemente robusto como para manejar impulsos y fusiones hasta cierto punto.

Respuesta

27

git describe le da una descripción de versiones como la siguiente: v2.0-64-g835c907. La parte v2.0 es el nombre de la última etiqueta anotada que precede a la confirmación, 64 es el número de confirmaciones después de eso, y 835c907 es la identificación de confirmación abreviada. Básicamente está ahí para identificar cualquier revisión de una manera exacta y conveniente (aunque técnica).

Nota: Para que esto funcione, necesitará al menos una etiqueta anotada. Para crear uno para la versión v2.0 ejecutar - git tag -a v2.0, si no tiene etiquetas anotadas, este comando fallará, a menos que tenga un argumento alternativo como --tags o --always.

+1

Creo que voy a aceptar esto, es el camino correcto y será lo suficientemente robusto a largo plazo para manejar escenarios multi-dev ... Siempre puedo mostrarles a los clientes en el sitio web 2.0.64 y luego mantener el resto de la información en el sistema de archivos en alguna parte, así puedo rastrear el compromiso. –

6

Creo que está confundiendo números de revisión con números de versión.

Subversion usa números de revisión porque puede: es un repositorio centralizado. Por supuesto, Git tiene hashes SHA-1 no números de revisión porque no tiene un repositorio central (pero usted lo sabe).

Ese número de revisión (y el hash es técnicamente un número de 160 bits, simplemente no es secuencial) no debería preocupar realmente a sus clientes. Lo que deberían preocuparles es el número de versión. Ahí es cuando empaqueta su código fuente y dice "esta es la versión 2.3.4", complete con las notas de la versión para decir lo que ha cambiado.

Idealmente, dicha lista es generada por el software de seguimiento de problemas y su código fuente simplemente se etiqueta para decir qué revisión constituye ese número de versión.

+2

Excepto que Git no usa GUID de 128 bits. Git usa hashes SHA-1 de 160 bits de cada objeto almacenado. Un GUID es una bestia completamente diferente: http: //en.wikipedia.org/wiki/GUID – Juliano

+0

Oh, muchachos, gracias. Fijo. – cletus

9

Es posible simular un número de revisión en git, sin embargo, es importante saber que no es una combinación perfecta y no es la más fácil de rastrear. Personalmente, lo utilizo para hacer números de revisión más simples para una aplicación web porque soy el único desarrollador. Utilizo la siguiente función en mi .bashrc para obtener el número de revisión que luego uso para las notas de la versión (sin embargo, si todavía no lo es, recomiendo encarecidamente etiquetar la versión, entonces el número es solo para usuarios). Si las limitaciones son bien conocidas, da un número de revisión mucho más amigable para los humanos.

function rgit() { 
    git rev-list --abbrev-commit HEAD | wc -l | awk '{print $1}' 
} 
+0

Eso es verdaderamente increíble, tengo exactamente el mismo problema, desarrollador único en una aplicación web que se mueve muy rápido. Entiendo que esto puede ir en forma de pera si comienzo a volver a escribir el historial, pero acepto esa limitación. –

+1

La parte 'awk' es inútil ya que pasó la opción' -l' a ​​'wc'. –

1

I (siendo conscientes de git describe) han estado utilizando el siguiente script:

#!/bin/bash 

FULL_BRANCH=`git branch | grep '*'` 
BRANCH_NAME=${FULL_BRANCH:2} 
REV=`git rev-parse --short HEAD` 

$COMMIT_NAME = $BRANCH_NAME-$REV 

Esto le da un nombre que contiene el nombre de la rama actual, seguido del ID corta comprometerse. Por ejemplo: master-c03f862.

Basta con hacer lo que está buscando, pero quizás git describe es la forma correcta de hacerlo aquí.

Cuestiones relacionadas