Buscar en Archivos: Buscar todo el código en Team Foundation Server


¿Hay alguna forma de buscar en la última versión de cada archivo en TFS una cadena o expresión regular específica? Esto es probablemente lo único que echo de menos de Visual Source Safe...

Actualmente realizo un Get Latest en toda la base de código y uso la búsqueda de Windows, pero esto se vuelve bastante doloroso con más de 1 GB de código en 75,000 archivos.

EDITAR : Probamos los powertools mencionados, pero la opción" Búsqueda comodín " aparece para buscar solo nombres de archivo y no contenido.

ACTUALIZACIÓN : Hemos implementado una opción de búsqueda personalizada en una instalación existente de MOSS (Servidor de búsqueda).

Author: George Stocker, 2008-09-03

12 answers

Team Foundation Server 2015 (local) y Visual Studio Team Services (versión en la nube) incluyen soporte integrado para buscar en todo el código y los elementos de trabajo.

Puede hacer búsquedas de cadenas simples como foo, operaciones booleanas como foo OR bar o cosas más complejas específicas del lenguaje como class:WebRequest

captura de pantalla de la sintaxis del filtro de búsqueda de código

Puedes leer más al respecto aquí: 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-06 07:02:18

Hay otra solución alternativa, que parece ser más atractiva.

  1. Configurar un servidor de búsqueda - podría ser cualquier máquina/servidor windows
  2. Configurar un servicio de notificación TFS * (Bissubscribe) para obtener, eliminar, actualizar archivos cada vez que un checkin suceder. Así que este es un servicio web que actúa como un oyente en el TFS servidor, y actualiza / sincroniza los archivos y carpetas en el servidor de búsqueda. - esto mejorará dramáticamente la precisión (búsqueda en vivo), y evitará la carga de una sola vez de hacer periódica consigue
  3. Configurar un servicio de indexación/windows búsqueda indexada en el servidor de Búsqueda para la carpeta raíz
  4. Exponer un servicio web para devolver resultados de búsqueda

Ahora con toda la configuración anterior, tiene algunas opciones para el cliente:

  1. Configure una página web para llamar al servicio de búsqueda y formatee los resultados para mostrarlos en la página web - también puede integrar esta página web dentro de visual studio (a través de una macro o un complemento)
  2. Crear una interfaz de cliente de Windows (winforms / wpf) para llamar al servicio de búsqueda y formatear los resultados y mostrarlos en la interfaz de usuario - también puede integrar esta herramienta de cliente dentro de visual studio a través de VSPackages o add-in

Actualización : Hice esta ruta, y ha estado funcionando muy bien. Sólo quería añadir algo a esto.

Enlaces de referencia:

  1. Utilice esta herramienta en lugar de bissubscribe.exe
  2. Manejo de eventos TFS
  3. Sistema de Equipo Notificaciones
 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-31 02:45:34

Si instala TFS 2008 PowerTools obtendrá una acción "Buscar en el Control de código fuente" en el menú contextual del Team Explorer.

TFS2008 Herramientas eléctricas

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-26 20:46:59

En mi caso, escribir una pequeña utilidad en C# ayudó. Enlaces que me ayudaron - http://pascallaurin42.blogspot.com/2012/05/tfs-queries-searching-in-all-files-of.html

¿Cómo listar archivos de un proyecto de equipo usando la api de 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
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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:29

Hemos configurado una solución para el Control de Código Fuente de Team Foundation Server (no SourceSafe como mencionaste) similar a lo que sugiere Grant; scheduled TF Get, Search Server Express. Sin embargo, el IFilter utilizado para los archivos C# (texto) no estaba dando los resultados que queríamos, por lo que convertimos los archivos fuente a .archivos htm. Ahora podemos agregar metadatos adicionales a los archivos como:

  • Autor (lo definimos como la persona que se registró por última vez en el archivo)
  • Código de color (en nuestro todo-list)
  • Número de cambios que indican posibles problemas de diseño (en nuestra lista de tareas pendientes)
  • Se integra con la función VSTS IDE como Koders SmartSearch
  • etc.

Sin embargo, preferiríamos un protocolhandler para el Control de código fuente TFS, y un IFilter de código fuente dedicado para una solución mucho más específica.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-21 08:57:25

Bien,

  1. TFS2008 Power Tools do no tienen una función de búsqueda en archivos. "Las herramientas Buscar en el control de código fuente proporcionan la capacidad de localizar archivos y carpetas en el control de código fuente por el estado del elemento o con una expresión comodín."

  2. Hay un programa de Windows con esta funcionalidad publicado en CodePlex . Acabo de instalar y probar esto y funciona bien.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-11 13:08:13

Esto ahora es posible a partir de TFS 2015 utilizando el complemento Code Search. https://marketplace.visualstudio.com/items?itemName=ms.vss-code-search

La búsqueda se realiza a través de la interfaz web, y no requiere que descargue el código a su máquina local, lo cual es bueno.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-10 20:38:11

Otra solución es usar "ctrl+shift+F". Puede cambiar la ubicación de búsqueda a un directorio local en lugar de a una solución o proyecto. Esto solo tomará el lugar de la búsqueda en el escritorio y aún necesitará obtener el código más reciente, pero le permitirá permanecer dentro de Visual Studio para realizar su búsqueda.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-12-17 20:48:18

Este complemento afirma tener la funcionalidad que creo que buscas:

Compinches de la Fundación del Equipo

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-16 20:24:32

Actualmente no hay manera de hacer esto fuera de la caja, pero hay una sugerencia de voz del usuario para agregarlo: http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2037649-implement-indexed-full-text-search-of-work-items

Aunque dudo que sea tan simple como pulsar un interruptor, si todos los que han visto esta pregunta votaran a favor, MS probablemente implementaría algo.

Actualización: Acaba de leer El blog de Brian Harry, que muestra esta solicitud como estar en su radar, y la versión en línea de Visual Studio tiene soporte limitado para buscar donde git se utiliza como el vcs: http://blogs.msdn.com/b/visualstudioalm/archive/2015/02/13/announcing-limited-preview-for-visual-studio-online-code-search.aspx. De esto creo que es justo decir que es solo cuestión de tiempo...

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-02 06:47:09

Este enlace de búsqueda de un archivo explica cómo encontrar un archivo. Tuve que perder el tiempo con el consejo para que funcionara.

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

En el caso del comando cd, realicé el comando cd porque estaba buscando el tf.archivo exe. Era más fácil simplemente empezar desde ese directorio versos añadiendo el todo camino. Ahora que entiendo cómo hacer que esto funcione, usaría el camino absoluto entre comillas.

En el caso de la búsqueda tf, comencé en la raíz del servidor con $/ y busqué todos los archivos que terminaban con sql, es decir, *.sql. Si no desea comenzar desde la raíz, use "$/myproject/*.sql" en su lugar.

Oh! Esto no resuelve la parte de búsqueda en archivo de la pregunta, pero mi búsqueda en Google me trajo aquí para encontrar archivos entre otros enlaces.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-24 01:33:51

Suponiendo que tenga Bloc de notas++, una característica a menudo perdida es 'Buscar en archivos', que es extremadamente rápida y viene con filtros, expresiones regulares, reemplazar y todas las ventajas de 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-03 10:47:33