trabajo - svn trunk
Obteniendo el último número de revisión en SVN? (25)
svn info -r HEAD
Esto le dará el último número de revisión en el encabezado de su repositorio.
Hay algunas buenas entradas de blog sobre la integración de números de subversión en su script de compilación:
Usando PHP, Perl o Python (preferiblemente PHP), necesito una forma de consultar una base de datos SVN y averiguar el último número de revisión enviado a SVN. No necesito nada más que eso. No necesita ser intensivo (entonces lo hago cada 5 minutos como un trabajo cron, el rendimiento de SVN no debería verse afectado).
SVN está ubicado en mi Intranet, pero no en mi computadora específica.
Tengo SVN instalado, pero no hay enlaces instalados para PHP / Perl / Python. Estoy ejecutando Windows XP, pero preferiría una solución independiente de la plataforma que también funcione en Linux. Si tiene una solución solo para Linux (o solo para XP), también sería útil.
Actualización: Subversion 1.9 soportará un nuevo comando "svn más joven" que solo muestra el último número de revisión. La diferencia con "svnlook más joven" es que "svn más joven" también funciona de forma remota.
Alguien más me golpeó para publicar la respuesta sobre svnversion
, que es definitivamente la mejor solución si tienes una copia de trabajo (IIRC, no funciona con las URL). Añadiré esto: si estás en el servidor que aloja SVN, la mejor manera es usar el comando svnlook
. Este es el comando que usa al escribir un script de enlace para inspeccionar el repositorio (e incluso la transacción actual, en el caso de los enlaces de precompromiso). Puede escribir la svnlook help
para más detalles. Probablemente quiera usar el comando svnlook youngest
. Tenga en cuenta que requiere acceso directo al directorio repo, por lo que debe usarse en el servidor.
Creo que estás buscando
svn info -r HEAD
¿Puedes shell para ese comando?
Probablemente necesites proporcionar credenciales de inicio de sesión con el repositorio también.
Está buscando una llamada similar a la llamada de línea de comando
svn info URL
Parece que esto es posible usando la biblioteca pysvn, y hay una receta que debería ayudarlo a comenzar. No estoy seguro de si hay algo similar para PHP.
Si necesita recurrir a llamar al binario SVN usted mismo, asegúrese de usar el parámetro --xml
para obtener el resultado como XML. Eso debería ser más fácil de analizar que la salida de línea de comando.
Esto debería funcionar en Bash, desde un directorio de trabajo. Lo he usado en Windows con unixutils instalado:
svn info |grep Revision: |cut -c11-
Esto obtendrá solo el número de revisión de la última revisión modificada:
<?php
$REV="";
$repo = ""; #url or directory
$REV = svn info $repo --show-item last-changed-revision;
?>
Espero que esto ayude.
Just svn info
en BASH le dará todos los detalles
RESULT:
Path: .
URL:
Repository Root:
Repository UUID:
Revision: 54
Node Kind: directory
Schedule: normal
Last Changed Author:
Last Changed Rev: 54
Last Changed Date:
Obtendrás la REVISIÓN de esto
La manera más simple y limpia de hacerlo (en realidad svn 1.9, lanzado en 2015) es usar:
svn info --show-item revision [--no-newline] [SVNURL/SVNPATH]
El resultado es el número de la última revisión (joungest) para el SVNURL, o el número de la revisión actual de la copia de trabajo de SVNPATH. --no-newline
es opcional, indica a svn
no emita una nueva línea cosmética ( /n
) después del valor, si necesita una salida mínima (solo el número de revisión).
Ver: https://subversion.apache.org/docs/release-notes/1.9.html#svn-info-item
Las soluciones publicadas no manejan el caso cuando se están utilizando elementos externos.
Si tengo una URL o una copia de trabajo con el conjunto de propiedades svn:externals
, las opciones externas pueden cambiar y, por lo tanto, la última revisión del servidor de subversión cambiará. Pero la última revisión de la copia de trabajo o URL solo informará el número de revisión cuando el parámetro svn: externals propty haya cambiado o cualquier elemento inferior en la ruta de la URL, que es el comportamiento esperado.
Así que obtienes la propiedad svn:externals
e iteras sobre las URL y eliges la revisión de alturas o consultas a la URL base desde el servidor de subversión. La versión informada desde la URL base contendrá la última revisión de TODO en el servidor.
Por lo tanto, si está utilizando externalidades, es mejor usar svn info BASE_URL
donde BASE_URL
es la URL raíz para todas las rutas en el servidor de subversión.
Lo siguiente debería funcionar:
svnlook youngest <repo-path>
Devuelve un solo número de revisión.
Para obtener realmente el último número de revisión ("revisión de la cabeza") en su repositorio remoto , use esto:
svn info -r ''HEAD'' | grep Revision | egrep -o "[0-9]+"
Salidas por ejemplo:
35669
Parece que hay una entrada en las preguntas frecuentes oficiales para esto . El código fuente está en C pero se aplica el mismo principio, como se describe aquí en esta publicación de la lista de correo .
Puede usar el formato de salida de XML, por ejemplo:
svn info --xml | grep ''revision'' | head -1 | grep -Eo "[0-9]+" | xargs expr -1 +
Ejemplo: usando el número de revisión
working=`svn info --xml | grep ''revision'' | head -1 | grep -Eo "[0-9]+" | xargs expr -1 +`
svn diff -r $working:HEAD --summarize --xml
Puedes probar el siguiente comando:
svn info -r ''HEAD'' | grep Revision: | awk -F'' '' ''{print $2}''
Puedes usar cualquiera de los comandos:
1)
> svn info | awk ''/Revision:/ { print $2 }'' =>returns the latest version
2)
> svn log -l 1 | grep ''^r[0-9]/+'' | awk ''{print $1}''
svn log -l 1 => returns the latest version commit
grep ''^r[0-9]/+'' => greps the r4324 (revision) number
awk ''{print $1}'' => prints the match found
Si desea analizar una copia de trabajo local, la mejor herramienta es svnversion
, que viene con Subversion y produce resultados como 968:1000M
. La documentación dice:
El número de versión será un número único si la copia de trabajo es una revisión única, sin modificaciones, sin cambios y con una URL que coincida con el argumento TRAIL_URL. Si la copia de trabajo es inusual, el número de versión será más complejo:
4123:4168 mixed revision working copy 4168M modified working copy 4123S switched working copy 4123:4168MS mixed revision, modified, switched working copy
Si quieres realmente uno corto:
svn info ^/
La notación de intercalación es una abreviatura de "la URL del directorio raíz del repositorio".
Si tiene la mala suerte de necesitar hacer esto desde un archivo por lotes de Windows, aquí está el encantamiento que está buscando:
set REV=unknown
for /f "usebackq tokens=1,2 delims=: " %%A in (`svn info`) do if "%%A" == "Revision" set REV=%%B
echo Current SVN revision is %REV%
Esto ejecuta "svn info", iterando a través de cada línea de salida generada. Utiliza dos puntos como delimitador entre el primer token y el segundo en la línea. Cuando el primer token es "Revisión", establece la variable de entorno REV en el segundo token.
Una nota sobre cómo obtener el último número de revisión:
Digamos que he cd
-ed en un subdirectorio revisado ( MyProjectDir
). Entonces, si llamo a svnversion
:
$ svnversion .
323:340
... obtengo " 323:340
", lo que supongo significa: " tienes artículos aquí, que van desde la revisión 323 a 340 ".
Entonces, si llamo a svn info
:
$ svn info
Path: .
URL: svn+ssh://server.com/path/to/MyProject/MyProjectDir
Repository Root: svn+ssh://server.com/path/to/MyProject
Repository UUID: 0000ffff-ffff-...
Revision: 323
Node Kind: directory
Schedule: normal
Last Changed Author: USER
Last Changed Rev: 323
Last Changed Date: 2011-11-09 18:34:34 +0000 (Wed, 09 Nov 2011)
... obtengo " 323
" como revisión, que en realidad es la revisión más baja de las que informó svnversion
.
A continuación, podemos usar svn info
en modo recursivo para obtener más información del directorio local:
> svn info -R | grep ''Path/|Revision''
Path: .
Revision: 323
Path: file1.txt
Revision: 333
Path: file2.txt
Revision: 327
Path: file3.txt
Revision: 323
Path: subdirA
Revision: 328
Path: subdirA/file1.txt
Revision: 339
Path: subdirA/file1.txt
Revision: 340
Path: file1.txt
Revision: 323
...
... (elimine el grep
para ver más detalles).
Finalmente, ¿qué hacer cuando queremos verificar cuál es la última revisión del repositorio en línea (en este caso, @ server.com
)? Luego, svn info
nuevo la svn info
, pero con -r HEAD
(observe la diferencia entre la opción de capital -R
anterior, y la minúscula -r
ahora):
> svn info -r ''HEAD''
[email protected]''s password:
Path: MyProjectDir
URL: svn+ssh://server.com/path/to/MyProject/MyProjectDir
Repository Root: svn+ssh://server.com/path/to/MyProject
Repository UUID: 0000ffff-ffff-...
Revision: 340
Node Kind: directory
Last Changed Author: USER
Last Changed Rev: 340
Last Changed Date: 2011-11-11 01:53:50 +0000 (Fri, 11 Nov 2011)
Lo interesante es que svn info
todavía se refiere al subdirectorio actual ( MyProjectDir
), sin embargo, la ruta en línea se informa como MyProjectDir
(a diferencia de, para el caso local), y la revisión en línea informada es la más alta ( 340
, en comparación con al más bajo, 323
reportados localmente).
$ svn log | head -10
$ svn log | head -10
en cualquier directorio que tenga una carpeta .svn
svn info
o svnversion
no tomará en consideración los subdirectorios, para encontrar la última ''revisión'' de la base de código en vivo, la forma pirateada a continuación funcionó para mí; podría llevar un tiempo ejecutarla:
repo_root$ find ./ | xargs -l svn info | grep ''Revision: '' | sort
...
Revision: 86
Revision: 86
Revision: 89
Revision: 90
$
<?php
$url = ''your repository here'';
$output = `svn info $url`;
echo "<pre>$output</pre>";
?>
Puedes obtener el resultado en XML así:
$output = `svn info $url --xml`;
Si hay un error, la salida se dirigirá a stderr. Para capturar stderr en su salida, use así:
$output = `svn info $url 2>&1`;
nickh@SCLLNHENRY:~/Work/standingcloud/svn/main/trunk/dev/scripts$ svnversion
12354
O
nickh@SCLLNHENRY:~/Work/standingcloud/svn/main/trunk/dev/scripts$ svn info --xml | xmlstarlet sel -t --value-of "//entry/@revision"
12354
O
nickh@SCLLNHENRY:~/Work/standingcloud/svn/main/trunk/dev/scripts$ svn info --xml | xmlstarlet sel -t --value-of "//commit/@revision"
12335
Comenzando con Subversion 1.9 puede usar la opción --show-item para obtener un valor de uno de los campos de la salida del comando
svn info
. Este comando solo mostrará el número de revisión:svn info --show-item=revision <URL-to-repository>
Obtenga XMLed output of svn info usando la opción
--xml
y use PowerShell para obtener el número de revisión. Aquí hay un ejemplo simple:[xml]$svninfo = svn info <REPOSITORY-URL> --xml -r HEAD $latestrevnum = $svninfo.info.entry.revision $latestrevnum
Usando el Servidor VisualSVN 3.4 o posterior, puede obtener el número de revisiones en un repositorio ejecutando estos comandos:
$repo = Get-SvnRepository <REPOSITORY-NAME>
$repo.Revisions
Consulte la referencia de cmdlet PowerShell de
Get-SvnRepository
para obtener más información.