Znajdź w plikach: Przeszukaj cały kod na serwerze Team Foundation

Czy istnieje sposób, aby przeszukać najnowszą wersję KAŻDEGO pliku w TFS pod kątem określonego ciągu znaków lub wyrażenia regularnego? To chyba jedyna rzecz, której mi brakuje z Visual Source Safe...

Obecnie wykonuję Get Latest na całej bazie kodowej i używam Windows Search, ale robi się to dość bolesne z ponad 1GB kodu w plikach 75,000.

EDIT : próbowałem wymienionych powertools, ale opcja" Wildcard Search " pojawia się tylko do wyszukiwania nazw plików, a nie zawartość.

UPDATE : zaimplementowaliśmy niestandardową opcję wyszukiwania w istniejącej instalacji MOSS (Search Server).

Author: George Stocker, 2008-09-03

12 answers

Team Foundation Server 2015 (lokalnie) i Visual Studio Team Services (wersja w chmurze) zawierają wbudowaną obsługę przeszukiwania całego kodu i elementów roboczych.

Możesz wykonywać proste wyszukiwanie ciągów, takie jak foo, operacje logiczne, takie jak foo OR bar lub bardziej złożone rzeczy specyficzne dla języka, takie jak class:WebRequest

zrzut ekranu składni filtra wyszukiwania kodu

Możesz przeczytać więcej na ten temat tutaj: https://www.visualstudio.com/en-us/docs/search/overview

 55
Author: Grant Holliday,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-06 07:02:18

Istnieje inne alternatywne rozwiązanie, które wydaje się być bardziej atrakcyjne.

  1. Konfiguracja serwera wyszukiwania-może to być dowolna maszyna/serwer z systemem windows
  2. Setup a TFS notification service* (Bissubscribe) aby uzyskać, usunąć, update files everytime a checkin zdarza się. Jest to więc serwis internetowy, który działa jak słuchacz na TFS serwer i aktualizuje / synchronizuje pliki i foldery na serwerze wyszukiwania. - to znacznie poprawi dokładność (wyszukiwanie na żywo) i uniknie jednorazowe obciążenie robienia okresowych getów
  3. Konfiguracja usługi indeksowania / windows wyszukiwanie zindeksowane na serwerze wyszukiwania do katalogu głównego
  4. wystawić serwis internetowy do powrotu wyniki wyszukiwania

Teraz przy wszystkich powyższych ustawieniach masz kilka opcji dla Klienta:

  1. Skonfiguruj stronę internetową do wywołania usługi wyszukiwania i sformatuj wyniki do wyświetlenia na stronie - możesz również zintegrować tę stronę wewnątrz visual studio (poprzez makro lub dodatek)
  2. Utwórz interfejs klienta windows(winforms / wpf)do wywoływania usługi wyszukiwania i formatowania wyników i wyświetlania ich w interfejsie użytkownika - można również zintegrować to narzędzie w visual studio za pomocą VSPackages lub add-in

Update : Pojechałem tą trasą i działa dobrze. Chciałem tylko dodać do tego.

Odnośniki:

  1. Użyj tego narzędzia zamiast bissubscribe.exe
  2. Obsługa zdarzeń TFS
  3. System Drużynowy Powiadomienia
 12
Author: Vin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-31 02:45:34

Jeśli zainstalujesz TFS 2008 PowerTools, otrzymasz akcję "Znajdź w kontroli źródła" w menu Team Explorer prawym przyciskiem myszy.

TFS2008 Elektronarzędzia

 12
Author: markom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-26 20:46:59

W moim przypadku pisanie małego narzędzia w C# pomogło. Linki, które mi pomogły - http://pascallaurin42.blogspot.com/2012/05/tfs-queries-searching-in-all-files-of.html

Jak wyświetlić listę plików projektu zespołowego przy użyciu interfejsu 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 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
Author: Vijayanand Settin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:29

