Question

Existe-t-il un moyen de rechercher dans la dernière version de chaque fichier dans TFS 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 un Get Latest sur l'ensemble de la base de code et j'utilise Windows Search, mais cela devient assez pénible avec plus de 1 Go de code dans 75 000 fichiers.

MODIFIER:J'ai essayé les outils électriques mentionnés, mais l'option "Recherche générique" semble rechercher uniquement 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.

Était-ce utile?

La solution

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 tous vos codes et éléments de travail.

Vous pouvez effectuer des recherches de chaînes simples 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 ici : https://www.visualstudio.com/en-us/docs/search/overview

Autres conseils

Dans mon cas, l’écriture d’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 à l'aide de 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/}")); // one some servers you also need to add collection path (if it not the default collection)

            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;
    }
}
}

Il existe une autre solution alternative, qui semble plus attractive.

  1. Configurer un serveur de recherche - cela peut être n'importe quelle machine/serveur Windows
  2. Mettre en place un Service de notification TFS*(Bissubscribe) Pour obtenir, supprimer, mettre à jour des fichiers à chaque fois qu'un chèque se produit.Il s'agit donc d'un service Web qui agit comme un écouteur sur le serveur TFS, et met à jour / synchronise les fichiers et dossiers du serveur de recherche.- cela améliorera considérablement la précision (recherche en direct) et évitera la charge ponctuelle de création de requêtes périodiques.
  3. Configurer une recherche indexée sur le service d'indexation / Windows sur le serveur de recherche pour le dossier racine
  4. Exposez un service Web pour retourner les résultats de la recherche

Maintenant, avec toute la configuration ci-dessus, vous disposez de quelques options pour le client :

  1. Configurez une page Web pour appeler le service de recherche et formatez 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éez une interface client Windows (winforms/wpf) pour appeler le service de recherche, 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:J'ai emprunté cette voie et cela a bien fonctionné.Je voulais juste ajouter quelque chose.

Liens de référence :

  1. Utilisez cet outil au lieu de bissubscribe.exe
  2. Gestion des événements TFS
  3. Notifications du 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.

Outils électriques TFS2008

Nous avons mis en place une solution pour Team Foundation Server Source Control (et non SourceSafe comme vous le mentionnez) similaire à ce que suggère Grant ;TF Get planifié, 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 sources en fichiers .htm.Nous pouvons désormais ajouter des métadonnées supplémentaires aux fichiers telles que :

  • Auteur (nous le définissons comme la personne qui a archivé le fichier en dernier lieu)
  • Codage couleur (sur notre liste de tâches)
  • Nombre de modifications indiquant des problèmes de conception potentiels (sur notre liste de tâches)
  • Intégration à l'IDE VSTS comme la fonctionnalité Koders SmartSearch
  • etc.

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

D'accord,

  1. Les outils électriques TFS2008 font pas avoir une fonction de recherche dans les fichiers."Les outils Rechercher dans le contrôle de code source offrent la possibilité de localiser des fichiers et des dossiers dans le contrôle de code source par l'élément statut ou avec un caractère générique expression."

  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 désormais possible à partir de TFS 2015 en utilisant le Code Search brancher. https://marketplace.visualstudio.com/items?itemName=ms.vss-code-search

La recherche s'effectue via l'interface web, et ne nécessite pas de télécharger le code sur votre machine locale, ce qui est bien.

Une autre solution consiste à utiliser "ctrl+shift+F".Vous pouvez modifier l'emplacement de recherche en un répertoire local plutôt qu'en une solution ou un projet.Cela remplacera simplement la recherche sur le bureau et vous aurez toujours besoin d'obtenir le dernier code, mais cela vous permettra de rester dans Visual Studio pour effectuer votre recherche.

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

Acolytes de l’équipe Foundation

Ce lien de recherche d'un fichier explique comment trouver un fichier. J'ai dû consulter les conseils pour que cela fonctionne.

  1. cd "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE"
  2. tf rép "$/*.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 partir de ce répertoire plutôt que d'ajouter le chemin complet.Maintenant que je comprends comment faire fonctionner cela, 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 recherché tous les fichiers qui se terminaient par sql c'est à dire. *.sql.Si vous ne voulez pas commencer à la racine, utilisez "$/myproject/*.sql" plutôt.

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

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

Il n'existe actuellement aucun moyen de le faire directement, mais il existe une suggestion de User Voice pour l'ajouter : http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2037649-implement-indexed-full-text-search-of-work-items

Même si je doute que ce soit aussi simple que d'appuyer sur un interrupteur, si tous ceux qui ont vu cette question votaient pour, MS mettrait probablement en œuvre quelque chose.

Mise à jour:Il suffit de lire Le blog de Brian Harry, qui montre cette requête comme étant sur leur radar, et la version en ligne de Visual Studio offre une prise en charge limitée 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.À partir de là, je pense qu'il est juste de dire que ce n'est qu'une question de temps...

Mise à jour 2 : Il existe désormais une extension fournie par Microsoft,Recherche de codes ce qui permet de rechercher dans le code ainsi que dans les éléments de travail.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top