Rechercher dans les fichiers: Rechercher tout le code dans le serveur de la fondation de L'équipe

y a-t-il un moyen de rechercher la dernière version de chaque fichier dans TFS pour une chaîne ou un regex spécifique? C'est probablement la seule chose qui me manque de Visual Source Safe...

actuellement, j'effectue une mise à jour sur l'ensemble de la base de codes et d'utiliser la recherche Windows, mais cela devient assez douloureux avec plus de 1 Go de code dans 75 000 fichiers.

EDIT rechercher des noms de fichiers et non des contenus.

UPDATE : nous avons implémenté une option de recherche personnalisée dans une installation MOSS (Search Server) existante.

95
demandé sur George Stocker 2008-09-03 05:49:04

12 réponses

Les services

Team Foundation Server 2015 (sur place) et Visual Studio Team Services (version cloud) incluent un support intégré pour la recherche de tous vos codes et de vos tâches.

vous pouvez faire des recherches simples de chaîne de caractères comme foo , des opérations booléennes comme foo OR bar ou des choses plus complexes spécifiques à la langue comme class:WebRequest

screenshot of code search filter syntax

vous pouvez en savoir plus sur it ici: https://www.visualstudio.com/en-us/docs/search/overview

55
répondu Grant Holliday 2017-09-06 07:02:18

il y a une autre solution alternative, qui semble plus attrayante.

  1. Configuration d'un serveur de recherche - pourrait être n'importe quelle machine windows/serveur
  2. Setup TSF service de notification* (Bissubscribe) pour obtenir, supprimer, mettre à jour les fichiers à chaque fois qu'une checkin arriver. Donc, c'est un service web qui agit comme un auditeur sur le TFS serveur et les mises à jour/synchronise les fichiers et des dossiers sur le serveur de Recherche. - ce permettra d'améliorer considérablement la précision (recherche en direct), et d'éviter la charge unique de faire périodiques obtient
  3. configurer un service d'indexation/windows recherche indexée sur le serveur de recherche pour le dossier racine
  4. exposer un service web à retourner résultats de la recherche

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

  1. configurer une page web pour appeler la recherche service et formater les résultats à afficher sur la page Web - vous pouvez également intégrer cette page Web à l'intérieur de visual studio (à travers une macro ou un add-in)
  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'UI - vous pouvez également intégrer cet outil client à l'intérieur de visual studio via VSPackages ou add-in

mise à Jour : Je l'ai fait aller dans cette voie, et il a travaillé joliment. Voulais juste ajouter à cela.

liens de référence:

  1. utilisez cet outil au lieu de bissubscribe.exe
  2. gestion des TFS événements
  3. De L'Équipe Système De Notifications
12
répondu Vin 2009-10-31 02:45:34

si vous installez TFS 2008 PowerTools, vous obtiendrez une action" Find in Source Control " dans le menu de clic droit de L'Explorateur D'équipe.

TFS2008 Outils électriques

12
répondu markom 2012-09-26 20:46:59

dans mon cas, en écrivant un petit utilitaire en C# helped. Les liens qui m'ont aidé - http://pascallaurin42.blogspot.com/2012/05/tfs-queries-searching-in-all-files-of.html

comment répertorier les fichiers d'un projet d'équipe en utilisant l'api tfs?

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 string[] textPatterns = new[] { "void main(", "exception", "RegisterScript" };  //Text to search
    static string[] filePatterns = new[] { "*.cs", "*.xml", "*.config", "*.asp", "*.aspx", "*.js", "*.htm", "*.html", 
                                           "*.vb", "*.asax", "*.ashx", "*.asmx", "*.ascx", "*.master", "*.svc"}; //file extensions

    static void Main(string[] args)
    {
        try
        {
            var tfs = TfsTeamProjectCollectionFactory
             .GetTeamProjectCollection(new Uri("http://{tfsserver}:8080/tfs"));

            tfs.EnsureAuthenticated();

            var versionControl = tfs.GetService<VersionControlServer>();


            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<string> lines = SearchInFile(item);
                        if (lines.Count > 0)
                        {
                            outputFile.WriteLine("FILE:" + item.ServerItem);
                            outputFile.WriteLine(lines.Count.ToString() + " occurence(s) found.");
                            outputFile.WriteLine();
                        }
                        foreach (string line in lines)
                        {
                            outputFile.WriteLine(line);
                        }
                        if (lines.Count > 0)
                        {
                            outputFile.WriteLine();
                        }
                    }
                }
                outputFile.Flush();
            }
        }
        catch (Exception e)
        {
            string ex = e.Message;
            Console.WriteLine("!!EXCEPTION: " + e.Message);
            Console.WriteLine("Continuing... ");
        }
        Console.WriteLine("========");
        Console.Read();
    }

    // Define other methods and classes here
    private static List<string> SearchInFile(Item file)
    {
        var result = new List<string>();

        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, StringComparison.OrdinalIgnoreCase) >= 0))
                    result.Add("=== Line " + lineIndex + ": " + line.Trim());

                line = stream.ReadLine();
                lineIndex++;
            }
        }
        catch (Exception e)
        {
            string ex = e.Message;
            Console.WriteLine("!!EXCEPTION: " + e.Message);
            Console.WriteLine("Continuing... ");
        }

        return result;
    }
}
}
9
répondu Vijayanand Settin 2017-05-23 12:10:29

