¿Cómo puedo obtener el número de revisión de Subversion en PHP?




svn revision (9)

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?


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');

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: $


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


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.


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


$svn_rev=file_get_contents('/path.to.repository/db/current');






revision