¿Cómo encontrar quién eliminó una línea de un archivo en un repositorio SVN?

11

Trabajo en un proyecto muy grande (más de 10000 versiones) y a veces sucede que necesito saber quién de los otros usuarios eliminó alguna línea en un archivo. ¿Hay alguna manera de hacer eso? Puedo hacer svn blamecon el número de revisión para verificar si existe una línea en esa revisión, luego ver en qué revisión la línea se ha ido y ver quién cometió esa revisión, pero ese procedimiento es poco convincente con ese gran proyecto.

¿Hay una manera más inteligente de hacer eso?

Ivan Petrushev
fuente

Respuestas:

5

Esto hace lo que necesita automáticamente, aunque no muy rápido porque no utiliza la búsqueda binaria como se sugirió anteriormente:

svn log FILE | egrep '^r[0-9]' | sed -e 's/ .*//' | while read rev; do echo $rev ; svn cat FILE -"$rev" | grep "case STRING" && break  ; done 
Peter Brülls
fuente
5

Verificaría el historial del archivo e intentaría encontrar rápidamente una revisión donde esté presente esa línea, y luego culpar entre HEAD y esa revisión.

Si el archivo ha pasado por 100 revisiones desde el inicio, entonces si busca binariamente a través de revisiones buscando esa línea, no debería tener que mirar más de 10 revisiones diferentes.

ta.speot.is
fuente
No veo la opinión, todo me parece un buen consejo: P
Phoshi
1
Esto es lo mismo que mi enfoque. Quiero algo más simple / rápido que mirar en 10 revisiones.
Ivan Petrushev
... son 10 revisiones. Para cuando publique la pregunta anterior, ya podría haber terminado. A menos que esto sea algo que tendrá que hacer nuevamente, en cuyo caso ignore mis comentarios.
ta.speot.is
2
Sí, es excelente para una sola toma, pero necesito algo que pueda usarse con frecuencia de forma regular.
Ivan Petrushev
2

svn log --diffidentificará eliminaciones con "-" en la columna cero. Grep para "r" también para que pueda ver la revisión.

% svn log --diff src/fozbo.cpp -r22222:HEAD | grep -e '^r' -e '^-.*xyzzy'
r22222 | jruser | 2016-07-19 20:16:07 -0400 (Tue, 19 Jul 2016) | 1 line
-   else if ( password== "xyzzy") {

También hay, svn log --searchpero eso solo buscará el mensaje de confirmación.

Robert Calhoun
fuente