2009-04-01 31 views
76

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

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

Quiero buscar cd.txt pero no saben dónde se encuentra en repositorio SVN, por que quiero realizar una búsqueda en el directorio raíz del SVN donde voy a poner el nombre de archivo y cd.txt ejecute el comando, comprobará en cada carpeta y mostrará los detalles del archivo resultado ....

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

+0

posible duplicado de [Búsqueda de historial de subversión (texto completo)] (http://stackoverflow.com/questions/44176/searching-subversion-history-full-text) – bahrep

+2

No creo que sea un duplicado. Eso es sobre buscar en la historia. Esto se trata de buscar un archivo. –

+0

Tenía la esperanza de que hubiera un comando del lado del cliente que podría ingresar que realizaría la búsqueda en el servidor. Este repositorio SVN con el que estoy trabajando tiene tiempos de respuesta y velocidad de transferencia terribles sobre VPN. Por desgracia, eso no parece posible. –

Respuesta

12

svn list --depth infinity <your-repo-here> para obtener una lista de archivos en el repositorio, y luego svn cat para obtener contenidos. Puede agregar la clave --xml al comando list para que el análisis sea un poco más simple.

+0

Recuerde usar 'grep' si quiere ver 1 archivo, especialmente si tiene miles de archivos en el repositorio como el OP. Además, existe un modo '--incremental' si necesita unir el resultado con una salida XML posterior o posterior. – trysis

54

Si el archivo está en su copia de trabajo, a continuación, si está utilizando svn 1.5:

svn list --depth infinity | grep <filename> 

o una versión anterior de SVN:

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

Si usted necesita encontrar el archivo en la historia (eliminado o movido):

svn log -v | less 

y buscar con:

\<filename><return> 
+3

svn list --depth infinito funciona bien, en Windows, por supuesto, no tendrá grep de manera predeterminada, simplemente lo vacié en un archivo de texto y busqué con un editor de texto: – Mandrake

+4

En Windows PowerShell puede usar '... | select-string 'como reemplazo de' grep'. –

+2

En una línea de comando de Windows normal '... | encontrar "" 'también funcionará como un reemplazo para grep. ** NOTA **: "Se requieren alrededor de un nombre de archivo. – Raystorm

52

Los siguientes obras para mí (versión SVN 1.4.6)

svn list -R <URL> | grep "<file_pattern>" 
+5

Genial. Esto funciona para Tortoise. En Windows: svn list -R myurl >> results.txt –

+0

Funciona muy bien. También es mucho más fácil de recordar solo "- R "than" --depth infinito ". – MPV

4

Si está utilizando TortoiseSVN puede intentar esto si usted está dispuesto a mirar proyecto por proyecto - que funciona para mí:

  1. Crear un proyecto en blanco en su URL nivel superior repositorio, llamarlo bLANCO
  2. Haga clic en la URL de Repo panel izquierdo
  3. sobre el plato de la mano derecha e seleccione su proyecto BLANK y su proyecto deseado - por ejemplo, tronco
  4. Haga clic derecho para abrir el menú del navegador y seleccione "Comparar URLs", dependiendo del tamaño de su repositorio, puede tardar un minuto en cargarse. Pero básicamente consigues toda tu lista de proyectos en una lista 'lista para buscar'.
  5. Introduzca su nombre de archivo o la otra cadena en el filtro de búsqueda
5

Recientemente he publicado mi utility a la lista del repositorio, eso es mucho más rápido que el enfoque "svn ls --depth infinito". Aquí está el benchmarks. Simplemente llama a una función que está disponible en la API interna de Subversion, pero que ahora se puede acceder a través de una línea de comando.

para que pueda ejecutar

$ svn-crawler <URL> | grep "<file_pattern>" 
15

Con acceso al repositorio Utilizar él mismo (es decir, en su SVN archivo host Inglés)

svnlook tree [path_to_repo] | grep [file_name] 

o para buscar todos los repositorios (si tiene la configuración repos mulitple)

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-caminos se dan en la ruta completa de repositorios para el 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 

salida de redirección a un archivo si es copia estática necesario.
asume el uso de nix OS.

+3

+1 para usar" svnlook tree --full-paths | grep ". Esta es la forma más rápida que he encontrado de hacer una búsqueda de archivos en un repositorio de subversión. –

+0

búsqueda rápida, muy útil. –

0

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

Cuestiones relacionadas