2012-03-26 11 views
28

Esta pregunta es similar a: Find in Files: Search all code in Team Foundation Server Sin embargo, se le preguntó hace 4 años. Estoy pidiendo específicamente sobre TFS 2010 con VS 2010.Código de búsqueda TFS 2010 y VS 2010 en control de código fuente

Ha Microsoft finalmente encontrado el momento de la adición de nuevo la búsqueda de archivos de fragmentos de código como si tuvieran camino de regreso en Visual Source Safe? Si es así, ¿cómo habilitarlo y usarlo?

He intentado agregar las herramientas de poder de Microsoft. Si bien tiene una función de búsqueda, la búsqueda es solo para nombres de archivo e ignora la búsqueda del contenido en los archivos. :(

+0

La respuesta de Grant Holliday de la pregunta de TFS 2008 que usted cita sigue siendo exacta para TFS 2010. Una cosa a tener en cuenta, su cita sobre * "volver a agregar" * sugiere que existió una vez en TFS. Me doy cuenta de que existía una búsqueda (rudimentaria) en VSS, pero quiero señalar específicamente que VSS y TFS son dos productos separados y no tienen linaje compartido. (Es decir que no es el caso que la búsqueda existió alguna vez en TFS y la eliminamos).) –

+1

Como mencioné en mi pregunta, VSS tuvo una gran búsqueda de código que buscará a través de los archivos de código para su consulta (no hay nada que instalar, simplemente viene con él como una característica básica). TFS nunca llegó con él ni MS le permitió obtenerlo como un complemento. El linaje es claro. Este es el producto de control de origen de Microsoft. El hecho de que haya cambiado los nombres no significa que no almacenen código, permiten registros y pagos, y archivos de versión. – DMCS

+0

No * cambió los nombres *. Son productos completamente diferentes. Hay exactamente cero códigos en común. –

Respuesta

26

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 funcionar!

enlaces

MSDN:

TFS Administrators Toolkit for VS 2010

TFS Administrators Toolkit for VS 2012

TFS Administrators Toolkit for VS 2013

+1

para Visual Studion 2013, [TFS Administrators Toolkit para VS 2013] (https://visualstudiogallery.msdn.microsoft.com/33713c5d-31a3-44b3-ae94-3c413e6b21c7) – JohnC

1

No estoy al tanto de cualquier cosa que pueda hacer esto.

El enfoque de almacenamiento de SourceSafe hace 20 años era muy básica, y las bases de datos se limitaron a lo que nosotros ahora consideramos como cantidades "pequeñas" de datos. TFS almacena diferencias compactas entre versiones de archivos, y ya no existe ningún "gran trozo de texto" que cualquiera pueda buscar trivialmente.

Cualquier herramienta de este tipo debería obtener cada versión de cada archivo para reconstruir el original texto que se buscará, lo que afectaría a su servidor durante días o semanas. Agregue la sobrecarga de las pruebas para producir una herramienta robusta, y la posibilidad de que muchas personas realmente lo necesiten, y no es difícil ver por qué puede que nunca vuelva a aparecer. Llegue a la parte superior de la lista de prioridades de MS, especialmente cuando todavía están trabajando para obtener funciones básicas como una ventana de registros pendiente utilizable, herramientas de combinación y, con suerte, el cambio de nombre de los archivos (!) que funcionan para VS11.

Podría argumentarse que con el modelo de automatización, o incluso solo una aplicación de consola llamando a tf.exe, escribir algunas líneas de código para iterar a través de todas las versiones de cada archivo y aplicar un RegEx sería relativamente trivial tarea, si realmente necesita aplicar tal búsqueda.

+0

"y no es difícil ver por qué nunca alcanzará la parte superior de la lista de prioridades de MS, especialmente cuando todavía están trabajando para obtener funciones básicas como una ventana de registros pendientes utilizables, herramientas de combinación y, con suerte, cambio de nombre de los archivos (!) trabajando para VS11 ". - Con una compañía tan grande como Microsoft, se necesita mucha fuerza para cambiar incluso las pequeñas cosas. No es ese pequeño bote de velocidad ágil como lo era antes, ahora es un enorme crucero que requiere mucha energía para que cambie su rumbo. También te di un +1. – DMCS

1

Sé cómo lo hice hace años usando el administrador de versiones de PVCS. Tuve un activador al registrar y agregar archivo. Esto puso en cola un proceso de trabajo que extraería el código fuente y usaría el comando cygwin/unix updatedb 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 haya construido.

Luego tuve un sitio web con una función de búsqueda que llamaba locateb para recuperar los nombres de los archivos que contenían el texto.

TFS tiene suscripciones que pueden invocar a las webserivces.

+0

Lo que ha respondido es una excelente solución. +1 para su información. – DMCS

5

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

De la manera en que lo veo, hay dos opciones viables, pero ambas solo funcionan para la revisión de "punta" del código. La forma más fácil es hacer una "obtención" de toda la fuente, luego usar el comando findstr en una ventana de comandos, o usar algo como Windows Grep para realizar la búsqueda.

O bien, podría hacer lo que hizo uno de nuestros desarrolladores más emprendedores, y usar Lucene para indexar su código, y luego poner un buen front-end alrededor de los resultados. Tenemos esta configuración para obtener nuestra sucursal MAIN y su rama DEV de forma regular, de modo que podamos obtener resultados de búsqueda en tiempo casi real.

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

+0

Tenemos muchos equipos de desarrollo de productos en mi empresa. Tener que descargar y guardar el código de cada uno de ellos almacenados localmente no es viable. Sería mucho más limpio hacer que la búsqueda funcione a través del lugar donde los datos ya están almacenados. Lo que ha respondido son algunas soluciones correctas para el trabajo. +1 para su información. – DMCS

1

En caso de que no desee rodar su propia solución, he trabajado con Krugle for TFS anteriormente (solo lo he probado y evaluado) en una empresa anterior y encontré que es una muy buena solución.

+0

¡Gracias! Esto puede ser algo que propongo a nuestros administradores de TFS. – DMCS

0

me la salida a toda la biblioteca (última revisión) y ejecutar 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 

WHI ch is: realice 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

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

Mi plan es utilizar primero tf dir obtener una lista de archivos, a continuación, utilizar tf view para obtener contenido de los archivos y, finalmente, alimentar a los contenidos Select-String para encontrar la cadena (o expresiones regulares) que estamos buscando.

Puede comenzar con:

tf dir /recursive $/ 

pero esa lista es probablemente va a ser enorme, así que trate de limitar su búsqueda a un pequeño alcance, como:

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

El siguiente paso es Transforme los resultados del paso anterior en un formato que luego podamos ingresar en tf view. Aquí es un script de PowerShell que hace que:

(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 se olvide de cambiar la parte que dice "some string".

En total, se obtiene:

(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 se olvide de reemplazar la parte que dice "some string" con su consulta de búsqueda actual.

Cuestiones relacionadas