utilizar trabajando tortoise subversion sirve que para funciona con como abrir svn full-text-search

trabajando - tortoise svn server



Búsqueda de historial de subversión(texto completo) (16)

Aunque no es gratis, puedes echar un vistazo a Fisheye de Atlassian, las mismas personas que te traen JIRA. Hace búsqueda de texto completo contra SVN con muchas otras funciones útiles.

http://www.atlassian.com/software/fisheye/

¿Hay alguna manera de realizar una búsqueda de texto completo en un repositorio de subversión, incluido todo el historial?

Por ejemplo, escribí una característica que utilicé en alguna parte, pero luego no fue necesaria, así que pude encontrar los archivos, pero ahora necesito encontrarla de nuevo para usarla para otra cosa. El registro svn probablemente dice algo así como "eliminó material no utilizado", y hay muchos checkins como ese.

Editar 2016-04-15: tenga en cuenta que lo que se solicita aquí con el término "búsqueda de texto completo" es buscar los diffs reales del historial de confirmaciones y no los nombres de archivos y / o mensajes de confirmación . Estoy señalando esto porque la frase anterior del autor no refleja muy bien, ya que en su ejemplo, podría estar buscando solo un nombre de archivo y / o mensaje de confirmación. De ahí muchas de las respuestas y comentarios del svn log .


En caso de que intente determinar qué revisión es responsable de una línea de código específica, probablemente esté buscando:

svn blame

Crédito: respuesta original


Encontré este script bash , pero no lo he intentado.


Escribí esto como un script de cygwin bash para resolver este problema.

Sin embargo, requiere que el término de búsqueda se encuentre actualmente dentro del archivo del sistema de archivos. Para todos los archivos que coinciden con grep del sistema de archivos, se realiza una grep de todas las diferencias svn para ese archivo. No es perfecto, pero debería ser lo suficientemente bueno para la mayoría del uso. Espero que esto ayude.

/ usr / local / bin / svngrep

#!/bin/bash # Usage: svngrep $regex @grep_args regex="$@" pattern=`echo $regex | perl -p -e ''s/--?/S+//g; s/^//s+//;''` # strip --args if [[ ! $regex ]]; then echo "Usage: svngrep /$regex @grep_args" else for file in `grep -irl --no-messages --exclude=/*.tmp --exclude=/.svn $regex ./`; do revs="`svnrevisions $file`"; for rev in $revs; do diff=`svn diff $file -r$[rev-1]:$rev / --diff-cmd /usr/bin/diff -x "-Ew -U5 --strip-trailing-cr" 2> /dev/null` context=`echo "$diff" / | grep -i --color=none -U5 "^/(+/|-/).*$pattern" / | grep -i --color=always -U5 $pattern / | grep -v ''^+++/|^---/|^===/|^Index: '' / ` if [[ $context ]]; then info=`echo "$diff" | grep ''^+++/|^---''` log=`svn log $file -r$rev` #author=`svn info -r$rev | awk ''/Last Changed Author:/ { print $4 }''`; echo "========================================================================" echo "========================================================================" echo "$log" echo "$info" echo "$context" echo fi; done; done; fi

/ usr / local / bin / svnrevisions

#!/bin/sh # Usage: svnrevisions $file # Output: list of fully numeric svn revisions (without the r), one per line file="$@" svn log "$file" 2> /dev/null | awk ''/^r[[:digit:]]+ /|/ { sub(/^r/,"",$1); print $1 }''



Estoy usando un pequeño shellscript, pero esto solo funciona para un solo archivo. Por supuesto, puede combinar esto con find para incluir más archivos.

#!/bin/bash for REV in `svn log $1 | grep ^r[0-9] | awk ''{print $1}''`; do svn cat $1 -r $REV | grep -q $2 if [ $? -eq 0 ]; then echo "$REV" fi done

Si realmente desea buscar todo, use el comando svnadmin dump y grep a través de eso.


He estado buscando algo similar. Lo mejor que se me ocurrió es OpenGrok . No he intentado implementarlo todavía, pero parece prometedor.


La mejor manera que he encontrado para hacer esto es con menos:

svn log --verbose | Menos

Una vez que aparece la salida menos, puede presionar / para buscar, como VIM.

Editar:

Según el autor, él quiere buscar más que solo los mensajes y los nombres de los archivos. En ese caso, se te pedirá que lo hagas con ghetto-hack junto con algo como:

svn diff -r0:HEAD | less

También puede sustituir grep u otra cosa para buscarlo. Si desea usar esto en un subdirectorio del repositorio, necesitará usar svn log para discernir la primera revisión en la que ese directorio existió, y usar esa revisión en lugar de 0 .


Me encontré con este problema y

svnadmin dump <repo location> |grep -i <search term>

hizo el trabajo por mí. Devolví la revisión de la primera aparición y cité la línea que estaba buscando.


No tengo ninguna experiencia con eso, pero SupoSE (código abierto, escrito en Java) es una herramienta diseñada para hacer exactamente esto.


Normalmente hago lo que dice Jack M (use svn log --verbose) pero canalizo a grep en lugar de menos.


Si está ejecutando Windows, eche un vistazo a SvnQuery . Mantiene un índice de texto completo de repositorios locales o remotos. Cada documento que alguna vez se haya comprometido con un repositorio se indexa. Puede hacer consultas tipo google desde una interfaz web simple.


svn log -l<commit limit> | grep -C<5 or more lines> <search message>


svn log in Apache Subversion 1.8 soporta una nueva opción --search . De modo que puede buscar los mensajes de registro del historial de repositorio de Subversion sin utilizar herramientas y scripts de terceros.

svn log --search busca en el autor, la fecha, el texto del mensaje de registro y la lista de rutas modificadas.

Ver SVNBook | svn log referencia de línea de comandos .


git svn clone <svn url>

git log -G<some regex>


svn log -v [repository] > somefile.log

para diff puede usar la opción --diff

svn log -v --diff [repository] > somefile.log

luego use vim o nano o lo que quiera usar, y haga una búsqueda de lo que está buscando. Lo encontrarás bastante rápido.

No es un guion elegante ni nada automatizado. Pero funciona.