Stworzyliśmy rozwiązanie do kontroli źródeł serwera Team Foundation (nie SourceSafe, jak wspomniałeś) podobne do tego, co sugeruje Grant; zaplanowane TF Get, Search Server Express. Jednak IFilter używany dla plików C# (tekst) nie dawał pożądanych rezultatów, więc konwertujemy pliki źródłowe na .pliki htm. Możemy teraz dodać dodatkowe metadane do plików takich jak:

  • Autor (definiujemy go jako osobę, która ostatnio sprawdzała w pliku)
  • kodowanie kolorów (na naszej todo-list)
  • Liczba zmian wskazujących potencjalne problemy projektowe (na naszej liście do zrobienia)
  • integracja z funkcją VSTS IDE like Koders SmartSearch
  • itd.

Wolelibyśmy jednak protokolhandler do kontroli źródeł TFS i dedykowany kod źródłowy IFilter dla znacznie bardziej ukierunkowanego rozwiązania.

 5
Author: GertGregers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-21 08:57:25

Okay,

  1. TFS2008 elektronarzędzia do Nie mają funkcję find-in-files. "Narzędzia Find in Source Control umożliwiają zlokalizowanie plików i folderów w source control za pomocą statusu lub wyrażenia wildcard."

  2. Na CodePlex znajduje się program Windows z tą funkcjonalnością. Właśnie zainstalowałem i przetestowałem to i działa dobrze.

 5
Author: abatishchev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-11 13:08:13

Jest to teraz możliwe od TFS 2015 za pomocą wtyczki Code Search. https://marketplace.visualstudio.com/items?itemName=ms.vss-code-search

Wyszukiwanie odbywa się za pośrednictwem interfejsu internetowego i nie wymaga pobierania kodu na lokalną maszynę, co jest miłe.

 5
Author: deadlydog,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-10 20:38:11

Innym rozwiązaniem jest użycie "ctrl + shift + F". Możesz zmienić lokalizację Wyszukiwania na katalog lokalny, a nie rozwiązanie lub projekt. To zajmie tylko miejsce Wyszukiwania na pulpicie i nadal będziesz musiał uzyskać najnowszy kod, ale pozwoli Ci to pozostać w Visual Studio, aby wykonać wyszukiwanie.

 2
Author: Todd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-17 20:48:18

Ten dodatek twierdzi, że ma funkcjonalność, której według mnie szukasz:

Pomocnicy Fundacji Team

 0
Author: Paul G,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-16 20:24:32

Obecnie nie ma możliwości zrobienia tego po wyjęciu z pudełka, ale jest sugestia głosowa użytkownika, aby go dodać: http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2037649-implement-indexed-full-text-search-of-work-items{[2]

Chociaż wątpię, że jest to tak proste, jak przerzucenie przełącznika, jeśli wszyscy, którzy oglądali to pytanie głosowali za nim, MS prawdopodobnie wdrożyłby coś.

Update: wystarczy przeczytać Blog Briana Harry ' ego, który pokazuje tę prośbę jako będąc na ich radarze, a wersja Online Visual Studio ma ograniczone wsparcie dla wyszukiwania, gdzie git jest używany jako vcs: http://blogs.msdn.com/b/visualstudioalm/archive/2015/02/13/announcing-limited-preview-for-visual-studio-online-code-search.aspx myślę, że można powiedzieć, że to tylko kwestia czasu...

 0
Author: jmoreno,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-02 06:47:09

To wyszukiwanie łącza do pliku wyjaśnia, jak znaleźć plik.Musiałem się wygłupiać z radami, żeby to zadziałało.

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

W przypadku polecenia cd, wykonałem polecenie cd, ponieważ szukałem tf.plik exe. Łatwiej było zacząć od tego katalogu dodając cały / align = "left" / Teraz, gdy rozumiem, jak to działa, użyłbym ścieżki absolutnej w cudzysłowach.

W przypadku wyszukiwania tf, zacząłem od katalogu głównego serwera $/ i szukałem wszystkich plików, które zakończyły się sql tj. *.sql. Jeśli nie chcesz zaczynać od katalogu głównego, Użyj "$/myproject/*.sql".

Oh! To nie rozwiązuje wyszukiwania w części pliku pytania, ale moja wyszukiwarka Google przywiozła mnie tutaj, aby znaleźć pliki wśród innych linków.
 0
Author: Greg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-24 01:33:51

Zakładając, że masz Notepad++, często brakowało funkcji "Znajdź w plikach", która jest niezwykle szybka i zawiera filtry, wyrażenia regularne, replace i wszystkie gadżety N++.

 0
Author: smirkingman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-03 10:47:33