Ricerca nel repository SVN [chiuso]


155

Esiste un buon software che mi permetta di cercare frammenti di codice nel mio repository SVN? Ho trovato "FishEye" ma il costo è 1.200 e ben al di fuori del mio budget.


6
Devi cercare nella cronologia del repository? O solo la testa?
Swilliams,

4
Esiste una versione gratuita di FishEye - www.atlassian.com/starter
David d C e Freitas

1
@DavidFreitas nessuna opzione gratuita adesso
bahrep

Esiste una versione da $ 10 di FishEye: www.atlassian.com/software/starter/overview , @bahrep. Una volta spento, tutto procede in beneficenza.
David d C e Freitas,

1
C'è una nuova svn log --searchopzione, può essere utile per chi cerca una semplice ricerca nella cronologia del repository.
bahrep,

Risposte:


69

Se stai cercando solo il nome del file, usa:

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

Finestre:

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

Altrimenti fai il checkout e fai la ricerca del filesystem:

egrep -r _code_ .

3
Potrebbe non essere del tutto ovvio, ma questi comandi si applicano a qualsiasi metodo di accesso a un server svn, non solo al file: (es. Svn: e svn + ssh: funzionano anche)
Alex Marshall

2
//, ti dispiacerebbe fornire un esempio funzionante per ognuno di questi?
Nathan Basanese,

1
OP voleva cercare tra i file, non solo i nomi dei file. esempio di ricerca del filesystem non molto utile.
erigere il


12

Aggiornamento gennaio 2020

VisualSVN Server 4.2 supporta la ricerca di file e cartelle nell'interfaccia Web. Prova la nuova funzionalità su uno dei repository del server demo !

Vedere le note di rilascio della versione 4.2 e scaricare VisualSVN Server 4.2.0 dalla pagina di download principale .

inserisci qui la descrizione dell'immagine


Vecchia risposta

A partire da Subversion 1.8, è possibile utilizzare l' --searchopzione con il svn logcomando . Si noti che il comando non esegue la ricerca full-text all'interno di un repository, considera solo i seguenti dati:

  • autore della revisione ( svn:authorproprietà non citata),
  • data ( svn:dateproprietà senza riserve),
  • testo del messaggio di registro ( svn:logproprietà non citata),
  • elenco di percorsi modificati (ovvero percorsi interessati dalla particolare revisione).

Ecco la pagina di aiuto su queste nuove opzioni di ricerca:

 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
Questo metodo funziona rapidamente, ma non deve essere utilizzato per cercare la presenza di file. Poiché questa opzione di ricerca analizza solo l'elenco dei percorsi esplicitamente modificati in ogni revisione, è possibile creare copie di cartelle (nuovo ramo creato dal trunk) in cui è presente un determinato file, ma non verrà elencato con questo metodo.
Pieter-Jan Busschaert,

@ Pieter-JanBusschaert il tuo commento riguarda l'uso del comando svn log --search. Vedi la risposta aggiornata sulla nuova ricerca basata su webui. Non ha questa limitazione.
bahrep,


9
  1. Crea git-svnmirror di quel repository.
  2. Cerca stringhe aggiunte o rimosse all'interno di git: git log -S'my line of code'o lo stesso ingitk

Il vantaggio è che puoi effettuare molte ricerche localmente, senza caricare il server e la connessione di rete.


8

Questo esempio reindirizza il contenuto completo del repository in un file, che è quindi possibile cercare rapidamente i nomi dei file all'interno di un editor:

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

Ciò è utile se il repository è relativamente statico e si desidera eseguire ricerche rapide senza dover caricare ripetutamente tutto dal server SVN.


4
Dovrei notare che nel mio caso, era necessario utilizzare httpcome protocollo ( svn list -R http://repo/svn/etc).
Charles Wood,

sottoposto a downgrade, perché OP voleva cercare tra i file, non i nomi dei file. Il comando svn list scarica solo i nomi dei file del repository.
erigere il


4

Solo una nota, FishEye (e molti altri prodotti Atlassian) hanno una Starter Edition da $ 10, che nel caso di FishEye ti dà 5 repository e l'accesso per un massimo di 10 committer. I soldi vanno in beneficenza in questo caso.

www.atlassian.com/starter


Non più? Non vedo opzioni gratuite nella pagina.
bahrep,

@bahrep, ho aggiornato la risposta, ora sono $ 10 che vanno in beneficenza che è effettivamente "gratuito" se ci pensate.
David d C e Freitas,

3

Dolorosamente lento (e grossolanamente implementato) ma una combinazione di svn log e svn cat funziona se stai cercando la cronologia di singoli file o piccoli repository:

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

produrrà ogni numero di revisione in cui il file è stato modificato e il file. Puoi sempre catalogare ogni revisione in un file diverso e quindi grep per le modifiche.

PS. Massicci voti a chiunque mi mostri come farlo correttamente!


3
Basta usare git-svn. Git ha incorporato la ricerca di codice nella cronologia di commit. Ma dovrai scaricare l'intera cronologia dei commit da usare git-svn.
Vi.

2

Se sei davvero disperato, esegui un dump del repository (guarda "svnadmin dump") e poi passaci sopra. Non è carino, ma puoi dare un'occhiata ai risultati della ricerca per trovare i metadati che indicano il file e la revisione, quindi dai un'occhiata per un aspetto migliore.

Non è una buona soluzione, certo, ma è gratuita :) SVN non offre alcuna funzione per la ricerca di check-in precedenti (o persino file di log precedenti, AFAIK).


1

Molti repository SVN sono siti "semplicemente" HTTP, quindi potresti prendere in considerazione la possibilità di cercare alcune app di ricerca "web crawling" standard che puoi puntare alla radice SVN e che ti forniranno funzionalità di base. L'aggiornamento sarà probabilmente un po 'un trucco, forse alcuni controlli SVN negli hacker possono solleticare l'indice per scartare o reindicizzare le modifiche mentre procedi.

Sto solo pensando ad alta voce.


1
Questa probabilmente non è una buona idea, in quanto il sovraccarico in questione sarebbe enorme. Inoltre, i server SVN di solito non sono pagine Web normali, ma un repository svn esposto attraverso webdav.
torkildr,



0

// Modifica: lo strumento è già stato menzionato in un'altra risposta, quindi dai tutti i crediti a Kuryaki.

Ho appena trovato SupoSE che è uno strumento da riga di comando basato su Java che esegue la scansione di un repository per creare un indice e in seguito è in grado di rispondere a determinati tipi di query. Stiamo ancora valutando lo strumento ma sembra promettente. Vale la pena ricordare che effettua un indice completo di tutte le revisioni inclusi i file di codice sorgente e i formati comuni di Office.

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.