Pregunta

¿Existe alguna forma de realizar una búsqueda de texto completo de un repositorio de Subversion, incluido todo el historial?

Por ejemplo, escribí una función que usé en alguna parte, pero luego no era necesaria, así que svn rm'd los archivos, pero ahora necesito encontrarla nuevamente para usarla para otra cosa.El registro svn probablemente diga algo así como "se eliminaron elementos no utilizados", y hay muchos registros como ese.

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

¿Fue útil?

Solución

git svn clone <svn url>
git log -G<some regex>

Otros consejos

svn log en Apache Subversion 1.8 es compatible un nuevo --search opción.Por lo tanto, puede buscar mensajes de registro del historial del repositorio de Subversion sin utilizar herramientas ni scripts de terceros.

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

Ver SVNLibro | svn log referencia de línea de comando.

Si está ejecutando Windows, eche un vistazo a SvnQuery.Mantiene un índice de texto completo de repositorios locales o remotos.Todos los documentos enviados a un repositorio se indexan.Puede realizar consultas similares a las de Google desde una sencilla interfaz web.

Estoy usando un pequeño shellscript, pero esto solo funciona para un solo archivo.Por supuesto, puedes combinar esto con buscar 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 quieres buscar todo, utiliza el svnadmin dump Comando y revisa eso.

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

SVN log --verbose | menos

Una vez que sale menos, puedes presionar / para buscar, como VIM.

Editar:

Según el autor, quiere buscar algo más que mensajes y nombres de archivos.En cuyo caso se le pedirá que lo hackee en un gueto junto con algo como:

svn diff -r0:HEAD | less

También puedes sustituir grep o algo más para hacer la búsqueda por usted.Si desea utilizar esto en un subdirectorio del repositorio, deberá utilizar svn log para discernir la primera revisión en la que existió ese directorio, y usar esa revisión en lugar de 0.

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

svn log -v [repository] > somefile.log

para diferenciar puedes usar el --diff opción

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

luego use vim o nano o lo que quiera usar, y busque lo que está buscando.Lo encontrarás bastante rápido.

No es un script sofisticado ni nada automatizado.Pero funciona.

Si bien no es gratuito, puedes echarle un vistazo a Fisheye de Atlassian, la misma gente que te ofrece JIRA.Realiza búsquedas de texto completo contra SVN con muchas otras funciones útiles.

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

Estaba buscando lo mismo y encontré esto:

http://svn-search.sourceforge.net/

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.

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

Escribí esto como un script bash de cygwin 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 el grep del sistema de archivos, luego se realiza un grep de todas las diferencias svn para ese archivo.No es perfecto, pero debería ser lo suficientemente bueno para la mayoría de los usos.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 }'

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

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

svn blame

Crédito: respuesta original

me encontré con esto script de bash, pero no lo he probado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top