TFS 2010 y VS 2010 buscando código en el control de código fuente


Esta pregunta es similar a: Buscar en Archivos: Buscar todo el código en Team Foundation Server Sin embargo, se hizo hace 4 años. Estoy preguntando específicamente sobre TFS 2010 con VS 2010.

¿Microsoft finalmente logró agregar la búsqueda de archivos para fragmentos de código como lo habían hecho en Visual Source Safe? Si es así, ¿cómo habilitarlo y usarlo?

He intentado agregar Herramientas eléctricas de Microsoft. Si bien tiene una función de búsqueda, el la búsqueda es solo para nombres de archivo e ignora buscar en el contenido de los archivos. :(

Author: Community, 2012-03-27

7 answers

Tuve el mismo problema y encontré este hilo mientras buscaba la solución. Luego descubrí que esta funcionalidad está disponible en un complemento de Visual Studio 2010 llamado 'TFS Administrators Toolkit' en la galería de Visual Studio. Parece que funciona!

Enlaces MSDN:

Conjunto de herramientas de administradores de TFS para VS 2010

Conjunto de herramientas de administradores de TFS para VS 2012

Conjunto de herramientas de administradores de TFS para VS 2013

 26
Author: Craig,
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-19 13:08:39

No hay nada incorporado, y sería difícil hacer esto a nivel de base de datos debido a la forma en que TFS almacena archivos como deltas de versiones anteriores.

Como yo lo veo, hay dos opciones viables, pero ambas solo funcionan para la revisión "tip" del código. La forma más fácil es hacer un " get " de toda su fuente, luego use el comando findstren una ventana de comandos, o use algo como Windows Grep para hacer la búsqueda.

Alternativamente, usted podría hacer lo uno de nuestros desarrolladores más emprendedores lo hizo, y usa Lucene para indexar tu código, luego coloca un buen front-end alrededor de los resultados. Tenemos esto configurado para obtener nuestra rama PRINCIPAL y rama DE DESARROLLO de forma regular, para que podamos obtener resultados de búsqueda casi en tiempo real.

También hay productos como CAST que hacen análisis de impacto, y le permiten hacer un cierto grado de búsqueda, pero en ese punto, usted está mirando a soltar algunas piezas de oro decente para obtener el producto.

 5
Author: Robaticus,
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-03-28 02:20:12

No soy consciente de nada que pueda hacer esto.

El enfoque de almacenamiento SourceSafe de hace 20 años era muy básico, y las bases de datos estaban limitadas a lo que ahora consideraríamos como "pequeñas" cantidades de datos. TFS almacena diferencias compactas entre versiones de archivos, y ya no hay ningún "gran trozo de texto" que cualquiera pueda buscar trivialmente.

Cualquier herramienta de este tipo necesitaría obtener cada versión de cada archivo para reconstruir el texto original a buscar, lo que servidor durante días o semanas. Agregue la sobrecarga de pruebas de producir una herramienta robusta, y la posibilidad de que muchas personas realmente la necesiten, y no es difícil ver por qué nunca puede llegar a la parte superior de la lista de prioridades de MS, especialmente cuando todavía están trabajando en obtener características básicas como una ventana de cheques pendientes utilizables, herramientas de combinación y, con suerte, cambiar el nombre de los archivos(! para VS11.

Se podría argumentar que con el modelo de automatización, o incluso solo una aplicación de consola llamando a tf.exe, escribiendo un unas pocas líneas de código para iterar a través de todas las versiones de cada archivo y aplicar una expresión regular sería una tarea relativamente trivial, si realmente necesita aplicar tal búsqueda.

 1
Author: Jason Williams,
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-03-26 21:58:30

En caso de que no quiera lanzar su propia solución, he trabajado con Krugle para TFS antes (solo probándolo y evaluándolo) en una compañía anterior y encontré que es una muy buena solución.

 1
Author: Edward Thomson,
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-03-30 01:23:05

Sé cómo lo hice hace años usando PVCS Version manager. Tenía un gatillo en el registro y agregar archivo. Esto puso en cola un proceso de trabajo que extraería el código fuente y usaría el comando updatedb de cygwin / unix para crear un índice de todos los archivos. La construcción de la base de datos iría a una base de datos temporal y luego cambiaría la base de datos de lectura súper rápido una vez que se construyó.

Entonces tuve un sitio web con una función de búsqueda que llamó locatedb para recuperar los nombres de los archivos que contiene el texto.

TFS tiene suscripciones que pueden invocar webserivces.

 1
Author: Christopher Painter,
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-03-30 11:24:48

Compruebo toda la biblioteca (Última revisión) y corro este script de Powershell:

C:\Users\username>powershell
Windows PowerShell
Copyright (C) 2013 Microsoft Corporation. All rights reserved.

PS C:\Users\username> cd C:\LocalDevelopment
PS C:\LocalDevelopment> get-childitem -include *.* -rec | select-string -pattern "a string" > a_string.txt

Que es: Hacer una búsqueda recursiva en todos los archivos en c:\LocalDevelopment para "una cadena" (agregue su cadena allí, por supuesto) y envíe los resultados a un archivo de texto.

 0
Author: Bob Probst,
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-07-06 16:32:56

TFS no proporciona esa función de forma inmediata, pero puede usar Powershell para combinar funciones TFS existentes para obtener lo que necesita.

Mi plan es usar primero tf dir obtener una lista de archivos, luego usar tf view para obtener el contenido de los archivos y finalmente alimentar el contenido a Select-String para encontrar la cadena (o regex) que estamos buscando.

Puedes comenzar con:

tf dir /recursive $/

Pero esa lista probablemente va a ser enorme, así que intenta restringir tu búsqueda a un alcance pequeño, como:

tf dir /recursive $/some/path/*.cs

El siguiente paso es transformar los resultados del paso anterior en un formato que luego podamos alimentar en tf view. Aquí hay un script de powershell que lo hace:

(tf dir /recursive $/) -join "+" -replace ":", "" -replace "\+\+", "`n" -split "`n" | %{ $arr = $_ -split "\+"; $arr | select -Skip 1 | %{ $arr[0] + '/' + $_ } }

Ahora vamos a canalizar la lista en tf view y luego Select-String:

... | %{ $file = $_ ; if (tf view "$file" /console | Select-String "some string") { Write-Host $file } }

No olvides cambiar la parte que dice: "some string".

En conjunto, obtienes:

(tf dir /recursive $/) -join "+" -replace ":", "" -replace "\+\+", "`n" -split "`n" | %{ $arr = $_ -split "\+"; $arr | select -Skip 1 | %{ $arr[0] + '/' + $_ } } | %{ $file = $_ ; if (tf view "$file" /console | Select-String "some string") { Write-Host $file } }

Ah, y no olvides reemplazar la parte que dice "some string" con tu consulta de búsqueda real.

 0
Author: Saintali,
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-11-21 01:25:59