SVN Repository Search [cerrado]

155

¿Existe algún buen software que me permita buscar fragmentos de código en mi repositorio SVN? Encontré 'FishEye' pero el costo es de 1,200 y está muy por encima de mi presupuesto.

Juan
fuente
66
¿Necesita buscar en la historia del repositorio? O solo la cabeza?
swilliams
44
Hay una versión gratuita de FishEye - www.atlassian.com/starter
David d C e Freitas
1
@DavidFreitas no hay opciones gratuitas ahora
bahrep
Hay una versión de $ 10 de FishEye: www.atlassian.com/software/starter/overview , @bahrep. Una vez apagado, todo procede a la caridad.
David d C e Freitas
1
Hay una nueva svn log --searchopción, puede ser útil para alguien que busca una búsqueda simple en el historial del repositorio.
bahrep

Respuestas:

69

Si solo busca el nombre de archivo, use:

svn list -R file:///subversion/repository | grep filename

Ventanas:

svn list -R file:///subversion/repository | findstr filename

De lo contrario, realice el pago y realice la búsqueda del sistema de archivos

egrep -r _code_ .
phil_w
fuente
3
Puede que no sea del todo obvio, pero estos comandos se aplican a cualquier método de acceso a un servidor svn, no solo al archivo: (por ejemplo, svn: y svn + ssh: también funcionan)
Alex Marshall
2
//, ¿Te importaría proporcionar un ejemplo de trabajo para cada uno de ellos?
Nathan Basanese
1
OP quería buscar en los archivos, no solo en los nombres de archivo. El ejemplo de búsqueda del sistema de archivos no es muy útil.
erict
12

Actualización de enero de 2020

VisualSVN Server 4.2 admite la búsqueda de archivos y carpetas en la interfaz web. ¡Pruebe la nueva función en uno de los repositorios del servidor de demostración !

Consulte las Notas de la versión 4.2 y descargue VisualSVN Server 4.2.0 desde la página de descarga principal .

ingrese la descripción de la imagen aquí


Vieja respuesta

A partir de Subversion 1.8, puede usar la --searchopción con el svn logcomando . Tenga en cuenta que el comando no realiza una búsqueda de texto completo dentro de un repositorio, solo considera los siguientes datos:

  • autor de la revisión ( svn:authorpropiedad no versionada),
  • fecha ( svn:datepropiedad no versionada),
  • texto del mensaje de registro ( svn:logpropiedad no versionada),
  • lista de rutas cambiadas (es decir, rutas afectadas por la revisión particular).

Aquí está la página de ayuda sobre estas nuevas opciones de búsqueda:

 If the --search option is used, log messages are displayed only if the
 provided search pattern matches any of the author, date, log message
 text (unless --quiet is used), or, if the --verbose option is also
 provided, a changed path.
 The search pattern may include "glob syntax" wildcards:
     ?      matches any single character
     *      matches a sequence of arbitrary characters
     [abc]  matches any of the characters listed inside the brackets
 If multiple --search options are provided, a log message is shown if
 it matches any of the provided search patterns. If the --search-and
 option is used, that option's argument is combined with the pattern
 from the previous --search or --search-and option, and a log message
 is shown only if it matches the combined search pattern.
 If --limit is used in combination with --search, --limit restricts the
 number of log messages searched, rather than restricting the output
 to a particular number of matching log messages.
bahrep
fuente
1
Este método funciona rápido, pero no debe usarse para buscar la presencia de archivos. Como esta opción de búsqueda solo analiza la lista de rutas cambiadas explícitamente en cada revisión, puede crear copias de carpetas (nueva rama creada desde el tronco) donde está presente un determinado archivo, pero este método no lo enumerará.
Pieter-Jan Busschaert
@ Pieter-JanBusschaert su comentario es sobre el uso del comando svn log --search. Vea la respuesta actualizada sobre la nueva búsqueda basada en webui. No tiene esta limitación.
bahrep
9
  1. Crear git-svnespejo de ese repositorio.
  2. Busque cadenas agregadas o eliminadas dentro de git: git log -S'my line of code'o lo mismo engitk

La ventaja es que puede hacer muchas búsquedas localmente, sin cargar el servidor y la conexión de red.

Vi.
fuente
8

Este ejemplo canaliza el contenido completo del repositorio a un archivo, que luego puede buscar rápidamente nombres de archivo dentro de un editor:

svn list -R svn://svn > filelist.txt

