2011-02-02 11 views
168

escribiendo svn log escupe una lista increíblemente larga e inútil en una línea de comando. No tengo idea de por qué es el predeterminado. Si quisiera leer (o incluso leer) 300 entradas en el terminal, no me importaría escribir svn log --full o algo similar.¿Cómo ves las entradas de registro de SVN recientes?

Quizás los chicos SVN están pensando que quería alimentar esa salida a otro programa. Sin embargo, si ese es el caso, tendría más sentido tener la llamada más detallada para el programa, no 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ó?

+7

Sí, realmente debería funcionar como, um, 'log' git. –

Respuesta

227

limit opción, por ejemplo:

svn log --limit 4 

svn log -l 4 

Sólo los últimos 4 entradas

10

Pipe la salida a través less u otro localizador:

svn log | less 
+1

Si tiene> 23k revisiones, igual esperará ~ 20 segundos para ver las primeras entradas (y cuando no use el registro detallado). Pero es bueno, muestra el más reciente en la parte superior. ¡Y mejor que la búsqueda de 100 a la vez de TortoiseSVN! Cuando quieras ir más atrás. –

121

además de lo Bert F said, muchos comandos, incluyendo log tiene la opción -r (o --revision). Los siguientes son algunos ejemplos prácticos que utilizan esta opción para mostrar los rangos de revisiones:

enumerar todo en orden ascendente:

svn log -r 1:HEAD 

enumerar todo en orden descendente:

svn log -r HEAD:1 

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

svn log -r 13:BASE 

para tener todo en las fechas señaladas:

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

Se pueden combinar todas las expresiones anteriores con la opción --limit, de manera que se puede tener un control muy preciso sobre lo que está impreso. Para obtener más información sobre estas expresiones se refieren a -rsvn help log o el mismo capítulo en el libro Version Control with Subversion

+8

Muchas gracias por esa explicación, @Daniel Dinnyes: a menudo tengo el problema opuesto al del OP: 'svn log .' puede devolverme solo la primera revisión (del mismo modo con' svn log --limit 4 .'); pero si llamo a 'svn log -r HEAD: 1 .', entonces finalmente consigo todas las entradas enumeradas ... Gracias de nuevo - ¡salud! – sdaau

+0

Esto es mejor, ya que 'svn log' solo muestra el historial de cambios de la ruta actual. – Ninja

37

me gusta usar -v de 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 
+1

La opción verbosa es extremadamente útil –

+0

Y si el equipo de desarrollo es realmente agradable, ponen la identificación del problema en el comentario de svn y puede encontrar fácilmente el problema relacionado con la confirmación. –

4

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

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

o lo que quieras como tu predeterminado

2

Pero svn log sigue en orden inverso, es decirlas entradas más recientes se muestran primero, se desplazan desde la parte superior de mi terminal y se van. 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:HEAD, pero eso lleva mucho tiempo en un repositorio con unas 10000 entradas. He llegado hasta este presente:

Display 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 
2

En caso de que alguien está mirando a esta vieja pregunta, una orden práctico 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ógica:

svn log -r BASE:HEAD -v

+7

o simplemente 'svn log -r BASE: HEAD -v' – Gary

3

Como ya se ha notado svn log comando se ejecutó sin ningún argumento muestra todos los mensajes de registro que se relacionan con la URL especificada como a la carpeta copia de trabajo donde se ejecuta el comando.

Siempre se puede refinar/limitar los resultados: svn log

  • svn log --limit NUM mostrará solamente la primera NUM de revisiones,
  • svn log --revision REV1(:REV2) mostrará el mensaje de registro de revisión o REV1 para REV1 - REV2 gama,
  • svn log --search mostrará las revisiones que coinciden con el patrón de búsqueda que especifique (el comando está disponible en Subversion 1.8 y el cliente más nuevo). Se puede buscar por autor
    • de revisión (es decir, committers nombre de usuario),
    • fecha en que se confirmó la revisión,
    • revisión comentario de texto (mensaje de registro),
    • lista de rutas modificados en la revisión.
2

Esta respuesta se dirige a otra pregunta acerca de las opciones de subcomandos de Subversion. Para cada subcomando disponible (es decir, agregar, registrar, estado ...), puede simplemente agregar la opción --help 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 salida svn log --help mando bajo 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 
Cuestiones relacionadas