Cerca nel repository SVN un nome file


84

Abbiamo un repository di massa per il codice contenente migliaia di cartelle e sottocartelle, voglio cercare in questo repositor con il nome del file o con qualche parola.

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

Voglio cercare cd.txt ma non so dove si trovi in ​​SVN Repository, per questo voglio eseguire una ricerca nella cartella principale di SVN dove inserirò il nome del file cd.txt ed eseguirò il comando, farò il check-in ogni cartella e visualizzerà il risultato dei dettagli del file ....

Il requisito della speranza è chiaro. Puoi aiutarmi per favore su questo.


Speravo ci fosse un comando lato client da inserire che avrebbe eseguito la ricerca lato server. Questo repository SVN con cui sto lavorando ha tempi di risposta e velocità di trasferimento terribili su VPN. Ahimè, ciò non sembra possibile.
Patrick M

Risposte:


60

Se il file è nella tua copia di lavoro, se stai usando svn 1.5:

svn list --depth infinity | grep <filename>

o una versione precedente di svn:

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

Se devi trovare il file nella cronologia (eliminato o spostato):

svn log -v | less

e cercalo con:

\<filename><return>

3
svn list --depth infinity funziona bene, in Windows ovviamente non avrai grep per impostazione predefinita, l'ho appena scaricato in un file di testo e l'ho cercato con un editor di testo:
Mandrake

5
In Windows PowerShell è possibile utilizzare ... | select-string <filename>in sostituzione di grep.
MarnixKlooster ReinstateMonica

2
In una normale riga di comando di Windows ... | find "<filename>"funzionerà anche come sostituto di grep. NOTA : "sono obbligatori intorno al nome del file.
Raystorm

7
Se il file è nella mia copia di lavoro, non ho bisogno di svn per trovarlo. Dovresti aggiungere come cercare nel repository come le risposte di Anton e Marios. Forse è ovvio per te, ma sono state le loro risposte ad accendere la luce per il semplice vecchio me.
Lieven Keersmaekers

1
Puoi svn co --depth empty REPOURL RepoDir, cd RepoDire svn list --depth infinityquindi ottenere tutti i percorsi dei file dal server SVN (producendo forse milioni di righe se ne hai milioni).
Ivan Akcheurov

58

Quanto segue funziona per me (svn versione 1.4.6)

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

6
Grande. Questo funziona per Tortoise. In Windows: svn list -R myurl >> results.txt
live-love

Funziona davvero bene. Inoltre è molto più facile ricordare solo "-R" che "--depth infinity".
MPV

lento per i repository di grandi dimensioni, quindi è meglio utilizzare svn-crawler di seguito.
karsten,

17

Con l'accesso al repository stesso usa (cioè sul tuo file host svn sytem)

svnlook tree [path_to_repo] | grep [file_name]  

o per cercare tutti i repository (se si dispone di più repository).

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 

l'opzione --full-path fornirà il percorso completo nel repo del file (se trovato)

esempio:

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

reindirizza l'output a un file se è necessaria una copia statica.
presuppone l'utilizzo di nix OS.


3
+1 per l'utilizzo di "svnlook tree --full-path <path_to_repo> | grep <filename>". Questo è il modo più veloce che ho trovato per eseguire una ricerca di file in un repository di Subversion.
Nick Grealy

ricerca velocissima, molto utile.
Dustin Cook

12

svn list --depth infinity <your-repo-here>per ottenere un elenco di file nel repository e quindi svn catper ottenere i contenuti. Puoi aggiungere la --xmlchiave al listcomando per rendere l'analisi un po 'più semplice.


Ricorda di usare grepse vuoi vedere 1 file, specialmente se hai migliaia di file nel repository come l'OP. Inoltre, esiste una --incrementalmodalità se è necessario unire l'output con l'output XML successivo / precedente.
trysis

6

Recentemente ho pubblicato la mia utility per elencare il repository, che è molto più veloce dell'approccio "svn ls --depth infinity". Ecco i benchmark . Chiama solo una funzione disponibile nell'API interna di Subversion, ma ora accessibile tramite una riga di comando.

Quindi puoi correre

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

Bel strumento. Ho provato con CentOS7. Ho dovuto aggiungere libsvn_delta e libsvn_subr all'elenco target_link_libraries in CMakeLists.txt, inoltre adattare LIBAPR_LIBRARY_INCLUDE da "include / apr-1.0" a "include / apr-1".
karsten

4

Se stai usando TortoiseSVN puoi provare questo SE sei disposto a cercare Progetto per Progetto - funziona per me:

  1. Crea un progetto vuoto sotto l'URL di primo livello del tuo repository, chiamalo BLANK
  2. Fare clic sull'URL del repository nel riquadro di sinistra
  3. Nel riquadro di destra seleziona il tuo progetto BLANK e il progetto desiderato, ad esempio trunk
  4. Fare clic con il pulsante destro del mouse per visualizzare il menu del browser e selezionare "Confronta URL", a seconda delle dimensioni del repository, il caricamento potrebbe richiedere un minuto. Ma fondamentalmente ottieni l'intero elenco di progetti in un elenco "pronto per la ricerca".
  5. Immettere il nome del file o un'altra stringa nel filtro di ricerca


-2

Se il tuo repository remoto non è enorme, allora un metodo semplice è: puoi fare un "checkout" per ottenere un repository locale. Se sei su una macchina Windows usi "Cerca" o su una macchina Linux usa il comando "Trova".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.