Esto es útil si el repositorio es relativamente estático y desea realizar búsquedas rápidas sin tener que cargar repetidamente todo desde el servidor SVN.

Aplazamiento de pago
fuente
44
Debo señalar que en mi caso, fue necesario usarlo httpcomo protocolo ( svn list -R http://repo/svn/etc).
Charles Wood
rechazado, porque OP quería buscar en los archivos, no en los nombres de los archivos. El comando svn list solo volca los nombres de archivo del repositorio.
erict
4

Me gusta TRAC: este complemento puede ser útil para su tarea: http://trac-hacks.org/wiki/RepoSearchPlugin

Kai
fuente
esto parece algo prometedor ... pero no demasiado fácil de instalar, no puedo confirmar si funciona con Trac + VisualSVN Server.
Kit Roed
4

Solo una nota, FishEye (y muchos otros productos Atlassian) tienen ediciones iniciales de $ 10, que en el caso de FishEye le brinda 5 repositorios y acceso para hasta 10 confirmadores. El dinero va a la caridad en este caso.

www.atlassian.com/starter

David d C e Freitas
fuente
¿Ya no? No veo opciones gratuitas en la página.
bahrep
@bahrep, he actualizado la respuesta, ahora son $ 10 los que se destinan a la caridad, que es efectivamente "gratis" si lo piensas.
David d C e Freitas
3

Dolorosamente lento (e implementado crudamente), pero una combinación de svn log y svn cat funciona si está buscando en el historial de archivos individuales o pequeños repositorios:

svn log filetosearch |
    grep '^r' |
    cut -f1 -d' ' |
    xargs -i bash -c "echo '{}'; svn cat filetosearch -'{}'" 

generará cada número de revisión donde el archivo cambió y el archivo. Siempre puede colocar cada revisión en un archivo diferente y luego buscar cambios.

PD. ¡Votos masivos a cualquiera que me muestre cómo hacer esto correctamente!

Conocido
fuente
3
Solo úsalo git-svn. Git tiene una búsqueda incorporada de código en el historial de confirmación. Pero deberá descargar todo el historial de confirmaciones para usarlo git-svn.
Vi.
2

Si realmente estás desesperado, realiza un volcado del repositorio (mira "svnadmin dump") y luego revisa. No es bonito, pero puede mirar alrededor de los resultados de búsqueda para encontrar los metadatos que indican el archivo y la revisión, luego verifíquelo para verlo mejor.

No es una buena solución, sin duda, pero es gratis :) SVN no proporciona ninguna función para buscar registros anteriores (o incluso archivos de registro anteriores, AFAIK).

rmeador
fuente
1

Una gran cantidad de repositorios SVN son sitios HTTP "simplemente", por lo que puede considerar mirar alguna aplicación de búsqueda "rastreada en la web" que pueda apuntar a la raíz SVN y le dará una funcionalidad básica. Actualizarlo probablemente será un poco complicado, tal vez algún chequeo de SVN en la piratería puede hacer cosquillas en el índice para descartar o reindexar los cambios a medida que avanza.

Solo pensando en voz alta.

Will Hartung
fuente
1
Probablemente no sea una buena idea, ya que la sobrecarga involucrada sería enorme. Además, los servidores SVN no suelen ser páginas web normales, sino un repositorio svn expuesto a través de webdav.
torkildr
1

Hay krugle y koders, pero ambos son caros. Ambos tienen complementos ide para eclipse.

Brendon-Van-Heyzen
fuente
2
¿Qué pasa con Krugle Basic?
Bård
1

Empecé a usar esta herramienta

http://www.supose.org/wiki/supose

Funciona bien solo porque carece de una interfaz de usuario visual, pero es rápido y algo mantenido

Kuryaki
fuente
1
Hoy en día (agosto de 2012) el proyecto parece haberse estancado ...
Anol
En diciembre de 2012 lanzaron algo nuevo (0.7.1)
sendmoreinfo
2
parece haber desaparecido
fbstj
0

// Editar: La herramienta ya se mencionó en otra respuesta, así que dale todos los créditos a Kuryaki.

Acabo de encontrar SupoSE, que es una herramienta de línea de comandos basada en Java que escanea un repositorio para crear un índice y luego puede responder a ciertos tipos de consultas. Todavía estamos evaluando la herramienta, pero parece prometedora. Vale la pena mencionar que hace un índice completo de todas las revisiones, incluidos los archivos de código fuente y los formatos de oficina comunes.

jek
fuente