Pergunta

Existe uma maneira de procurar a versão mais recente de cada arquivo no TFS para uma cadeia de caracteres específica ou regex?Esta é provavelmente a única coisa que sinto falta do Visual Source Safe...

Atualmente eu executar um Get Latest em toda a base de código e use a Pesquisa do Windows, mas isto é muito doloroso, com mais de 1GB do código de 75.000 arquivos.

EDITAR:Tentei o powertools mencionado, mas a "Pesquisa de Curinga" opção aparece apenas para pesquisar nomes de arquivos e não o conteúdo.

ATUALIZAÇÃO:Implementamos uma pesquisa personalizada na opção existente MOSS (Search Server) de instalação.

Foi útil?

Solução

O Team Foundation Server 2015 (no local) e o Visual Studio Team Services (nuvem versão) inclui suporte interno para a pesquisa em todos o seu código e itens de trabalho.

Você pode fazer de cadeia de caracteres simples pesquisas como foo, operações booleanas, como foo OR bar ou uma linguagem mais complexa-coisas específicas, como class:WebRequest

screenshot of code search filter syntax

Você pode ler mais sobre isso aqui: https://www.visualstudio.com/en-us/docs/search/overview

Outras dicas

No meu caso, escrever um pequeno utilitário em C# ajudou.Links que me ajudaram - http://pascallaurin42.blogspot.com/2012/05/tfs-queries-searching-in-all-files-of.html

Como listar os arquivos de um projeto de equipe usando o 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/}")); // 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;
    }
}
}

Não há outra solução alternativa, que parece ser mais atraente.

  1. Configuração de um servidor de pesquisa - pode ser qualquer máquina windows/server
  2. A instalação de um TFS serviço de notificação* (Bissubscribe) para obter, excluir, arquivos de atualização sempre que um checkin acontece.Portanto, este é um serviço web que age como um ouvinte no TFS servidor de atualizações e/sincroniza os arquivos e pastas no Search server.- isto irá melhorar drasticamente a precisão (live search), e evitar o tempo de carga de pagamentos periódicos de receber o
  3. A configuração de um serviço de indexação/windows busca indexada no servidor de Pesquisa para a pasta raiz
  4. Expor um serviço da web para retornar resultados da pesquisa

Agora, com toda a configuração acima, você tem algumas opções para o cliente:

  1. Configuração de uma página da web para chamar o serviço de pesquisa e formatar os resultados para mostrar a página da web, você também pode integrar esta página da web dentro do visual studio (através de uma macro ou um add-in)
  2. Criar um cliente de windows interface(winforms/wpf) para chamar o serviço de pesquisa e formatar os resultados e mostrar-lhes sobre a INTERFACE do usuário, você também pode integrar esta ferramenta de cliente dentro do visual studio através de VSPackages ou add-in

Atualização:Eu fiz ir por esse caminho, e ele tem funcionado muito bem.Só queria acrescentar a este.

Links de referência:

  1. Use essa ferramenta bissubscribe.exe
  2. Tratamento de TFS eventos
  3. Equipe De Notificações Do Sistema

Se você instalar o TFS 2008 PowerTools você vai ter um "Encontrar no Controle de Origem" ação no Team Explorer menu do botão direito.

TFS2008 Ferramentas de Poder

Nós estabelecemos uma solução para o Team Foundation Server de Controle de Origem (não SourceSafe como você mencionou), semelhante ao que Conceder sugere;agendada TF Obter, o Search Server Express.No entanto, o IFilter usado para C# (arquivos de texto) não estava dando os resultados que queríamos, então nós converter arquivos de origem .arquivos htm.Podemos agora adicionar meta-dados, arquivos, tais como:

  • Autor (nós defini-la como a pessoa que o último check-in o arquivo)
  • A codificação de cores (no nosso todo-lista)
  • Número de alterações, indicando o potencial de problemas de design (na nossa todo list)
  • Integrar-se com os VSTS IDE como Koders SmartSearch recurso
  • etc.

Nós, no entanto prefere um protocolhandler para o TFS Controle de Origem, e um dedicado código-fonte IFilter para um muito mais direcionada solução.

Ok,

  1. TFS2008 Ferramentas de Poder fazer não têm uma localização na função de arquivos."O Encontrar na Origem de ferramentas de Controle de fornecer a capacidade de localizar arquivos e pastas no controle de origem do item estado ou com um curinga expressão."

  2. Há um programa do Windows com esta funcionalidade, publicado no CodePlex.Eu só instalei e testei isso e funciona muito bem.

Agora isso é possível, como de TFS 2015 usando o Code Search plugin. https://marketplace.visualstudio.com/items?itemName=ms.vss-code-search

A pesquisa é feita através da interface web, e não requer que você baixe o código para sua máquina local que é bom.

Outra solução é usar o "ctrl+shift+F".Você pode alterar o local da pesquisa para um diretório local em vez de uma solução ou projeto.Isso só vai tomar o lugar da pesquisa da área de trabalho e você ainda vai precisar para obter o código mais recente, mas ele permitirá que você permaneça dentro do Visual Studio para fazer sua pesquisa.

Este suplemento afirma ter a funcionalidade que eu acredito que você procura:

O Team Foundation Companheiros

Esta busca por um arquivo de link explica como localizar um arquivo. Eu tive que experimente com os conselhos para fazer o trabalho.

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

No caso de o comando cd, eu executei o comando cd porque eu estava olhando para o tf.exe arquivo.Era mais fácil começar do que diretório versos adicionar o caminho completo.Agora que eu entendo como fazer este trabalho, eu poderia usar o caminho absoluto entre aspas.

No caso da tf de pesquisa, eu comecei na raiz do servidor com $/ e eu procurei por todos os arquivos que terminam com a sql i.e. *.sql.Se você não deseja iniciar na raiz e, em seguida, usar "$/myproject/*.sql" em vez disso.

Oh!Isso não resolver a pesquisa no arquivo a uma parte da pergunta, mas minha busca Google me trouxe até aqui para encontrar arquivos entre outros links.

Supondo que você tenha O Notepad++, muitas vezes de uma perdida funcionalidade "Find in files', o que é extremamente rápido e vem com filtros, expressões regulares, substituir e todos os N++ guloseimas.

Não há atualmente nenhuma maneira de fazer isso fora da caixa, mas não é um Usuário de Voz sugestão para adicioná-lo: http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2037649-implement-indexed-full-text-search-of-work-items

Embora eu duvide que ele é tão simples como apertar um interruptor, se todos que tem visto esta pergunta votaram para ele, o MS teria provavelmente implementar algo.

Atualização:Apenas leitura Brian Harry blog, o que mostra este pedido como sendo no radar, e a versão Online do Visual Studio possui suporte limitado para procurar onde o git é usado como vcs: http://blogs.msdn.com/b/visualstudioalm/archive/2015/02/13/announcing-limited-preview-for-visual-studio-online-code-search.aspx.A partir deste eu acho que é justo dizer que é apenas uma questão de tempo...

Atualização 2: Há agora um Microsoft fornecido extensão,Pesquisa De Código que permite a pesquisa em código, bem como em itens de trabalho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top