nous avons mis en place une solution pour le contrôle à la Source du serveur de la fondation de L'équipe (pas SourceSafe comme vous le mentionnez) similaire à ce que Grant suggère; programmée TF Get, Search Server Express. Cependant L'IFilter utilisé pour C # files (text) ne donnait pas les résultats que nous voulions, donc nous convertissons les fichiers source en .les fichiers htm. Nous pouvons maintenant ajouter des méta-données pour les fichiers tels que:

  • auteur (nous le définissons comme la personne qui a vérifié la dernière fois dans le fichier)
  • "151930920 codage de Couleur" (sur notre todo-list)
  • nombre de changements indiquant des problèmes potentiels de conception (sur notre liste des choses à faire)
  • intégrer à la fonction VSTS IDE like Koders SmartSearch
  • etc.

nous préférerions toutefois un protocole handler pour le contrôle des sources TFS, et un code source dédié IFilter pour une solution beaucoup plus ciblée.

5
répondu GertGregers 2008-09-21 08:57:25

OK,

  1. TFS2008 les Outils électriques ne pas ont un trouver-dans-fichiers de fonction. "La recherche dans les outils de contrôle Source fournissent la capacité de localiser des fichiers et des dossiers dans le contrôle source par l'article statut ou avec une Joker expression."

  2. Il ya un programme Windows avec cette fonctionnalité publié sur CodePlex . J'ai juste installé et testé et ça marche bien.

5
répondu abatishchev 2011-05-11 13:08:13

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

la recherche se fait via l'interface web, et ne vous oblige pas à télécharger le code sur votre machine locale qui est agréable.

5
répondu deadlydog 2016-02-10 20:38:11

une autre solution consiste à utiliser"ctrl+shift+F". Vous pouvez changer l'emplacement de recherche à un répertoire local plutôt qu'à une solution ou un projet. Cela prendra juste la place de la recherche de bureau et vous aurez toujours besoin d'obtenir le dernier code, mais il vous permettra de rester dans Visual Studio pour faire votre recherche.

2
répondu Todd 2008-12-17 20:48:18

Ce complément prétend avoir la fonctionnalité que je crois que vous chercher:

De L'Équipe De La Fondation Sidekicks

0
répondu Paul G 2008-10-16 20:24:32

il n'y a actuellement aucun moyen de le faire hors de la boîte, mais il y a une suggestion de voix D'utilisateur pour l'ajouter: http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2037649-implement-indexed-full-text-search-of-work-items

bien que je doute qu'il soit aussi simple que d'appuyer sur un interrupteur, si tous ceux qui ont vu cette question ont voté pour elle, MS serait probablement mettre en œuvre quelque chose.

mise à jour: juste lire Brian Harry's blog , qui montre cette demande comme étant sur leur radar, et la version en ligne de Visual Studio a un soutien limité pour la recherche où git est utilisé comme vcs: http://blogs.msdn.com/b/visualstudioalm/archive/2015/02/13/announcing-limited-preview-for-visual-studio-online-code-search.aspx . Je pense qu'il est juste de dire que ce n'est qu'une question de temps...

0
répondu jmoreno 2015-10-02 06:47:09

Cette recherche d'un lien vers le fichier explique comment rechercher un fichier. j'ai dû me faufiler avec les conseils pour que ça marche.

  1. cd "C:\Program fichiers (x86)\Microsoft Visual Studio 12.0\Common7\IDE "
  2. tf dir"$/*.sql" /récursif /serveur: http://mytfsserver:8080/tfs

dans le cas de la commande cd, j'ai exécuté la commande cd parce que j'étais la recherche de la tf.EXE. Il était plus facile de simplement commencer à partir de ce répertoire versets en ajoutant le chemin entier. Maintenant que je sais comment faire pour que ça marche, j'utiliserais le chemin absolu entre guillemets.

dans le cas de la recherche tf, j'ai commencé à la racine du serveur avec $/ et j'ai cherché tous les fichiers qui se terminaient par sql i.e. *.sql . Si vous ne voulez pas commencer à la racine, utilisez "$/myproject/*.sql" à la place.

Oh! Ce n'est pas résoudre la recherche dans le fichier partie de la question, mais ma recherche Google m'a amené ici pour trouver des fichiers entre autres liens.

0
répondu Greg 2016-09-24 01:33:51

en supposant que vous avez Notepad++ , une fonctionnalité souvent manquée est 'Find in files', qui est extrêmement rapide et est livré avec des filtres, des expressions régulières, remplacer et tous les goodies N++.

0
répondu smirkingman 2016-11-03 10:47:33