Frage

Gibt es eine Möglichkeit, die neueste Version jeder Datei in TFS nach einer bestimmten Zeichenfolge oder Regex zu durchsuchen?Das ist wahrscheinlich das Einzige, was ich an Visual Source Safe vermisse ...

Derzeit führe ich einen „Get Latest“-Vorgang für die gesamte Codebasis durch und verwende die Windows-Suche, aber bei über 1 GB Code in 75.000 Dateien wird das ziemlich mühsam.

BEARBEITEN:Ich habe die genannten Powertools ausprobiert, aber die Option „Wildcard-Suche“ scheint nur nach Dateinamen und nicht nach Inhalten zu suchen.

AKTUALISIEREN:Wir haben eine benutzerdefinierte Suchoption in einer bestehenden MOSS-Installation (Search Server) implementiert.

War es hilfreich?

Lösung

Team Foundation Server 2015 (lokal) und Visual Studio Team Services (Cloud-Version) bieten integrierte Unterstützung für die Suche in Ihrem gesamten Code und Ihren Arbeitselementen.

Sie können einfache Zeichenfolgensuchen wie durchführen foo, boolesche Operationen wie foo OR bar oder komplexere sprachspezifische Dinge wie class:WebRequest

screenshot of code search filter syntax

Mehr dazu können Sie hier lesen: https://www.visualstudio.com/en-us/docs/search/overview

Andere Tipps

In meinem Fall hat es geholfen, ein kleines Dienstprogramm in C# zu schreiben.Links, die mir geholfen haben -http://pascallaurin42.blogspot.com/2012/05/tfs-queries-searching-in-all-files-of.html

Wie liste ich Dateien eines Teamprojekts mithilfe der TFS-API auf?

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

Es gibt eine andere alternative Lösung, die attraktiver zu sein scheint.

  1. Richten Sie einen Suchserver ein – es kann sich um einen beliebigen Windows-Computer/Server handeln
  2. Einrichten a TFS-Benachrichtigungsdienst*(Bissubscribe) Um jedes Mal, wenn ein Checkin stattfindet, Dateien zu erhalten, zu löschen, zu aktualisieren.Dies ist also ein Webdienst, der wie ein Hörer auf dem TFS -Server wirkt und die Dateien und Ordner auf dem Suchserver aktualisiert/synchronisiert.- Dadurch wird die Genauigkeit (Live-Suche) erheblich verbessert und die einmalige Belastung durch regelmäßige Abrufe vermieden
  3. Richten Sie auf dem Suchserver eine Indexierungsdienste/Windows -Index gesucht nach dem Stammordner
  4. Stellen Sie einen Webdienst auf, um Suchergebnisse zurückzusetzen

Nach der oben genannten Einrichtung stehen Ihnen nun einige Optionen für den Client zur Verfügung:

  1. Richten Sie eine Webseite ein, um den Suchdienst aufzurufen und die Ergebnisse so zu formatieren, dass sie auf der Webseite angezeigt werden. Sie können diese Webseite auch in Visual Studio integrieren (über ein Makro oder ein Add-In).
  2. Erstellen Sie eine Windows-Client-Schnittstelle (winforms/wpf), um den Suchdienst aufzurufen, die Ergebnisse zu formatieren und auf der Benutzeroberfläche anzuzeigen. Sie können dieses Client-Tool auch über VSPackages oder ein Add-In in Visual Studio integrieren

Aktualisieren:Ich bin diesen Weg gegangen und er hat gut funktioniert.Ich wollte das nur ergänzen.

Referenzlinks:

  1. Verwenden Sie dieses Tool anstelle von bissubscribe.exe
  2. Umgang mit TFS-Ereignissen
  3. Team-Systembenachrichtigungen

Wenn Sie TFS 2008 PowerTools installieren, wird im Team Explorer-Rechtsklickmenü die Aktion „In Quellcodeverwaltung suchen“ angezeigt.

TFS2008 Elektrowerkzeuge

Wir haben eine Lösung für die Team Foundation Server-Quellcodeverwaltung (nicht SourceSafe, wie Sie erwähnen) eingerichtet, die dem ähnelt, was Grant vorschlägt.geplanter TF Get, Search Server Express.Allerdings lieferte der für C#-Dateien (Text) verwendete IFilter nicht die gewünschten Ergebnisse, daher konvertieren wir Quelldateien in .htm-Dateien.Wir können den Dateien jetzt zusätzliche Metadaten hinzufügen, wie zum Beispiel:

  • Autor (wir definieren ihn als die Person, die die Datei zuletzt eingecheckt hat)
  • Farbcodierung (auf unserer Todo-Liste)
  • Anzahl der Änderungen, die auf potenzielle Designprobleme hinweisen (auf unserer Todo-Liste)
  • Integrieren Sie die VSTS-IDE wie die SmartSearch-Funktion von Koder
  • usw.

