Rechercher dans les fichiers: Rechercher tout le code dans Team Foundation Server

Existe-t-il un moyen de rechercher la dernière version de chaque fichier dans TFS pour une chaîne ou une expression régulière spécifique? C’est probablement la seule chose qui me manque dans Visual Source Safe …

Actuellement, j’effectue une opération Get Latest sur l’ensemble du code et utilise Windows Search, mais cela devient assez pénible avec plus de 1 Go de code dans 75 000 fichiers.

EDIT : J’ai essayé les outils powertools mentionnés, mais l’option “Recherche par caractères génériques” ne semble rechercher que les noms de fichiers et non le contenu.

MISE À JOUR : Nous avons implémenté une option de recherche personnalisée dans une installation MOSS (Search Server) existante.

Team Foundation Server 2015 (sur site) et Visual Studio Team Services (version cloud) incluent une prise en charge intégrée pour la recherche dans tout votre code et vos éléments de travail.

Vous pouvez faire des recherches de chaînes simples comme foo , des opérations booléennes comme foo OR bar ou des choses plus complexes spécifiques à une langue comme la class:WebRequest

capture d'écran de la syntaxe du filtre de recherche de code

Vous pouvez en savoir plus à ce sujet ici: https://www.visualstudio.com/en-us/docs/search/overview

Il existe une autre solution alternative, qui semble être plus attrayante.

  1. Configurer un serveur de recherche – peut-être une machine / un serveur Windows
  2. Configurez un service de notification TFS * (Bissubscribe) pour obtenir, supprimer, mettre à jour les fichiers chaque fois qu’une vérification est effectuée. Il s’agit donc d’un service Web qui agit comme un écouteur sur le serveur TFS et met à jour / synchronise les fichiers et les dossiers sur le serveur de recherche. – cela améliorera considérablement la précision (recherche en direct) et évitera la charge ponctuelle liée à l’obtention de résultats périodiques
  3. Configurer un service d’indexation / recherche indexée Windows sur le serveur de recherche pour le dossier racine
  4. Exposer un service Web pour retourner des résultats de recherche

Maintenant, avec toutes les configurations ci-dessus, vous avez quelques options pour le client:

  1. Configurez une page Web pour appeler le service de recherche et formater les résultats à afficher sur la page Web – vous pouvez également intégrer cette page Web dans Visual Studio (via une macro ou un complément)
  2. Créer une interface client Windows (winforms / wpf) pour appeler le service de recherche et formater les résultats et les afficher sur l’interface utilisateur – vous pouvez également intégrer cet outil client dans Visual Studio via VSPackages ou un complément

Mise à jour : je suis allé dans cette voie, et ça a bien fonctionné. Je voulais juste append à cela.

Liens de référence:

  1. Utilisez cet outil au lieu de bissubscribe.exe
  2. Gestion des événements TFS
  3. Notifications système d’équipe

Si vous installez TFS 2008 PowerTools, vous obtiendrez une action “Rechercher dans le contrôle de code source” dans le menu contextuel de Team Explorer.

TFS2008 Outils élecsortingques

Dans mon cas, écrire un petit utilitaire en C # m’a aidé. Liens qui m’ont aidé – http://pascallaurin42.blogspot.com/2012/05/tfs-queries-searching-in-all-files-of.html

