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.


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_ .

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.

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.


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.


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

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


¿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!


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).


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.


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



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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.