web-dev-qa-db-fra.com

Rechercher dans le référentiel SVN un nom de fichier

Nous avons un référentiel en vrac pour le code contenant des milliers de dossiers et sous-dossiers, je veux rechercher sous ce référentiel avec un nom de fichier ou avec un mot.

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

Je veux rechercher cd.txt mais je ne sais pas où il se trouve dans le référentiel SVN, pour cela je veux effectuer une recherche sur le dossier racine de SVN où je mettrai le nom de fichier cd.txt et exécutera la commande, vérifierai chaque dossier et affichera le résultat des détails du fichier ....

L'espoir est clair. Pouvez-vous m'aider s'il vous plaît à ce sujet.

82
Baljeet

Si le fichier est dans votre copie de travail, alors si vous utilisez svn 1.5:

svn list --depth infinity | grep <filename>

ou une version antérieure de svn:

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

Si vous devez trouver le fichier dans l'historique (supprimé ou déplacé):

svn log -v | less

et recherchez-le avec:

\<filename><return>
59
lmop

Ce qui suit fonctionne pour moi (svn version 1.4.6)

svn list -R <URL> | grep "<file_pattern>"
57
Marios V

Avec accès au dépôt lui-même, utilisez (c'est-à-dire sur votre système de fichiers hôte svn)

svnlook tree [path_to_repo] | grep [file_name]  

ou pour rechercher tous les référentiels (si vous avez plusieurs configurations de référentiels).

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'option --full -path donnera le chemin complet du dépôt au fichier (si trouvé)

exemple:

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

rediriger la sortie vers un fichier si une copie statique est nécessaire.
suppose d'utiliser nix OS.

17
Robert Iles

svn list --depth infinity <your-repo-here> pour obtenir une liste des fichiers du référentiel, puis svn cat pour obtenir le contenu. Vous pouvez ajouter --xml touchez la commande list pour simplifier l'analyse.

12
Anton Gogolev

Récemment, j'ai publié mon tilitaire pour lister le référentiel, c'est beaucoup plus rapide que l'approche "svn ls --depth infinity". Voici les benchmarks . Il appelle simplement une fonction disponible dans l'API interne de Subversion, mais désormais accessible via une ligne de commande.

Vous pouvez donc courir

$ svn-crawler <URL> | grep "<file_pattern>"
6
Dmitry Pavlenko

Si vous utilisez TortoiseSVN, vous pouvez essayer ceci SI vous êtes prêt à regarder Project by Project - fonctionne pour moi:

  1. Créez un projet vide sous l'URL de niveau supérieur de votre référentiel, appelez-le BLANK
  2. Cliquez sur l'URL du dépôt dans le volet gauche
  3. Dans le volet de droite, sélectionnez votre projet BLANK et votre projet souhaité - dites tronc
  4. Faites un clic droit pour faire apparaître le menu du navigateur et sélectionnez "Comparer les URL", selon la taille de votre dépôt, le chargement peut prendre une minute. Mais vous obtenez essentiellement la liste complète de vos projets dans une liste "prête à rechercher".
  5. Entrez votre nom de fichier ou une autre chaîne dans le filtre de recherche
4
dci_dave