Quiero etiquetar mi aplicación PHP con el número de revisión que usa, pero no quiero usar CruiseControl ni actualizar un archivo y subirlo cada vez. ¿Cómo debería hacerlo?¿Cómo puedo obtener el número de revisión de Subversion en PHP?
Respuesta
palabras clave SVN no es una buena solución. Como otros señalaron que agregar $ Revision $ en un archivo solo afecta a el archivo específico, que puede no cambiar durante un tiempo prolongado.
Recordar "editar" un archivo (agregando o eliminando una línea en blanco) antes de cada confirmación es inútil. 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'; ?>
.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 utilizo para la implementación. Obtener la versión más reciente 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 compleja: crea el archivo version.php localmente, comprime el código, lo carga y lo extrae
Asumiendo que su Webroot es una copia desprotegida del árbol de la subversión, se podría analizar el archivo /.svn/entries y enganche el número de revisión (4ª línea aquí) ...
En PHP:
$svn = File('.svn/entries');
$svnrev = $svn[3];
unset($svn);
hace que su aplicación depende de elementos internos SVN. Disculpa, no, no –
@ Brent.Longborough No me gustaría votar si pudieras, pero no puedo, así que dejaré este comentario. –
En realidad esto parece más portátil que usar un binario svnversion posiblemente "no existe", especialmente considerando sistemas de Windows, cajas de desarrolladores, etc. –
de this answer:
usted puede hacerlo añadiendo lo siguiente cualquier parte del código
$Id:$
Así, por ejemplo, Jeff hizo:
<div id="svnrevision">svn revision: $Id:$</div>
y en caso de control en el servidor reemplazado $ Id: $ con el número revisión actual. También encontré this reference.
También hay $ Fecha: $, $ Rev: $, $ Revision: $
Ten cuidado con esto. Como se mencionó en daremon, la palabra clave SVN no se actualizará a menos que ese archivo haya cambiado. Tengo una base de código donde esta información se encuentra en una "Ventana Acerca de" que muy pocas veces se modifica. Con frecuencia me olvido de "editar" ese archivo para que se actualice la ID de Rev. –
En la mayoría de los casos el código en el servidor sería en realidad contienen una "exportación" del código, no de una copia y, por lo tanto, no contiene 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?
No, probablemente estés ahí. Ese es probablemente el mejor comportamiento para un servidor de producción también ... Es posible que no desee que la gente husmee en los directorios .svn. – Oli
Espero que no permita el acceso a los directorios .svn en la configuración de su servidor o al menos .htaccess. De lo contrario, se puede ver todo su código. –
La manera más fácil es utilizar Subversion "Keyword Substitution". Hay una guía here en el libro SVN (Version Control with Subversion).
Básicamente, solo tendrá que agregar el texto $ Rev $ en algún lugar de su archivo. Luego active la palabra clave en su repositorio. En el checkout, SVN sustituirá el número de revisión en el archivo.
Puede acercarse con SVN Keywords. 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.
Otra posibilidad para hacerlo es ejecutar un cron que ejecute los pasos descritos en el "Proceso de implementación" (asumiendo que es un * nix/FreeBSD servidor).
También puede hacerlo de esta manera:
$status = @shell_exec('svnversion '.realpath(__FILE__));
if (preg_match('/\d+/', $status, $match)) {
echo 'Revision: '.$match[0];
}
Véase mi respuesta a la pregunta similar "Mark" svn export with revision.
Si captura el número de revisión cuando se exporta se puede utilizar:
svn export /path/to/repository | grep ^Exported > revision.txt
a la tira de todo, pero el número de revisión, puede canalizarla a través de este comando sed:
svn export /path/to/repository | grep ^Exported | sed 's/^[^0-9]\+\([0-9]\+\).*/\1/' > revision.txt
Si el rendimiento es un problema, entonces usted podría hacer:
exec('svn info /path/to/repository', $output);
$svn_ver = (int) trim(substr($output[4], strpos($output[4], ':')));
Esto, por supuesto, depende de su h Después de hacer un pago y la presencia del comando svn.
Mida un poco tarde, pero utilice un enlace de post-commit de Subversion. En la carpeta ganchos de su repositorio, crear una secuencia de comandos shell como éste:
#!/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 su sitio en vivo se encuentra en/web/raíz y el código de desarrollo se lleva a cabo en otros lugares. 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 en ganchos here
Esta es la forma en que tengo que trabajar. Si el servidor está configurado para permitir que shell_exec y usted tiene SVN instalado basta con ejecutar:
$revision = `svnversion`;
o
$revision = shell_exec('svnversion');
¿No es el comando svnversion? – grantc
¡Uy! Debe haber sido otra noche tarde. ¡Gracias! Corregido :) –
¿Cómo no es esta la respuesta aceptada? Funciona perfectamente y mucho mejor que cualquier otro esquema que parece. Incluso puedes cronizar cosas en un archivo de texto. ¡Gracias! Fácil y perfecto y exactamente lo que pidió el OP – ladieu
$svn_rev=file_get_contents('/path.to.repository/db/current');
- 1. Número de revisión de Subversion en múltiples proyectos
- 2. ¿Cómo obtener programáticamente el número de revisión SVN?
- 3. ¿Cómo obtener el número de revisión de subversión usando maven?
- 4. Cómo incluir el número de revisión de Subversion en el proyecto Delphi
- 5. Al migrar de Subversion a Git, ¿cómo puedo encontrar un compromiso dado un número de revisión?
- 6. ¿Cómo obtener el último número de revisión de SharpSVN?
- 7. Comando de revisión de Subversion actual
- 8. ¿Cómo se configura el número de compilación basado en el número de revisiones Subversion con CruiseControl.net
- 9. VisualSVN ¿Cómo revertir el número de revisión?
- 10. ¿Cómo calcula CouchDB el número de revisión
- 11. Incluir número de revisión SVN en el código fuente
- 12. ¿Puedo saber el número de revisión de una confirmación?
- 13. Subversion - poner número de versión en un archivo
- 14. TFS- Gráfico de revisión como Subversion
- 15. Volver a la revisión en Subversion
- 16. php obtener el número de una cadena
- 17. Cómo obtener el número de revisión SVN en cierta fecha o rango de fechas
- 18. ¿Cómo inyectar el número de revisión de SVN en JAR?
- 19. ¿Cómo acceder al número de versión de Subversion actual?
- 20. Obtenga el número de revisión de un repositorio remoto
- 21. ¿Cómo puedo ver el número de revisión de cada archivo en una copia de trabajo SVN?
- 22. cómo puedo tener eclipse insertar automáticamente el número de revisión de subversión en mi código
- 23. svnkit: cómo obtener el número de revisión de copia de trabajo?
- 24. RNGCryptoServiceProvider - Revisión de número aleatorio
- 25. ¿Cómo obtener el número de año con PHP?
- 26. Subversion no se actualizará para revisión antigua
- 27. SVN: ¿cómo obtener la primera revisión de un archivo?
- 28. usando bash para obtener el número de revisión de la subversión
- 29. ¿Cómo puedo obtener el número de registros eliminados?
- 30. Cómo puedo obtener el nombre de contacto con su número
Lo bueno de su respuesta es que es independiente del idioma: 'svnversion' guarda el número de revisión en un archivo de texto y es la aplicación que necesita ese valor que accede más tarde a ese archivo. – AxeEffect