Comment lister les fichiers d’un projet d’équipe en utilisant tfs api?

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.TeamFoundation.Client; using Microsoft.TeamFoundation.VersionControl.Client; using Microsoft.TeamFoundation.Framework.Client; using System.IO; namespace TFSSearch { class Program { static ssortingng[] textPatterns = new[] { "void main(", "exception", "RegisterScript" }; //Text to search static ssortingng[] filePatterns = new[] { "*.cs", "*.xml", "*.config", "*.asp", "*.aspx", "*.js", "*.htm", "*.html", "*.vb", "*.asax", "*.ashx", "*.asmx", "*.ascx", "*.master", "*.svc"}; //file extensions static void Main(ssortingng[] args) { try { var tfs = TfsTeamProjectCollectionFactory .GetTeamProjectCollection(new Uri("http://{tfsserver}:8080/tfs")); tfs.EnsureAuthenticated(); var versionControl = tfs.GetService(); StreamWriter outputFile = new StreamWriter(@"C:\Find.txt"); var allProjs = versionControl.GetAllTeamProjects(true); foreach (var teamProj in allProjs) { foreach (var filePattern in filePatterns) { var items = versionControl.GetItems(teamProj.ServerItem + "/" + filePattern, RecursionType.Full).Items .Where(i => !i.ServerItem.Contains("_ReSharper")); //skipping resharper stuff foreach (var item in items) { List lines = SearchInFile(item); if (lines.Count > 0) { outputFile.WriteLine("FILE:" + item.ServerItem); outputFile.WriteLine(lines.Count.ToSsortingng() + " occurence(s) found."); outputFile.WriteLine(); } foreach (ssortingng line in lines) { outputFile.WriteLine(line); } if (lines.Count > 0) { outputFile.WriteLine(); } } } outputFile.Flush(); } } catch (Exception e) { ssortingng ex = e.Message; Console.WriteLine("!!EXCEPTION: " + e.Message); Console.WriteLine("Continuing... "); } Console.WriteLine("========"); Console.Read(); } // Define other methods and classes here private static List SearchInFile(Item file) { var result = new List(); try { var stream = new StreamReader(file.DownloadFile(), Encoding.Default); var line = stream.ReadLine(); var lineIndex = 0; while (!stream.EndOfStream) { if (textPatterns.Any(p => line.IndexOf(p, SsortingngComparison.OrdinalIgnoreCase) >= 0)) result.Add("=== Line " + lineIndex + ": " + line.Trim()); line = stream.ReadLine(); lineIndex++; } } catch (Exception e) { ssortingng ex = e.Message; Console.WriteLine("!!EXCEPTION: " + e.Message); Console.WriteLine("Continuing... "); } return result; } } } 

Nous avons mis en place une solution pour le contrôle des sources de Team Foundation Server (pas SourceSafe comme vous le mentionnez) similaire à ce que Grant suggère; TF programmé Get, Search Server Express. Cependant, l’IFilter utilisé pour les fichiers C # (texte) ne donnait pas les résultats souhaités. Nous convertissons donc les fichiers source en fichiers .htm. Nous pouvons maintenant append des métadonnées supplémentaires aux fichiers, tels que:

  • Auteur (nous le définissons comme la dernière personne ayant enregistré le fichier)
  • Code couleur (sur notre liste de tâches)
  • Nombre de changements indiquant des problèmes de conception potentiels (sur notre liste de tâches)
  • Intégration avec l’IDE VSTS comme la fonctionnalité SmartSearch de Koders
  • etc.

Nous préférerions toutefois un gestionnaire de protocole pour TFS Source Control et un code source dédié IFilter pour une solution beaucoup plus ciblée.

D’accord,

  1. TFS2008 Power Tools ne possède pas de fonction de recherche de fichiers. “Les outils Rechercher dans le contrôle de code permettent de localiser des fichiers et des dossiers dans le contrôle de source en fonction du statut de l’élément ou d’une expression générique .”

  2. Il existe un programme Windows avec cette fonctionnalité publié sur CodePlex . Je viens de l’installer et de le tester et cela fonctionne bien.

Ceci est maintenant possible à partir de TFS 2015 en utilisant le plugin Code Search . https://marketplace.visualstudio.com/items?itemName=ms.vss-code-search

La recherche est effectuée via l’interface Web et ne nécessite pas de télécharger le code sur votre ordinateur local, ce qui est agréable.

Une autre solution consiste à utiliser “ctrl + shift + F”. Vous pouvez remplacer l’emplacement de recherche par un répertoire local plutôt que par une solution ou un projet. Cela remplacera simplement la recherche de bureau et vous devrez toujours obtenir le dernier code, mais cela vous permettra de restr dans Visual Studio pour effectuer votre recherche.

Ce complément prétend avoir la fonctionnalité que je pense que vous recherchez:

Sidekicks de la Team Foundation

Il n’y a actuellement aucun moyen de le faire, mais il existe une suggestion User Voice pour l’append: http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2037649-implement-indexed- Recherche en texte intégral

Bien que je doute que ce soit aussi simple que de basculer un commutateur, si tous ceux qui ont consulté cette question ont voté pour cela, MS implémenterait probablement quelque chose.

Mise à jour: Il suffit de lire le blog de Brian Harry , qui montre que cette demande est sur leur radar, et la version en ligne de Visual Studio a un support limité pour la recherche où git est utilisé comme vcs: http://blogs.msdn.com/b/ visualstudioalm / archive / 2015/02/13 / annonce-preview-preview-for-visual-studio-online-code-search.aspx . Je pense qu’il est juste de dire que c’est juste une question de temps …

Cette recherche d’un lien de fichier explique comment trouver un fichier. J’ai dû me contenter des conseils pour que ça marche.

  1. cd “C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ Common7 \ IDE”
  2. tf dir “$ / *. sql” / recursive / server: http: // mytfsserver: 8080 / tfs

Dans le cas de la commande cd, j’ai exécuté la commande cd car je cherchais le fichier tf.exe. Il était plus facile de commencer à partir de ce répertoire en ajoutant des passages complets. Maintenant que je comprends comment faire fonctionner ce travail, j’utiliserai le chemin absolu entre guillemets.

Dans le cas de la recherche tf, j’ai démarré à la racine du serveur avec $/ et j’ai cherché tous les fichiers qui se terminaient par sql ie *.sql . Si vous ne voulez pas démarrer à la racine, utilisez plutôt "$/myproject/*.sql" .

Oh! Cela ne résout pas la recherche dans la partie fichier de la question mais ma recherche Google m’a amené ici pour trouver des fichiers parmi d’autres liens.

En supposant que vous ayez Notepad ++ , une fonctionnalité souvent manquée est «Rechercher dans les fichiers», qui est extrêmement rapide et comprend des filtres, des expressions régulières, le remplacement et tous les goodies N ++.