2012-03-26 6 views
28

Этот вопрос похож на: Find in Files: Search all code in Team Foundation Server Однако было задано 4 года назад. Я спрашиваю конкретно о TFS 2010 с VS 2010.TFS 2010 и код поиска VS 2010 в контроле источника

ли Microsoft наконец-то удосужился добавления назад в поиск файлов для фрагментов кода, как они были еще в Visual Source Safe? Если да, как включить его и использовать?

Я попытался добавить в Power Tools от Microsoft. Хотя у него есть функция поиска, поиск относится только к именам файлов и игнорирует просмотр содержимого в файлах. :(

+0

Ответ Grant Holliday на вопрос TFS 2008, который вы цитируете, по-прежнему является точным для TFS 2010. Отметим, что ваша цитата о «добавлении назад» * предполагает, что она существовала один раз в TFS. Я понимаю, что в VSS существовал (рудиментарный) поиск, но я хочу конкретно указать, что VSS и TFS являются двумя отдельными продуктами и не имеют общего родословного. (То есть, это не тот случай, когда один раз существовал поиск в TFS, и мы его удалили.) –

+1

Как указывалось в моем вопросе, у VSS был отличный поиск кода, который будет искать через файлы кода для вашего запроса (ничего не устанавливать, он просто появился с ним как основная функция). TFS никогда не приходил с этим, и MS не позволяла вам использовать его в качестве дополнения. Линия понятна. Это продукт управления Microsoft. Просто потому, что он изменил имена, это не значит, что они не хранят код, не позволяют проверить и проверить, и файлы версий. – DMCS

+0

Это не * изменение имен *. Это совершенно разные продукты. Существует ровно нулевой код. –

ответ

26

У меня была такая же проблема, и я нашел эту нить, ища решение. Затем я обнаружил, что эта функциональность доступна в надстройке Visual Studio 2010 под названием «TFS Administrators Toolkit» в галерее Visual Studio. Кажется, это сработало!

MSDN ссылки:

TFS Administrators Toolkit for VS 2010

TFS Administrators Toolkit for VS 2012

TFS Administrators Toolkit for VS 2013

+1

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

1

Я не знает ничего, что будет делать это.

подход хранения SourceSafe 20 лет назад был очень простым, и базы данных были ограничены тем, что мы теперь рассматривают как «крошечные» суммы данных TFS сохраняет компактные различия между версиями файлов, и больше нет «большого большого куска текста», который любой может обычным образом искать.

Любой такой инструмент должен получить каждую версию каждого файла для восстановления оригинала текст, который нужно искать, который задержит ваш сервер в течение нескольких дней или недель. Добавьте накладные расходы на тестирование для создания надежного инструмента и возможность того, что многие люди действительно нуждаются в нем, и нетрудно понять, почему он никогда не может вернуться в верхней части списка приоритетов MS, особенно когда они все еще работают над получением основных функций, таких как удобное окно ожидающих проверок, инструменты слияния и, надеюсь, переименование файлов (!), работающих на VS11.

Можно утверждать, что с помощью модели автоматизации или даже просто консольного приложения, вызывающего tf.exe, для написания нескольких строк кода для повторения всех версий каждого файла и применения RegEx будет относительно тривиально если вам действительно нужно применить такой поиск.

+0

", и нетрудно понять, почему он, возможно, никогда не достигнет вершины списка приоритетов MS - особенно когда они все еще работают над получением основных функций, таких как удобное окно ожидающих проверки, инструменты слияния и, надеюсь, переименование файлов (!) для VS11 ». - С компанией, такой же большой, как Microsoft, требуется немалая сила, чтобы изменить даже небольшие вещи. Это не та маленькая скоростная лодка, как когда-то, теперь это огромный круиз-лайнер, который требует много энергии, чтобы заставить его изменить направление. Я также дал вам +1. – DMCS

1

Я знаю, как я это делал много лет назад, используя диспетчер версий PVCS. У меня был триггер по проверке и добавлен архив. Это поставило в очередь рабочий процесс, который вытащил бы исходный код и использовал команду cygwin/unix updatedb для создания индекса всех файлов. Здание базы данных перейдет в временную базу данных, а затем быстро заменит прочитанную базу данных сразу после ее создания.

Тогда у меня был веб-сайт с функцией поиска, который вызывал localb, чтобы отменить имена файлов, содержащих текст.

TFS имеет подписки, которые могут вызывать webserivces.

+0

На что вы ответили, это отличная работа. +1 для вашей информации. – DMCS

5

Нет ничего встроенного, и было бы сложно сделать это на уровне базы данных из-за того, что TFS хранит файлы как дельта из предыдущих версий.

Способ, которым я его вижу, существует два жизнеспособных варианта, но оба они работают только для «подсказки» пересмотра кода. Самый простой способ - «получить» весь ваш источник, а затем использовать команду findstr в командном окне или использовать что-то вроде Windows Grep для выполнения поиска.

В качестве альтернативы вы могли бы сделать то, что сделал один из наших более предприимчивых разработчиков, и использовать Lucene для индексации вашего кода, а затем положите внешний интерфейс вокруг результатов. У нас есть эта настройка для регулярного получения нашей основной ветки и ветви DEV, поэтому мы можем получить результаты поиска в режиме реального времени.

Есть также такие продукты, как CAST, которые влияют на анализ, и позволяют вам выполнять определенную степень поиска, но в этот момент вы ищете возможность поместить некоторые приличные золотые кусочки, чтобы получить продукт.

+0

У нас в моей компании много команд по разработке продуктов. Чтобы загрузить и сохранить код из каждого из них, хранящихся в локальной сети, не является жизнеспособным. Было бы намного проще проводить поиск по месту, где данные уже хранятся. На то, что вы ответили, - это отличные исправления. +1 для вашей информации. – DMCS

1

В случае, если вы не хотите откатывать свое собственное решение, я ранее работал с Krugle for TFS (только тестировал и оценивал его) в предыдущей компании и нашел, что это очень хорошее решение.

+0

Спасибо! Это может быть что-то, что я предлагаю нашим администраторам TFS. – DMCS

0

Я проверить всю библиотеку (последняя редакция) и запустить этот скрипт 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: Сделайте рекурсивный поиск по всем файлам в c: \ LocalDevelopment для «строки» (добавьте туда свою строку, конечно) и выведите результаты в текстовый файл.

0

TFS не предоставляет эту функцию из коробки, но вы можете использовать Powershell для объединения существующих функций TFS, чтобы получить то, что вам нужно.

Мой план заключается в первом использовании tf dir получить список файлов, а затем использовать tf view, чтобы получить файлы содержимого и, наконец, кормить его содержимое в Select-String найти строку (или регулярное выражение), которое мы ищем.

Вы можете начать с:

tf dir /recursive $/ 

, но этот список, вероятно, будет огромным, поэтому постарайтесь ограничить поиск небольшого объема, как:

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

Следующий шаг заключается в преобразуйте результаты предыдущего шага в формат, который мы затем можем передать в tf view. Вот скрипт, который PowerShell делает это:

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

позволит Теперь трубе списка в tf view, а затем Select-String:

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

Не забудьте изменить ту часть, которая говорит "some string".

Всего, вы получите:

(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 } } 

Да, и не забудьте заменить часть, которая говорит "some string" с вашим фактическим поисковым запросом.

Смежные вопросы