¿Cómo puedo obtener el número de revisión de Subversion en PHP?
svn revision (13)
Así es como lo hice funcionar. Si su servidor está configurado para permitir shell_exec Y tiene SVN instalado simplemente ejecute:
$revision = `svnversion`;
o
$revision = shell_exec(''svnversion'');
Quiero etiquetar mi aplicación PHP con el número de revisión que usa, pero no quiero usar CruiseControl o actualizar un archivo y subirlo cada vez. ¿Cómo debería hacerlo?
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 registró, el servidor reemplazó $ Id: $ con el número de revisión actual. También encontré esta referencia .
También hay $ Fecha: $, $ Rev: $, $ Revisión: $
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 más a menudo. ¿Los demás realmente revisan su código en el servidor web?
La forma más fácil es usar Subversion "Keyword Substitution". Hay una guía here en el libro de SVN ( Control de versiones con Subversion ).
Básicamente, solo tendrá que agregar el texto $ Rev $ en algún lugar de su archivo. Luego habilite la palabra clave en su repositorio. En el checkout, SVN sustituirá el número de revisión en el archivo.
Las palabras clave de SVN no son una buena solución. Como otros señalaron que agregar $ Revision $ en un archivo solo afecta el archivo específico , que puede no cambiar durante mucho tiempo.
Recordar "editar" un archivo (agregando o eliminando una línea en blanco) antes de cada confirmación no tiene sentido. Podrías simplemente escribir la revisión a mano.
Una buena forma de hacerlo (que yo sepa) es tener un proceso de implementación automatizado (que siempre es bueno) y usar el comando svnversion. Esto es lo que hago:
Donde sea que necesite la revisión, hago un include: <?php include ''version.php''; ?>
<?php include ''version.php''; ?>
. Este archivo "version.php" solo tiene el número de revisión. Además, no es parte del repositorio (se debe ignorar). Así es como lo creo:
1) En proyectos donde SVN está instalado en el servidor, también lo uso para la implementación. Obtener la última versión del 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 sube y lo extrae
Otra posibilidad para hacer esto es ejecutar un cron que ejecute los pasos descritos en el "Proceso de implementación" (asumiendo que es un servidor * nix / FreeBSD).
Puede acercarse con Palabras clave de SVN . Agregue $ Revision $ donde desee que se muestre la revisión, pero eso solo mostrará la última revisión que se modificó en ese archivo en particular, por lo que tendría que hacer 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 post-commit.
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], '':'')));
Esto, por supuesto, depende de haber hecho un pago y la presencia del comando svn.
Suponiendo que su webroot es una copia extraída del árbol de subversión, podría analizar el archivo /.svn/entries y conectar el número de revisión (cuarta línea aquí) ...
En PHP:
$svn = File(''.svn/entries'');
$svnrev = $svn[3];
unset($svn);
También podrías hacerlo así:
$status = @shell_exec(''svnversion ''.realpath(__FILE__));
if ( preg_match(''//d+/'', $status, $match) ) {
echo ''Revision: ''.$match[0];
}
Un poco tarde ahora, pero usa un enlace de post-commit de Subversion. En la carpeta de enlaces de tu repositorio, crea 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 asume que su sitio en vivo está en / web / root y el código de desarrollo se encuentra en otro lugar. Cuando se realiza un cambio de desarrollador, el script elimina la plantilla previa en vivo (para evitar mensajes conflictivos), 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 los ganchos here
Vea mi respuesta a la pregunta similar "Marcar" svn export with revision .
Si captura el número de revisión cuando exporta, puede usar:
svn export /path/to/repository | grep ^Exported > revision.txt
Para quitar todo menos el número de revisión, puede 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'');