¿Cómo ves las entradas de registro SVN recientes?

194

Escribir escribe svn loguna lista increíblemente larga e inútil en una línea de comando. No tengo idea de por qué ese es el valor predeterminado. Si quisiera leer (o incluso pudiera leer) 300 entradas en el terminal, no me importaría escribir svn log --fullo algo similar.

Quizás los chicos de SVN están pensando que quería enviar esa salida a otro programa. Sin embargo, si ese es el caso, tendría más sentido tener una llamada más detallada para el programa, no para el usuario del terminal.

De todos modos, ¿cómo veo solo alguna actividad reciente como las últimas 5 o 10 entradas para ver qué cambió?

Xeoncross
fuente
9
Sí, realmente debería funcionar como, um, git log.
Paul Draper

Respuestas:

261

limit opción, por ejemplo:

svn log --limit 4

svn log -l 4

Solo las últimas 4 entradas

Bert F
fuente
127

Además de lo que dijo Bert F , muchos comandos, incluso logtienen la opción -r(o --revision). Los siguientes son algunos ejemplos prácticos que usan esta opción para mostrar rangos de revisiones:

Para enumerar todo en orden ascendente:

svn log -r 1:HEAD

Para enumerar todo en orden descendente:

svn log -r HEAD:1

Para enumerar todo, desde el decimotercer hasta la base de la revisión actualmente desprotegida en orden ascendente:

svn log -r 13:BASE

Para obtener todo entre las fechas indicadas:

svn log -r {2011-02-02}:{2011-02-03}

Puede combinar todas las expresiones anteriores con la --limitopción, de modo que pueda tener un control bastante granular sobre lo que se imprime. Para obtener más información sobre estas -rexpresiones, consulte svn help logel capítulo correspondiente en el libro Control de versiones con Subversion

Daniel Dinnyes
fuente
8
Muchas gracias por esa explicación, @Daniel Dinnyes: a menudo tengo el problema opuesto del OP: svn log .puede que solo me devuelva la primera revisión (del mismo modo svn log --limit 4 .); pero si llamo svn log -r HEAD:1 ., finalmente obtengo todas las entradas enumeradas ... Gracias de nuevo, ¡salud!
sdaau
Esto es mejor, ya que svn log solo muestra el historial de cambios de la ruta actual.
Ninja
41

Me gusta usar -vpara el modo detallado.
Le dará la identificación de confirmación, los comentarios y todos los archivos afectados.

svn log -v --limit 4

Ejemplo de salida:

I added some migrations and deleted a test xml file
------------------------------------------------------------------------
r58687 | mr_x | 2012-04-02 15:31:31 +0200 (Mon, 02 Apr 2012) | 1 line Changed
paths: 
A /trunk/java/App/src/database/support    
A /trunk/java/App/src/database/support/MIGRATE    
A /trunk/java/App/src/database/support/MIGRATE/remove_device.sql
D /trunk/java/App/src/code/test.xml
Jonas Söderström
fuente
2
La opción detallada es extremadamente útil
Jason George el
Y si el equipo de desarrollo es realmente amable, ponen la identificación del problema en el comentario de svn y puedes encontrar fácilmente el problema conectado al commit.
Jonas Söderström
11

Canalice la salida a través de lessotro localizador:

svn log | less
Greg Hewgill
fuente
1
Si tiene más de 23.000 revisiones, seguirá esperando ~ 20 segundos para ver las primeras entradas (y cuando no esté usando el registro detallado). Pero es agradable: muestra los más recientes en la parte superior. ¡Y mejor que la paginación 100 a la vez de TortoiseSVN! Cuando quieras ir más atrás.
Tomasz Gandor
6

En caso de que alguien esté mirando esta vieja pregunta, un comando útil para ver los cambios desde su última actualización:

svn log -r $(svn info | grep Revision | cut -f 2 -d ' '):HEAD -v

LE (gracias Gary por el comentario) lo
mismo, pero mucho más corto y más lógico:

svn log -r BASE:HEAD -v

Catalin
fuente
8
o simplementesvn log -r BASE:HEAD -v
Gary
5

Para agregar a lo que otros han dicho, también puede crear un alias en su archivo .bashrc o .bash_aliases:

alias svnlog='svn log -l 30 | less'

o lo que quieras como predeterminado

james-geldart
fuente
4

Como ya has notado, el svn logcomando ejecutado sin ningún argumento muestra todo mensajes de registro relacionados con la URL que especifique o con la carpeta de copia de trabajo donde ejecuta el comando.

Siempre puede refinar / limitar los svn logresultados:

  • svn log --limit NUM mostrará solo el primer NUM de revisiones,
  • svn log --revision REV1(:REV2) mostrará el mensaje de registro para la revisión REV1 o para el rango REV1 - REV2,
  • svn log --searchmostrará revisiones que coincidan con el patrón de búsqueda que especifique (el comando está disponible en Subversion 1.8 y cliente más reciente). Puedes buscar por
    • autor de la revisión (es decir, el nombre de usuario de los usuarios)
    • fecha en que se confirmó la revisión,
    • texto de comentario de revisión (mensaje de registro),
    • lista de rutas cambiadas en la revisión.
bahrep
fuente
4

Esta respuesta está dirigida a otras preguntas sobre las opciones de los subcomandos de Subversion. Para cada subcomando disponible (es decir, agregar, registrar, estado ...), simplemente puede agregar la --helpopción para mostrar la lista completa de opciones disponibles que puede usar con su subcomando, así como ejemplos sobre cómo usarlas. El siguiente fragmento se toma directamente de la svn log --helpsalida del comando en la sección "ejemplos":

Show the latest 5 log messages for the current working copy
directory and display paths changed in each commit:
  svn log -l 5 -v
h3X3n
fuente
3

Pero svn log todavía está en orden inverso, es decir, las entradas más recientes salen primero, se desplazan desde la parte superior de mi terminal y desaparecen. Realmente quiero ver las últimas entradas, es decir, el orden de clasificación debe ser cronológico. El único comando que hace esto parece ser, svn log -r 1:HEADpero eso lleva demasiado tiempo en un repositorio con unas 10000 entradas. He venido esto:

Muestra las últimas 10 entradas de subversión en orden cronológico:

svn log -r $(svn log -l 10 | grep '^r[0-9]* ' | tail -1 | cut -f1 -d" "):HEAD
Othmar Wigger
fuente