Поиск кода TFS 2010 и VS 2010 в системе контроля версий - PullRequest
28 голосов
/ 27 марта 2012

Этот вопрос похож на: Найти в файлах: Поиск по всему коду в Team Foundation Server Однако его спросили 4 года назад.Я спрашиваю конкретно о TFS 2010 с VS 2010.

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

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

Ответы [ 7 ]

26 голосов
/ 21 января 2013

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

Ссылки MSDN:

Инструментарий TFS для администраторов для VS 2010

Инструментарий для администраторов TFS для VS 2012

Инструментарий TFS Administrators для VS 2013

5 голосов
/ 28 марта 2012

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

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

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

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

1 голос
/ 30 марта 2012

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

1 голос
/ 28 марта 2012

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

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

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

1 голос
/ 27 марта 2012

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

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

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

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

0 голосов
/ 21 ноября 2015

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" на ваш фактический поисковый запрос.

0 голосов
/ 06 июля 2015

Я извлекаю всю библиотеку (последняя версия) и запускаю сценарий 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

, который: выполняет рекурсивный поиск по всем файлам в c: \ LocalDevelopment для поиска «строки» (добавьтеВаша строка там, конечно) и вывод результатов в текстовый файл.

...