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. Debe ser no intensivo (así que lo hago cada 5 minutos como un trabajo cron; el rendimiento de SVN no debería verse afectado).
SVN se encuentra en mi Intranet, pero no en mi computadora específica.
Tengo SVN instalado, pero no hay enlaces instalados para PHP / Perl / Python. Estoy usando 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), eso también sería útil.
$ svn info --show-item revision
svn: invalid option: --show-item
Usando Apache Subversion 1.8.16 (r1740329) compilado el 26 de abril de 2016. También probado con CollabNet 1.6.11 (r934486) compilado el 6 de marzo de 2014.svn help info
las opciones legales parasvn info
--show-item
está disponibleRespuestas:
Puede obtener la salida en XML así:
Si hay un error, la salida se dirigirá a stderr. Para capturar stderr en su salida use así:
fuente
svn info $url 2>&1
;svn info $url | grep 'Last Changed Rev' | awk '{ print $4; }'
svn info --show-item revision $url
osvn info --show-item last-changed-revision $url
.Si desea analizar una copia de trabajo local, la mejor herramienta es la
svnversion
que viene con Subversion y produce resultados como968:1000M
. La documentación dice:fuente
Esto le dará el último número de revisión en el encabezado de su repositorio.
Hay algunas publicaciones de blog interesantes sobre la integración de números de subversión en su script de compilación:
fuente
svn info -r HEAD
Esto debería funcionar en Bash, desde un directorio de trabajo. Lo he usado en Windows con unixutils instalado:
fuente
svn info | grep Revision | cut -d " " -f 2
, devolverá la segunda cadena después de dividirla con espacios.Lo siguiente debería funcionar:
Devuelve un solo número de revisión.
fuente
Para obtener realmente el número de revisión más reciente ("revisión principal") en su repositorio remoto , use esto:
Salidas por ejemplo:
fuente
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 llamosvnversion
:... obtengo "
323:340
", que supongo que significa: " tienes elementos aquí, que van desde la revisión 323 a la 340 ".Entonces, si llamo
svn info
:... obtengo "
323
" como revisión, que en realidad es la revisión más baja de las informadas porsvnversion
!Luego podemos usar
svn info
en modo recursivo para obtener más información del directorio local:... (elimine el
grep
para ver más detalles).Por último, ¿qué hacer cuando queremos comprobar cuál es la última revisión del repositorio online (en este caso, @
server.com
)? Luego emitimos nuevamentesvn info
, pero con-r HEAD
(observe la diferencia entre la-R
opción de capital anteriormente y-r
ahora en minúsculas ):Lo interesante es que,
svn info
todavía se refiere al subdirectorio actual (MyProjectDir
), sin embargo, la ruta en línea se informa comoMyProjectDir
(a diferencia de.
para el caso local) y la revisión en línea informada es la más alta (a340
diferencia de la más baja,323
informada en la zona).fuente
A partir de Subversion 1.9 puede usar la opción --show-item para obtener un valor de uno de los campos de
svn info
salida del comando. Este comando mostrará solo el número de revisión:Obtenga la salida XML de svn info usando la
--xml
opción y use PowerShell para obtener el número de revisión. He aquí un ejemplo sencillo:Con VisualSVN Server 3.4 o posterior, puede obtener la cantidad de revisiones en un repositorio ejecutando estos comandos:
$repo = Get-SvnRepository <REPOSITORY-NAME>
$repo.Revisions
Consulte la
Get-SvnRepository
referencia de cmdlet de PowerShell para obtener más información.fuente
Creo que estas buscando
¿Puedes acceder a ese comando?
Probablemente también necesitará proporcionar credenciales de inicio de sesión con el repositorio.
fuente
Alguien más me ganó para publicar la respuesta sobre
svnversion
, que definitivamente es la mejor solución si tiene una copia de trabajo (IIRC, no funciona con URL). Agregaré esto: si está en el servidor que aloja SVN, la mejor manera es usar elsvnlook
comando. Este es el comando que usa cuando escribe un script de gancho para inspeccionar el repositorio (e incluso la transacción actual, en el caso de los ganchos de confirmación previa). Puede escribirsvnlook help
para obtener detalles. Probablemente quieras usar elsvnlook youngest
comando. Tenga en cuenta que requiere acceso directo al directorio del repositorio, por lo que debe usarse en el servidor.fuente
O
O
fuente
Puede usar cualquiera de los comandos:
fuente
Si quieres uno realmente corto:
La notación de intercalación es una forma abreviada de "la URL del directorio raíz del repositorio".
fuente
Si tiene la desgracia de tener que hacer esto desde un archivo por lotes de Windows, aquí está el encantamiento que está buscando:
Esto ejecuta "svn info", iterando a través de cada línea de salida generada. Utiliza dos puntos como delimitador entre el primer y el segundo token de la línea. Cuando el primer token es "Revisión", establece la variable de entorno REV en el segundo token.
fuente
FOR /F "tokens=2" %%i IN ('svn info ^| FINDSTR Revision:') DO SET revision=%%i
Estás buscando una llamada similar a la llamada de línea de comandos
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
--xml
parámetro para obtener el resultado como XML. Eso debería ser más fácil de analizar que la salida de la línea de comandos.fuente
subprocess.check_output
en Python para evitar otra llamada a la biblioteca. Si solo está verificando los números de revisión / bajando las últimas copias, es más simple usar svn desde la línea de comandos a través desubprocess
. Ahora, si está haciendo registros automáticos y fusiones ...Puede utilizar el formato de salida XML, por ejemplo:
Ejemplo: usar el número de revisión
fuente
Puedes probar el siguiente comando:
fuente
Solo
svn info
en BASH te daremos todos los detallesObtendrá la REVISIÓN de este
fuente
La forma más simple y limpia de hacerlo (en realidad svn 1.9, lanzado en 2015) es usando:
La salida es el número de la última revisión (joungest) para SVNURL, o el número de la revisión actual de la copia de trabajo de SVNPATH. El
--no-newline
es opcional, indica quesvn
no se 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
fuente
svn info --show-item
, en lugar de--show item
Las soluciones publicadas no manejan el caso cuando se utilizan externos.
Si tengo una URL o una copia de trabajo con la
svn:externals
propiedad configurada, los externos pueden cambiar y, por lo tanto, cambiará la última revisión del servidor de subversión. Pero la última revisión de la copia de trabajo o URL solo informará el número de revisión cuando se modificó la propiedad svn: externals o cualquier elemento más bajo en la ruta de la URL, que es el comportamiento esperado.Entonces, o obtiene la
svn:externals
propiedad e itera sobre las URL y elige la revisión de alturas o consulta la URL base desde el servidor de subversión. La versión informada desde la URL base contendrá la última revisión para TODO en el servidor.Por lo tanto, si está utilizando externos, es mejor usar
svn info BASE_URL
dóndeBASE_URL
está la URL raíz para todas las rutas en el servidor de Subversion.fuente
Esto obtendrá solo el número de revisión de la última revisión modificada:
Espero que esto ayude.
fuente
$ svn log | head -10
en cualquier directorio que tenga una.svn
carpetafuente
svn info
osvnversion
no tomará en consideración los subdirectorios, para encontrar la última 'revisión' del código base en vivo, la forma pirateada a continuación funcionó para mí; puede llevar un tiempo ejecutarla:fuente
Esto se puede obtener usando la biblioteca "SVN" :
Head_revision debe contener el último número de revisión del archivo
fuente
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 .
fuente
Actualización: Subversion 1.9 admitirá un nuevo comando "svn más joven" que genera solo 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
fuente