svn - tortoise - Historial de cambios en una línea de código particular en Subversion
tortoise svn server (10)
¿Es posible ver el historial de cambios en una línea de código particular en un repositorio de Subversion?
Me gustaría, por ejemplo, poder ver cuándo se agregó una declaración particular o cuándo se cambió esa declaración, incluso si el número de línea ya no es el mismo.
El comando que estás buscando es svn blame
.
En Eclipse , puede saber cuándo se ha comprometido cada línea de su código utilizando la vista de anotación SVN, o hacer clic con el botón derecho en el archivo → Equipo → Mostrar anotación ....
En el cliente de TortoiseSVN hay una característica muy agradable que te 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 particular en la vista de arriba (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 utilizar esta función de manera iterativa, puede rastrear el historial de una línea en particular.
Esto se puede hacer en dos etapas:
-
svn blame /path/to/your/file > blame.tmp
-
grep "your_line_of_text" blame.tmp
Puede eliminar el archivo blame.tmp luego si no lo necesita.
En principio, un script simple se puede escribir en cualquier lenguaje de scripting que haga más o menos lo mismo.
La clave aquí es la cantidad de historia que se requiere. Como otros han señalado, la respuesta corta es: svn blame
(ver svn help blame
para más detalles). Si está llegando a la historia o lidiando con cambios significativos, es probable que necesite algo más que este solo comando.
Simplemente tuve que hacer esto yo mismo, y encontré este hilo (viejo) aquí en SO. Esto es lo que hice para resolverlo solo con la CLI
, específicamente para mi caso en que una API había cambiado (por ejemplo, mientras transfería el trabajo obsoleto de alguien (¡no en una sucursal, arrgh! ) A una rama de características basada en un -dirigir tronco). Por ejemplo, los nombres de las funciones habían cambiado lo suficiente como para que no fuera evidente a qué función se debía llamar.
Paso uno
El siguiente comando me permitió pasar de página a commits donde las cosas habían cambiado en el archivo "fileName.h" y ver el número de revisión correspondiente (nota: puede que tengas que alterar el ''10'' para más o menos contexto según tu svn log text )
svn log | grep -C 10 "fileName.h" | less
Esto da como resultado una lista de revisiones en las que se modificó este archivo.
Segundo paso
Entonces fue una simple cuestión de usar la blame
(o, como otros han señalado, annotate
) para limitar a las revisiones de interés.
cd trunk
svn blame fileName.h@r35948 | less
Por ejemplo, encontró que la revisión de interés era 35948.
Paso tres
Habiendo encontrado la (s) revisión (es) de interés a través de la culpa, se puede producir una diferencia para aprovechar la herramienta SVN.
svn diff -r35948:PREV fileName.h
Conclusión
Tener una diferencia visual hace que sea mucho más fácil identificar los nombres de la API anterior con los nombres de la API más nuevos / actualizados.
No conozco un método para rastrear declaraciones a través del tiempo en Subversion.
Sin embargo, es simple ver cuándo se modificó 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
Muestre la información de autor y revisión en línea para los archivos o URL especificados. Cada línea de texto se anota al principio con el autor (nombre de usuario) y el número de revisión para el último cambio a esa línea.
Un comienzo es el comando svn culpa (o anotar, elogiar). Le mostrará cuándo se modificó por última vez una línea de código y quién la modificó. p.ej:
4564 wiemann # $Id$
4564 wiemann # Author: David Goodger <[email protected]>
778 goodger # Copyright: This module has been placed in the public domain.
217 goodger
Yo solía:
- Ejecute
svn blame FILE
primero. - Tenga en cuenta la última revisión de la línea particular.
Haz otra consulta con el argumento
-r
:svn blame FILE -r 1:REV
- Rastrear manualmente desde allí.
svn culpa le muestra qué checkin modificó cualquier línea en un archivo la última vez.
Esto también funciona en revisiones antiguas.
svn annotate
La culpa AKA SVN de TortoiseSVN .