2010-09-13 11 views
7

Necesito buscar en todas las revisiones de un repositorio de Subversion para encontrar nombres de archivos y números de revisión que contienen una cadena en particular. Sé que esto encontrará ocurrencias en un volcado:¿Cómo encuentro/busca/grep un historial de repositorio SVN?

svnadmin dump $REPO_PATH | grep -i "Verdana" 

pero la salida es demasiado críptica. El resultado incluirá fragmentos de archivos binarios que coinciden.

He estado usando comandos como este para buscar cadenas en la copia de trabajo actual de un proyecto:

find . -name "*.css" -print0 | xargs -0 grep "Verdana" 

El formato de la salida es útil, se dan tanto el nombre de archivo y la línea en la que la cadena ocurrido:

./css/forms.css: font  : 12px Verdana; 

¿hay alguna manera de buscar todas las revisiones de un repositorio SVN por ejemplo, todos los .css archivos que contienen una cadena de búsqueda? ¿Y no solo una palabra sino una cadena con comodines o una expresión regular como grep?

Nota: Tengo acceso de raíz al servidor Linux con el repositorio en él.

También tenga en cuenta: No deseo buscar una copia de trabajo, necesito buscar todas las revisiones.

+0

Posible duplicado de [Excluir directorios .svn de grep] (http://stackoverflow.com/questions/1491514/exclude-svn-directories-from-grep) –

+0

Esto definitivamente no es un duplicado de cómo excluir .svn directorios de grep ... – quickshiftin

Respuesta

0

Ha intentado

svn log --verbose 

en su directorio raíz, la impresión de cada mensaje de registro y todas las rutas afectadas. No le permitirá analizar el contenido del archivo, pero al menos podrá buscar los archivos .css.

+0

Sí, parece haber muchas soluciones para buscar nombres de archivos. El contenido es más complicado. – Liam

+0

Puede usar 'diff' para generar salida de texto sin formato entre esa última versión y cualquier revisión anterior. Tal vez incluso puedas limitar el 'diff' a ciertos archivos, según los resultados de 'svn log'. – zellus

+0

http://stackoverflow.com/questions/1118051/how-do-i-search-all-revisions-of-a-file-in-a-subversion-repository es casi un duplicado de esta pregunta, pero busca todas las revisiones por solo un archivo http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=627008 parece ser un enfoque interesante, pero no de fábrica. – zellus

5

La manera más fácil (y la más efectiva que he encontrado) de hacer esto, y toma un poco de inversión de tiempo en adelante: clone el repositorio svn en git, luego use gitk para buscar en el repositorio.

Dado que todo el repositorio está en su sistema local, hace que la búsqueda infinitamente sea más rápida.

Solía ​​gestionar un gran repositorio de subversión para aproximadamente 30 desarrolladores, que a menudo venían a mi escritorio y me preguntaban: "¿Puedes encontrar este cambio?", Etc. ¡Simplemente me gustaría iniciar gitk!

svn log es tremendamente lento ya que tiene que golpear el servidor. Además, si tiene acceso al servidor, es probable que tenga que idear algunos | grep -v o similar para descartar todos los directorios .svn.

0

Piense a lo largo de las líneas:

svn log $location -q | grep -P 'r\d+' -o | grep -P '\d+' -o | xargs -l1 svn diff -c | grep $pattern 

Creo que mediante el ajuste de las banderas que está dando a grep o escribir una tubería más complicado (posiblemente por medio de tuberías a un bucle en lugar de utilizar xargs) puede grep SVN historia para cualquier cosa.

Cuestiones relacionadas