Busque en el repositorio SVN un nombre de archivo

84

Tenemos un repositorio masivo para el código que contiene miles de carpetas y subcarpetas, quiero buscar en este repositorio con el nombre del archivo o con alguna palabra.

Root folder
    a\
    b\
    c\
    d\
    e\
    f\ab\
    f\ab\cd.txt

Quiero buscar cd.txt pero no sé dónde está en el repositorio de SVN, para eso quiero realizar una búsqueda en la carpeta raíz de SVN donde pondré el nombre del archivo cd.txt y ejecutaré el comando, lo registraré cada carpeta y mostrará el resultado de los detalles del archivo ...

El requisito de esperanza es claro. Puedes por favor ayudarme en esto.

Nakilon
fuente
Esperaba que hubiera un comando del lado del cliente que pudiera ingresar y que realizara la búsqueda del lado del servidor. Este repositorio de SVN con el que estoy trabajando tiene tiempos de respuesta y tasa de transferencia terribles a través de VPN. Por desgracia, eso no parece posible.
Patrick M

Respuestas:

60

Si el archivo está en su copia de trabajo, entonces si está usando svn 1.5:

svn list --depth infinity | grep <filename>

o una versión anterior de svn:

find . -name <filename> -not -path '*.svn*'

Si necesita encontrar el archivo en el historial (eliminado o movido):

svn log -v | less

y búscalo con:

\<filename><return>
lmop
fuente
3
svn list --depth infinity funciona bien, en Windows, por supuesto, no tendrá grep de forma predeterminada, simplemente lo descargué en un archivo de texto y lo busqué con un editor de texto:
Mandrake
4
En Windows PowerShell, puede usar ... | select-string <filename>como reemplazo de grep.
MarnixKlooster ReinstateMonica
2
En una línea de comandos de Windows normal ... | find "<filename>", también funcionará como reemplazo de grep. NOTA : Los "son obligatorios alrededor del nombre del archivo.
Raystorm
7
Si el archivo está en mi copia de trabajo, no necesito svn para encontrarlo. Debe agregar cómo buscar en el repositorio como las respuestas de Anton y Marios. Quizás eso sea obvio para ti, pero fueron sus respuestas las que encendieron la luz para mí.
Lieven Keersmaekers
1
Puede svn co --depth empty REPOURL RepoDir, cd RepoDiry svn list --depth infinityluego obtener todas las rutas de archivo del servidor SVN (posiblemente produciendo millones de líneas si tiene millones).
Ivan Akcheurov
58

Lo siguiente funciona para mí (svn versión 1.4.6)

svn list -R <URL> | grep "<file_pattern>"
Marios V
fuente
6
Excelente. Esto funciona para Tortuga. En Windows: svn list -R myurl >> results.txt
live-love
Funciona muy bien. También es mucho más fácil recordar solo "-R" que "--depth infinity".
MPV
lento para repositorios grandes, entonces mejor use svn-crawler a continuación.
karsten
17

Con acceso al repositorio en sí, use (es decir, en su sistema de archivos de host svn)

svnlook tree [path_to_repo] | grep [file_name]  

o para buscar en todos los repositorios (si tiene varios repositorios configurados).

for i in \`ls [path_to_repos_dir]`; do echo $i; svnlook tree [path_to_repos_dir]/$i | grep -i [file_or_folder_name]; done 

la opción --full-Paths dará la ruta completa en el repositorio al archivo (si se encuentra)

ejemplo:

for i in `ls /u01/svn-1.6.17/repos`; do echo $i; svnlook tree --full-paths /u01/svn- 1.6.17/repos/$i | grep -i somefile.txt; done

redirigir la salida a un archivo si se necesita una copia estática.
asume el uso de nix OS.

Robert Iles
fuente
3
+1 para usar "svnlook tree --full -path <path_to_repo> | grep <filename>". Esta es la forma más rápida que he encontrado de hacer una búsqueda de archivos en un repositorio de subversión.
Nick Grealy
búsqueda ultrarrápida, muy útil.
Dustin Cook
12

svn list --depth infinity <your-repo-here>para obtener una lista de archivos en el repositorio y luego svn catpara obtener el contenido. Puede agregar una --xmlclave al listcomando para simplificar un poco el análisis.

Anton Gogolev
fuente
Recuerde usar grepsi desea ver 1 archivo, especialmente si tiene miles de archivos en el repositorio como el OP. Además, hay un --incrementalmodo si necesita unir la salida con una salida XML anterior o posterior.
Trysis
6

Recientemente publiqué mi utilidad para listar el repositorio, que es mucho más rápido que el enfoque "svn ls --depth infinity". Aquí están los puntos de referencia . Simplemente llama a una función que está disponible en la API interna de Subversion, pero ahora accesible a través de una línea de comando.

Para que puedas correr

$ svn-crawler <URL> | grep "<file_pattern>"
Dmitry Pavlenko
fuente
Buena herramienta. Probé con CentOS7. Tuve que agregar libsvn_delta y libsvn_subr a la lista target_link_libraries en CMakeLists.txt, también adaptar LIBAPR_LIBRARY_INCLUDE de "include / apr-1.0" a "include / apr-1".
karsten
4

Si está utilizando TortoiseSVN, puede probar esto SI está dispuesto a buscar Proyecto por Proyecto, funciona para mí:

  1. Cree un proyecto en blanco bajo la URL de nivel superior de su repositorio, llámelo EN BLANCO
  2. Haga clic en la URL del repositorio en el panel izquierdo
  3. En el panel de la derecha, seleccione su proyecto EN BLANCO y su proyecto deseado - diga tronco
  4. Haga clic derecho para que aparezca el menú del navegador y seleccione 'Comparar URL', dependiendo del tamaño de su repositorio, puede tardar un minuto en cargarse. Pero básicamente obtienes tu lista completa de proyectos en una lista 'lista para buscar'.
  5. Ingrese su nombre de archivo u otra cadena en el filtro de búsqueda
dci_dave
fuente
-2

Si su repositorio remoto no es enorme, entonces un método fácil es: Puede hacer un "pago" para obtener un repositorio local. Si está en una máquina con Windows, utilice "Buscar" o la máquina Linux utilice el comando "Buscar".

Antony Raja
fuente