Pregunta

Quiero que mi aplicación PHP esté etiquetada con el número de revisión que usa, pero no quiero usar Control de crucero o actualice un archivo y cárguelo cada vez.¿Cómo debería hacerlo?

¿Fue útil?

Solución

Las palabras clave SVN no son una buena solución.Como otros señalaron, agregar $Revision$ en un archivo solo afecta el archivo específico, que puede no cambiar durante mucho tiempo.

No tiene sentido recordar "editar" un archivo (agregando o eliminando una línea en blanco) antes de cada confirmación.También puedes escribir la revisión a mano.

Una buena forma de hacerlo (que yo sepa) es tener un proceso de implementación automatizado (lo cual siempre es bueno) y usar el comando svnversion.Esto es lo que hago:

Siempre que necesito la revisión, incluyo: <?php include 'version.php'; ?>.Este archivo "version.php" sólo tiene el número de revisión.Además, no forma parte del repositorio (se ignorará).Así es como lo creo:

1) En proyectos donde SVN está instalado en el servidor, también lo uso para la implementación.Al obtener la última versión en el servidor, tengo un script que, entre otras cosas, hace lo siguiente (se ejecuta en el servidor):

cd /var/www/project
svn update
rm version.php
svnversion > version.php

2) En proyectos donde SVN no está instalado, mi script de implementación es más complejo:crea el archivo version.php localmente, comprime el código, lo carga y lo extrae

Otros consejos

Suponiendo que su raíz web es una copia desprotegida del árbol de subversión, puede analizar el archivo /.svn/entries y obtener el número de revisión (cuarta línea aquí)...

En PHP:

$svn = File('.svn/entries');
$svnrev = $svn[3];
unset($svn);

Así es como lo hice funcionar.Si su servidor está configurado para permitir shell_exec Y tienes SVN instalado, simplemente ejecuta:

$revision = `svnversion`;

o

$revision = shell_exec('svnversion');

De esta respuesta:

Puede hacerlo agregando lo siguiente en cualquier lugar de su código

$Id:$ 

Entonces, por ejemplo, Jeff hizo:

<div id="svnrevision">svn revision: $Id:$</div>

y cuando se verifica en el servidor reemplazó $ ID: $ con el número de revisión actual.También encontré esta referencia.

También hay $ Fecha: $, $ Rev: $, $ Revisión: $

Un poco tarde ahora, pero use un gancho posterior a la confirmación de Subversion.En la carpeta de ganchos de su repositorio, cree un script de shell como este:

#!/bin/bash

REPOS="$1"
REV="$2"

cd /web/root
rm -f /web/root/templates/base.html
/usr/bin/svn update
/bin/sed -i s/REVISION/$REV/ /web/root/templates/base.html

Este ejemplo particular supone que su sitio activo está en /web/root y el código de desarrollo se encuentra en otro lugar.Cuando confirma un cambio de desarrollo, el script elimina la plantilla activa anterior (para evitar mensajes de conflicto), ejecuta la actualización y reemplaza las apariciones de REVISIÓN en la plantilla con el número de revisión real.

Más sobre ganchos aquí

En la mayoría de los casos, el código en el servidor en realidad contendría una "Exportación" del código, no un pago, y por lo tanto no contendría las carpetas .svn.Al menos esa es la configuración que veo con más frecuencia.¿Otros realmente verifican su código en el servidor web?

Puedes acercarte a Palabras clave SVN.Agregue $Revisión$ donde desee que se muestre la revisión, pero eso solo mostrará la última revisión en la que se modificó ese archivo en particular, por lo que tendrá que realizar un cambio en el archivo cada vez.No es posible obtener el número de revisión global sin algún tipo de script externo o un enlace posterior a la confirmación.

También puedes hacerlo así:

$status = @shell_exec('svnversion '.realpath(__FILE__));
if ( preg_match('/\d+/', $status, $match) ) {
    echo 'Revision: '.$match[0];
}

La forma más sencilla es utilizar la "Sustitución de palabras clave" de Subversion.hay una guia aquí en el libro SVN (Control de versiones con Subversion).

Básicamente, solo tendrás que agregar el texto $Rev$ en algún lugar de tu archivo.Luego habilite la palabra clave en su repositorio.Al finalizar la compra, SVN sustituirá el número de revisión en el archivo.

Vea mi respuesta a una pregunta similar. "Marcar" exportación svn con revisión.

Si captura el número de revisión cuando exporta, puede usar:

svn export /path/to/repository | grep ^Exported > revision.txt

Para eliminar todo excepto el número de revisión, puedes canalizarlo a través de este comando sed:

svn export /path/to/repository | grep ^Exported | sed 's/^[^0-9]\+\([0-9]\+\).*/\1/' > revision.txt
$svn_rev=file_get_contents('/path.to.repository/db/current');

Otra posibilidad para hacer esto es ejecutar un cron que ejecute los pasos descritos en el "Proceso de implementación" (suponiendo que sea un servidor *nix/FreeBSD).

Si el rendimiento es un problema, entonces podrías hacer:

exec('svn info /path/to/repository', $output);
$svn_ver = (int) trim(substr($output[4], strpos($output[4], ':')));

Por supuesto, esto depende de que haya realizado un pago y de la presencia del comando svn.

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