una trabajo tortoise tag create copia comandos svn

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.

http://subversion.tigris.org/issues/show_bug.cgi?id=4299


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



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.