2008-09-10 7 views

Respuesta

44

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

Es simple, sin embargo, para ver cuándo se modificó por última vez cualquier línea en particular en un archivo usando svn blame. Compruebe el SVNBook: svn blame reference:

Sinopsis

svn blame TARGET[@REV]... 

Descripción

sobre el autor y la revisión de información en línea sobre los ficheros o URLs 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.

+0

Ha solucionado el problema del OP, pero aún me pregunto si hay alguna manera de rastrear el historial de una línea en particular, cuando hay demasiadas líneas y demasiadas revisiones para examinar manualmente. – JohnK

+1

Muchas herramientas gui, p. tortoiseSVN (en Windows) hace un buen trabajo al aprovechar esta funcionalidad para que puedas recorrer la historia. Por lo general, resalta las líneas adyacentes que cambiaron juntas y facilita el paso hacia esa diferencia, luego toma el número de línea relevante de la revisión anterior y repite. Me he remontado feliz y rápidamente a grandes repositorios (> 10 años de edad) que han incluido migraciones de CVS e incluso cortar y pegar la clonación de repositorios como parte de la historia. Para una mayor automatización, tal vez podría importar el repositorio en git y usar su capacidad de culpa basada en contenido más avanzada. – morechilli

0

svn culpa muestra qué marca de verificación modificó cualquier línea en un archivo la última vez.

Esto funciona en las revisiones antiguas también.

-1

El comando que está buscando es svn blame.

0

Un inicio es el comando svn culpa (o anotar, alabanza). Le mostrará cuándo se modificó por última vez una línea de código y quién la modificó. 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 
1
svn annotate 

El También conocido como SVN culpa de TortoiseSVN.

37

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

  • culpa de un archivo, mostrando el último cambio para cada línea (esto es normal)
  • "culpar revisión anterior", después de haciendo 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.

+0

¿Qué pasa si la culpa no muestra la línea? Tengo el caso de que busco el cambio de una línea en particular. Tortuga usada-> culpa. Deje la revisión en la última revisión. En el archivo puedo ver una línea en particular, en la culpa no puedo encontrarlo. – Offler

12

que había por lo general:

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

    svn blame FILE -r 1:REV 
    
  4. traza manualmente desde allí.
0

Esto se puede realizar en dos etapas:

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

Usted puede eliminar el archivo blame.tmp después 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.

2

En Eclipse se puede saber cuando cada línea de código se ha comprometido con el SVN anotar vista, o haga clic derecho en el archivo → Equipo Mostrar anotación ....

2

La clave aquí es cuánto historial se requiere. Como han señalado otros, 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.

Yo solo tenía que hacer esto yo mismo, y encontré este hilo (viejo) aquí en SO. Esto es lo que hice para resolverlo solo con el 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 up -todo el enlace). P.ej. los nombres de las funciones habían cambiado lo suficiente como para que no fuera aparente qué función necesitaba ser llamada.

Paso uno

El siguiente comando me permitió a la página a través de las confirmaciones cuando las cosas habían cambiado en el archivo "fileName.h" y ver el número de revisión correspondiente (nota: puede que tenga que alterar el '10' para más o menos contexto según el texto del registro svn).

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

Esto se traduce en una lista de revisiones en las cuales se modificó este archivo.

Paso dos

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

cd trunk 
svn blame [email protected] | less 

E.g. encontraron la revisión de interés fue 35948.

Paso tres

Después de haber encontrado la revisión (s) de interés a través de culpa, un diff puede ser producido para aprovechar la herramienta SVN.

svn diff -r35948:PREV fileName.h 

Conclusión

Tener una visual de diferencias hecho que sea mucho más fácil identificar los nombres antiguos de la API con los nombres de las API más nuevos/actualizados.

+0

Para mi escenario específico, si tiene suerte y trabaja con código que tiene buenos mensajes de confirmación en el registro, puede incluso 'grep' para el antiguo nombre de API/función y encontrar un comentario que diga algo así como" * cambiado func_FindParm a func_GetParm * ". – tniles09

Cuestiones relacionadas