Historial de cambios en una línea particular de código en Subversion


¿Es posible ver el historial de cambios a una línea de código en particular en un repositorio Subversion?

Me gustaría, por ejemplo, poder ver cuándo se agregó una instrucción en particular o cuándo se cambió esa instrucción, incluso si su número de línea ya no es el mismo.

 71
svn
Author: Peter Mortensen, 2008-09-10

10 answers

No conozco un método para rastrear sentencias a través del tiempo en Subversion.

Sin embargo, es simple ver cuándo se cambió por última vez una línea en particular en un archivo usando svn blame. Compruebe el SVNBook: svn blame referencia:

Sinopsis

svn blame TARGET[@REV]...

Descripción

Mostrar información de autor y revisión en línea para los archivos o URLs especificados. Cada línea de texto está anotada al principio con el autor (nombre de usuario) y el número de revisión para el último cambio en esa línea.

 49
Author: morechilli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-29 07:53:51

En el cliente TortoiseSVN hay una característica muy agradable que le permite:

  • culpar a un archivo, mostrando el último cambio para cada línea (esto es estándar)
  • "culpar a la revisión anterior", después de hacer clic en una línea en particular en la vista anterior (esta es la buena)

La segunda característica hace lo que dice: muestra la revisión anotada que precede a la última modificación de la línea. Al usar esta función iterativamente, puede rastrear el historial de una línea en particular.

 40
Author: Rafał Dowgird,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-28 22:48:57

Normalmente:

  1. Ejecuta svn blame FILE primero.
  2. Tenga en cuenta la última revisión de la línea en particular.
  3. Haga otra consulta con el argumento -r:

    svn blame FILE -r 1:REV
    
  4. Trace manualmente desde allí.
 13
Author: atedja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-28 22:52:33

La clave aquí es cuánta historia se requiere. Como otros han señalado, la respuesta corta es: svn blame (ver svn help blame para más detalles). Si estás retrocediendo mucho en la historia o lidiando con cambios significativos, es probable que necesites más que solo este comando.

Solo tuve que hacer esto yo mismo, y encontré este hilo (ye ole) aquí en SO. Esto es lo que hice para resolverlo solo con CLI, específicamente para mi caso en el que una API había cambiado (por ejemplo, mientras portaba el trabajo obsoleto de alguien (no en una rama, arrgh!) de vuelta a una rama de entidades basada en un tronco actualizado). Por ejemplo, los nombres de las funciones habían cambiado lo suficiente para que no fuera evidente qué función necesitaba ser llamada.

Paso Uno

El siguiente comando me permitió pasar a través de commits donde las cosas habían cambiado en el archivo "fileName.h " y para ver el número de revisión correspondiente (nota: es posible que tenga que alterar el '10' para más o menos contexto por su texto de registro svn).

svn log | grep -C 10 "fileName.h" | less

Esto da como resultado una lista de revisiones en las que se modificó este archivo.

Paso Dos

Entonces era una simple cuestión de usar blame (o como otros han señalado, annotate) reducir a las revisiones de interés.

cd trunk
svn blame fileName.h@r35948 | less

Por ejemplo, encontró que la revisión de interés fue 35948.

Paso Tres

Habiendo encontrado la(s) revisión (es) de interés a través de blame, se puede producir un diff para aprovechar la herramienta SVN.

svn diff -r35948:PREV fileName.h

Conclusión

Tener una diferencia visual hizo mucho más fácil identificar los nombres de API antiguos con los nombres de API más nuevos/actualizados.

 2
Author: tniles09,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-17 16:54:04

En Eclipse puede saber cuándo se ha confirmado cada línea de su código utilizando la vista SVN annotate, o haga clic con el botón derecho en el archivo → EquipoMostrar anotación....

 2
Author: NAIT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-28 22:57:08
svn annotate

El ALIAS SVN Culpa de TortoiseSVN.

 1
Author: Marcio Aguiar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-28 22:47:55

Esto se puede hacer en dos etapas:

  1. svn blame /path/to/your/file > blame.tmp
  2. grep "your_line_of_text" blame.tmp

Puede eliminar la culpa.archivo tmp después si no lo necesita.

En principio, un script simple puede ser escrito en cualquier lenguaje de scripting que haga aproximadamente lo mismo.

 1
Author: Serge Kutny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-28 22:56:13

Svn blame le muestra qué checkin modificó cualquier línea en un archivo la última vez.

Esto también funciona con revisiones antiguas.

 0
Author: Maximilian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-10 08:36:15

Un inicio es el comando svn blame (o annotate,praise). Le mostrará cuándo se modificó por última vez una línea de código y quién la modificó. por ejemplo:

  4564    wiemann # $Id$
  4564    wiemann # Author: David Goodger <[email protected]>
   778    goodger # Copyright: This module has been placed in the public domain.
   217    goodger 
 0
Author: Peter Hoffmann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-10 08:36:32

El comando que estás buscando es svn blame.

 -1
Author: Brad Wilson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-17 16:38:34