Wir würden jedoch einen Protokollhandler für die TFS-Quellcodeverwaltung und einen dedizierten Quellcode-IFilter für eine viel gezieltere Lösung bevorzugen.

Okay,

  1. TFS2008 Power Tools tun dies nicht verfügen über eine Funktion zum Suchen in Dateien.„Die Tools zum Suchen in der Quellcodeverwaltung bieten die Möglichkeit, Dateien und Ordner in der Quellcodeverwaltung anhand der Elemente zu finden Status oder mit einem Platzhalter Ausdruck."

  2. Es gibt ein Windows-Programm mit dieser Funktionalität, das unter veröffentlicht wurde CodePlex.Ich habe es gerade installiert und getestet und es funktioniert gut.

Dies ist ab TFS 2015 nun mit dem möglich Code Search Plugin. https://marketplace.visualstudio.com/items?itemName=ms.vss-code-search

Die Suche erfolgt über die Weboberfläche und erfordert nicht, dass Sie den Code auf Ihren lokalen Computer herunterladen, was sehr praktisch ist.

Eine andere Lösung ist die Verwendung von „Strg+Umschalt+F“.Sie können den Suchspeicherort in ein lokales Verzeichnis statt in eine Projektmappe oder ein Projekt ändern.Dies ersetzt lediglich die Desktop-Suche und Sie müssen immer noch den neuesten Code abrufen, können aber für die Suche in Visual Studio bleiben.

Dieses Add-in behauptet, über die Funktionalität zu verfügen, die Sie meiner Meinung nach suchen:

Team Foundation Sidekicks

Dieser Link zur Suche nach einer Datei erklärt, wie Sie eine Datei finden. Ich musste mit dem Rat herumspielen, damit es funktionierte.

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

Im Fall des cd-Befehls habe ich den cd-Befehl ausgeführt, weil ich nach der Datei tf.exe gesucht habe.Es war einfacher, einfach von diesem Verzeichnis aus zu beginnen, als den gesamten Pfad hinzuzufügen.Nachdem ich nun verstanden habe, wie das funktioniert, würde ich den absoluten Pfad in Anführungszeichen verwenden.

Im Falle der TF-Suche habe ich im Stammverzeichnis des Servers mit begonnen $/ und ich habe nach allen Dateien gesucht, die mit endeten sql d.h. *.sql.Wenn Sie nicht im Stammverzeichnis beginnen möchten, verwenden Sie "$/myproject/*.sql" stattdessen.

Oh!Dies löst nicht den Teil der Frage mit der Suche in Dateien, aber meine Google-Suche hat mich hierher geführt, um neben anderen Links auch Dateien zu finden.

Vorausgesetzt, Sie haben es Notepad++, Eine oft übersehene Funktion ist „In Dateien suchen“, die extrem schnell ist und Filter, reguläre Ausdrücke, Ersetzen und alle N++-Extras enthält.

Derzeit gibt es keine Möglichkeit, dies sofort zu tun, aber es gibt einen Vorschlag von User Voice, es hinzuzufügen: http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2037649-implement-indexed-full-text-search-of-work-items

Obwohl ich bezweifle, dass es so einfach ist, einen Schalter umzulegen, würde MS wahrscheinlich etwas umsetzen, wenn jeder, der diese Frage gesehen hat, dafür stimmen würde.

Aktualisieren:Gerade gelesen Brian Harrys Blog, was zeigt, dass diese Anfrage auf ihrem Radar ist, und die Online-Version von Visual Studio bietet eingeschränkte Unterstützung für die Suche, bei der Git als VCS verwendet wird: http://blogs.msdn.com/b/visualstudioalm/archive/2015/02/13/anncreasing-limited-preview-for-visual-studio-online-code-search.aspx.Von daher denke ich, dass man mit Fug und Recht sagen kann, dass es nur eine Frage der Zeit ist ...

Update 2: Es gibt jetzt eine von Microsoft bereitgestellte Erweiterung,Codesuche Dies ermöglicht die Suche sowohl im Code als auch in Arbeitselementen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top