Recherche dans le référentiel SVN [fermé]


155

Existe-t-il un bon logiciel qui me permettra de rechercher dans mon référentiel SVN des extraits de code? J'ai trouvé 'FishEye' mais le coût est de 1 200 et bien en dehors de mon budget.


6
Avez-vous besoin de rechercher dans l'historique du repo? Ou juste la tête?
swilliams

4
Il existe une version gratuite de FishEye - www.atlassian.com/starter
David d C e Freitas

1
@DavidFreitas pas d'options gratuites maintenant
bahrep

Il existe une version à 10 $ de FishEye: www.atlassian.com/software/starter/overview , @bahrep. Une fois hors, tout passe à la charité.
David d C e Freitas

1
Il existe une nouvelle svn log --searchoption, qui peut être utile pour quelqu'un qui recherche une simple recherche dans l'historique du référentiel.
bahrep

Réponses:


69

Si vous recherchez uniquement le nom de fichier, utilisez:

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

Les fenêtres:

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

Sinon, vérifiez et effectuez une recherche dans le système de fichiers:

egrep -r _code_ .

3
Ce n'est peut-être pas tout à fait évident, mais ces commandes s'appliquent à toute méthode d'accès à un serveur svn, pas seulement à un fichier: (par exemple, svn: et svn + ssh: fonctionnent également)
Alex Marshall

2
//, Pourriez-vous donner un exemple concret pour chacun d'entre eux?
Nathan Basanese

1
OP voulait rechercher dans les fichiers, pas seulement dans les noms de fichiers. exemple de recherche de système de fichiers pas très utile.
ériger le


12

Mise à jour janvier 2020

VisualSVN Server 4.2 prend en charge la recherche de fichiers et de dossiers dans l'interface Web. Essayez la nouvelle fonctionnalité sur l'un des référentiels du serveur de démonstration !

Consultez les notes de publication de la version 4.2 et téléchargez VisualSVN Server 4.2.0 à partir de la page de téléchargement principale .

entrez la description de l'image ici


Ancienne réponse

À partir de Subversion 1.8, vous pouvez utiliser l' --searchoption avec la svn logcommande . Notez que la commande n'effectue pas de recherche en texte intégral dans un référentiel, elle ne prend en compte que les données suivantes:

  • l'auteur de la révision ( svn:authorpropriété non versionnée),
  • date ( svn:datepropriété non versionnée),
  • texte du message du journal ( svn:logpropriété non versionnée),
  • liste des chemins modifiés (c'est-à-dire les chemins affectés par la révision particulière).

Voici la page d'aide sur ces nouvelles options de recherche:

 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
Cette méthode fonctionne rapidement, mais ne doit pas être utilisée pour rechercher la présence de fichiers. Comme cette option de recherche analyse uniquement la liste des chemins explicitement modifiés dans chaque révision, vous pouvez créer des copies de dossier (nouvelle branche créée à partir du tronc) où un certain fichier est présent, mais il ne sera pas répertorié par cette méthode.
Pieter-Jan Busschaert

@ Pieter-JanBusschaert votre commentaire concerne l'utilisation de la commande svn log --search. Voir la réponse mise à jour sur la nouvelle recherche basée sur Webui. Il n'a pas cette limitation.
bahrep du


9
  1. Créez un git-svnmiroir de ce référentiel.
  2. Rechercher des chaînes ajoutées ou supprimées dans git: git log -S'my line of code'ou la même chose dansgitk

L'avantage est que vous pouvez effectuer de nombreuses recherches localement, sans charger le serveur et la connexion réseau.


8

Cet exemple dirige le contenu complet du référentiel vers un fichier, que vous pouvez ensuite rechercher rapidement pour les noms de fichiers dans un éditeur:

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

Ceci est utile si le référentiel est relativement statique et que vous souhaitez effectuer des recherches rapides sans avoir à tout charger à plusieurs reprises depuis le serveur SVN.


4
Je dois noter que dans mon cas, il fallait utiliser httpcomme protocole ( svn list -R http://repo/svn/etc).
Charles Wood

a voté contre, car OP voulait rechercher dans les fichiers, pas dans les noms de fichiers. La commande svn list vide uniquement les noms de fichiers du référentiel.
ériger le


4

Juste une note, FishEye (et beaucoup d'autres produits Atlassian) ont des éditions de démarrage à 10 $, ce qui dans le cas de FishEye vous donne 5 référentiels et un accès jusqu'à 10 committers. L'argent va à la charité dans ce cas.

www.atlassian.com/starter


Plus maintenant? Je ne vois pas d'options gratuites sur la page.
bahrep

@bahrep, j'ai mis à jour la réponse, c'est maintenant 10 $ qui vont à la charité qui est effectivement "gratuit" si vous y réfléchissez.
David d C e Freitas

3

Péniblement lent (et grossièrement implémenté) mais une combinaison de svn log et svn cat fonctionne si vous recherchez l'historique de fichiers uniques ou de petits référentiels:

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

affichera chaque numéro de révision où le fichier a été modifié et le fichier. Vous pouvez toujours classer chaque révision dans un fichier différent, puis grep pour les modifications.

PS. Des votes positifs massifs à tous ceux qui me montrent comment faire cela correctement!


3
Utilisez simplement git-svn. Git a une recherche intégrée de code dans l'historique des commit. Mais vous devrez télécharger l'intégralité de l'historique des validations à utiliser git-svn.
Vi.

2

Si vous êtes vraiment désespéré, effectuez un vidage du dépôt (regardez "svnadmin dump") puis effectuez un greffe. Ce n'est pas joli, mais vous pouvez regarder autour des résultats de la recherche pour trouver les métadonnées qui indiquent le fichier et la révision, puis les vérifier pour une meilleure apparence.

Ce n'est pas une bonne solution, certes, mais c'est gratuit :) SVN ne fournit aucune fonctionnalité pour rechercher des enregistrements passés (ou même des fichiers journaux passés, AFAIK).


1

Un grand nombre de dépôts SVN sont "simplement" des sites HTTP, vous pouvez donc envisager de regarder une application de recherche "d'exploration Web" prête à l'emploi que vous pouvez pointer vers la racine SVN et qui vous donnera des fonctionnalités de base. Le mettre à jour sera probablement un peu une astuce, peut-être que certains check-in SVN peuvent chatouiller l'index pour annuler ou réindexer les modifications au fur et à mesure.

Je pense juste à voix haute.


1
Ce n'est probablement pas une bonne idée, car les frais généraux impliqués seraient énormes. De plus, les serveurs SVN ne sont généralement pas des pages Web régulières, mais un dépôt svn exposé via webdav.
torkildr


1

J'ai commencé à utiliser cet outil

http://www.supose.org/wiki/supose

Cela fonctionne bien sans une interface utilisateur visuelle, mais est rapide et quelque peu maintenu


1
De nos jours (août 2012), le projet semble avoir stagné ...
anol

En décembre 2012, ils ont publié quelque chose de nouveau (0.7.1)
sendmoreinfo

2
semble avoir disparu
fbstj

0

// Edit: Tool a déjà été mentionné dans une autre réponse, alors donnez tous les crédits à Kuryaki.

Je viens de trouver SupoSE qui est un outil de ligne de commande basé sur Java qui analyse un référentiel pour créer un index et qui est ensuite capable de répondre à certains types de requêtes. Nous évaluons toujours l'outil, mais il semble prometteur. Il convient de mentionner qu'il fait un index complet de toutes les révisions, y compris les fichiers de code source et les formats bureautiques courants.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.