Pregunta

Tengo unas pocas aplicaciones Rails y lo uso Git como el sistema de control de versiones. Yo uso ya sea GitHub o Beanstalk como los anfitriones de repositorio.

Lo que estoy tratando de es bastante simple en teoría. De alguna manera muestran la última cometer número de identificación (almohadilla?) En el pie de página de la aplicación web. Así que cuando estoy mirando a la aplicación web que puedo comprobar que se ha cometido y desplegado correctamente.

Me puedo imaginar que hay dos métodos para hacer frente a esto. La primera sería una posible característica de Git que permite la salida de la ID confirmación. La segunda sería un gancho web post-commit (tanto Beanstalk y GitHub permiten esto).

¿Alguien ha encontrado una manera de hacer esto, o algo similar?

Gracias,

Danny

¿Fue útil?

Solución

En primer lugar, una aclaración: gancho post-commit no puede añadir cometer-id en el archivo una confirmación, porque cometer Identificación depende de confirmar sobre el árbol de la parte superior (en representación de directorio superior), de la identificación de la parte superior del árbol a su vez depende de los identificadores de sus miembros, y la identificación de un archivo depende de su contenido ... y este contenido es incluir cometer ID. No es posible.

Pero vamos a echar un vistazo a las diferentes soluciones:

vivo, del lado del servidor de secuencias de comandos

Si su aplicación web se despliega en vivo desde el repositorio git no desnudo (espero que sepas lo que estás haciendo WRT. Empujando en el repositorio no desnuda, es decir repositorio con la caja / árbol de trabajo), entonces su aplicación web puede comprobar CABEZA mediante el uso de git rev-parse HEAD (da SHA-1 de cometer), o mejor git describe --dirty (la opción --dirty haría que regresó de cadena contiene información sobre si tiene cambios uncomitted en la zona de trabajo), o git describe --always HEAD.

git rev-parse HEAD da algo así como 7611062b4ba6d1ebc4cf3e63c11204a4f5057660, mientras git describe --dirty da algo así como v1.7.3.2-95-g7611062 (que se comprometen con medios abreviado SHA-1 de 7611062, 95 se confirma después se comprometen con la etiqueta 'v1.7.3.2'), pero depende de los comunicados que tagging utilizando anotado las etiquetas.

Una variante de esto sería tener aplicación web para comprobar CABEZA del repositorio que está en otro lugar en el mismo sistema de archivos, por ejemplo, con git --git-dir=/path/to/.git describe HEAD.

Nota al margen: si utiliza Ruby, es probable que quieren usar arenilla biblioteca. El equivalente de la versión git rev-parse HEAD sería probablemente (no probado!):

require 'grit'
include Grit

repo = Repo.new("/var/git/app.git")
head = repo.commits('HEAD', 1)

app_version = head.id


archivos estáticos en vivo, servidos desde git checkout

Editar sección Los más 2010-10-23 13:33 0000
Si va a servir a sus archivos desde la caja (worktree) del repositorio git no desnudo (no su situación), puede utilizar 'mancha' y los comandos 'limpias' de filter gitattribute para realizar CVS-como expansión de palabras clave en la salida / check-in.

En el archivo .gitattributes que definiría archivos en qué atributo filter debe actuar:

*.rb filter=commitid

Se define filtro en el archivo de configuración git (por ejemplo, en .git/config), por ejemplo

[filter "commitid"]
        smudge = sed -e "s/\$Revision: ?\$/\$Revision: $(git rev-parse HEAD)\$/1"
        clean =  sed -e "s/\$Revision: ?[^$]*\$/\$Revision: \$/1"

El filtro smudge reemplazaría '$ Revision: $' con, por ejemplo '$ Revision: v1.7.3.2-95-g7611062' en la salida (esto significa que comprobaron outfiles contendría esta CVS, lo ampliada de palabras clave). El filtro clean eliminaría expansión al almacenar el contenido del archivo en la base de datos objeto GIT (en repositorio GIT); de lo contrario habría problemas con la comparación de archivos, etc.


desplegada con el uso de git archive

Si en lugar de implementar su aplicación web, por lo que no residen en el repositorio en vivo (que tiene sus peculiaridades WRT. Empujando en él, y que tiene posibles inconvenientes de seguridad), y se utiliza git archive algún lugar (por ejemplo, para aplicaciones de cremallera en subirlo a su sitio de alojamiento), se puede hacer uso de sustitución de palabras clave .

En primer lugar tiene que decirle a Git que desea palabras clave en un archivo reemplazado por git archive . Usted lo hace mediante el establecimiento de export-subst de archivo dado, por ejemplo, añadiendo al archivo .gitattributes

*.rb export-subst

y luego añadir a su archivo que contiene / genera pie de página por ejemplo

$Format:%H$

que será sustituido por cometer almohadilla (ver pretty-formatos de descripción por ejemplo, en git-log página del manual).


Desplegado, utilizando una secuencia de comandos de implementación

Si utiliza algún tipo de script / guión mecanismo para desplegar su aplicación web, usted debe seguir Jefromi consejos de tener su secuencia de comandos de despliegue insertar la información de versión.

Usted tendría que preguntar a alguien más cómo configurar Capistrano (suponiendo que lo utilice para el despliegue) al mensaje: despliegue reemplazar '@@ VERSION @@' marcador de posición en el archivo 'app.rb' con el resultado de git describe --always HEAD ... Git proyecto Makefile noreferrer usos sed para que

Otros consejos

Creo que lo que va a terminar con ganas de hacer es, como parte de su proceso de "acumulación" (despliegue, su caso?), Almacenar el resultado de git rev-parse HEAD o git describe HEAD (mejor, asumiendo liberación de marcas) en una expediente. Su aplicación se puede mostrar el contenido del archivo. El hash no puede comprometerse en realidad nunca ser parte de cualquier contenido de oruga (el hash del cometen depende del contenido rastreado). Por supuesto, si su aplicación se está quedando sin un acuerdo de recompra, puede simplemente ejecutar el comando desde la aplicación, pero es mucho más elegante que acaba de hacerlo una vez.

Este es el enfoque adoptado por git en sí, por cierto. Tiene un cáscara de pequeñísima script que básicamente vertederos de salida git describe a GIT-VERSION-FILE, que se compila entonces en para proporcionar la información de versión.

Con suerte no he entendido mal su situación - Estoy un poco confundido por que dice "una posible función de Git que permite la salida del ID comprometerse". Esta es una capacidad muy básica de git.

En primer lugar, la respuesta a su pregunta, ejecute el siguiente comando en el script Ruby:

`git log -n1 | head -1`.split.last

En segundo lugar: ¿Qué quiere decir que utilice habichuelas mágicas como su anfitrión repositorio? No se BEANSTALK un servidor de gestión de colas?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top