Найти в файлах: Искать весь код в Team Foundation Server
Есть ли способ поиска последней версии каждого файла в TFS для определенной строки или регулярного выражения? Вероятно, это единственное, что я пропустил от Visual Source Safe...
В настоящее время я выполняю Get Latest на всей кодовой базе и использую Windows Search, но это становится довольно болезненным с более чем 1 ГБ кода в 75 000 файлов.
РЕДАКТИРОВАТЬ: пробовал упомянутые powertools, но опция "Подстановочный поиск" появляется только для поиска имен файлов, а не содержимого.
UPDATE. Мы внедрили опцию индивидуального поиска в существующую установку MOSS (Search Server).
Ответы
Ответ 1
Team Foundation Server 2015 (локальная) и Visual Studio Team Services (облачная версия) включает встроенную поддержку поиска по всему вашему коду и рабочим элементам.
Вы можете выполнять простые строковые запросы, такие как foo
, логические операции, такие как foo OR bar
или более сложные языковые вещи, такие как class:WebRequest
![скриншот синтаксиса фильтра поиска кода]()
Подробнее об этом можно прочитать здесь: https://www.visualstudio.com/en-us/docs/search/overview
Ответ 2
Если вы установите TFS 2008 PowerTools, вы получите действие "Найти исходный элемент управления" в меню правой кнопки мыши Team Explorer.
TFS2008 Электроинструменты
Ответ 3
Существует еще одно альтернативное решение, которое кажется более привлекательным.
- Настройка сервера поиска - может быть любой компьютер/сервер Windows
- Настройка службы уведомлений TFS *
(Bissubscribe), чтобы получить, удалить,
обновлять файлы каждый раз при проверке
случается. Итак, это веб-сервис, который
выступает как слушатель на TFS
сервер, а также обновляет/синхронизирует файлы
и папки на сервере поиска. - , это значительно улучшит точность (живой поиск) и позволит избежать одноразовой загрузки периодических сообщений
- Настройка службы индексирования/окон
индексированный поиск на сервере поиска
для корневой папки
- Откройте веб-службу, чтобы вернуться
результаты поиска
Теперь, используя все указанные выше настройки, у вас есть несколько вариантов для клиента:
- Настройте веб-страницу для вызова службы поиска и отформатируйте результаты для показа на веб-странице. Вы также можете интегрировать эту веб-страницу в визуальную студию (через макрос или надстройку).
- Создайте клиентский интерфейс Windows (winforms/wpf), чтобы вызвать службу поиска, отформатировать результаты и показать их в пользовательском интерфейсе - вы также можете интегрировать этот клиентский инструмент внутри визуальной студии через VSPackages или надстройку
Обновление:
Я пошел по этому маршруту, и он работал красиво. Просто хотел добавить к этому.
Ссылки ссылки:
Ответ 4
В моем случае помогло написать небольшую утилиту на С#.
Ссылки, которые мне помогли -
http://pascallaurin42.blogspot.com/2012/05/tfs-queries-searching-in-all-files-of.html
Как просмотреть файлы командного проекта с помощью tfs api?
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;
}
}
}
Ответ 5
Мы установили решение для Team Source Server Source Control (а не SourceSafe, как вы упоминаете), похожее на то, что предлагает Грант; запланированный TF Get, Search Server Express. Однако IFilter, используемый для файлов С# (текст), не дал желаемых результатов, поэтому мы конвертируем исходные файлы в файлы .htm. Теперь мы можем добавлять дополнительные метаданные в файлы, такие как:
- Автор (мы определяем его как человека, который последний раз проверял в файле)
- Цветовое кодирование (в нашем списке дел)
- Количество изменений, указывающих на потенциальные проблемы проектирования (в нашем списке дел)
- Интеграция с VSTS IDE, как функция Koders SmartSearch
- и др.
Однако мы бы предпочли обработчик протокола для TFS Source Control и выделенный исходный код IFilter для гораздо более целенаправленного решения.
Ответ 6
Хорошо,
-
Электроинструменты TFS2008 имеют не функцию поиска в файлах. "Инструменты Find in Source Control позволяют находить файлы и папки в исходном элементе элементами статус или с выражением подстановочные знаки.
-
Существует программа Windows с этой функциональностью, размещенная на CodePlex. Я только что установил и протестировал это, и он работает хорошо.
Ответ 7
Теперь это возможно с TFS 2015, используя плагин Code Search
. https://marketplace.visualstudio.com/items?itemName=ms.vss-code-search
Поиск осуществляется через веб-интерфейс и не требует загрузки кода на ваш локальный компьютер, который является приятным.
Ответ 8
Другим решением является использование "ctrl + shift + F". Вы можете изменить местоположение поиска в локальном каталоге, а не в решении или проекте. Это займет место поиска на рабочем столе, и вам все равно нужно будет получить последний код, но он позволит вам оставаться в Visual Studio, чтобы выполнить поиск.
Ответ 9
Эта надстройка утверждает, что у вас есть функциональность, которую, я считаю, вы ищете:
Team Foundation Sidekicks
Ответ 10
В настоящее время нет возможности сделать это из коробки, но есть предложение User Voice для его добавления: http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2037649-implement-indexed-full-text-search-of-work-items
Хотя я сомневаюсь, что это так же просто, как переключение переключателя, если все, кто рассмотрел этот вопрос, проголосовали за него, MS, вероятно, что-то реализует.
Обновление: просто прочитайте блог Брайана Гарри, который показывает этот запрос как находящийся на их радаре, а онлайн-версия Visual Studio имеет ограниченную поддержку для поиска, где git используется как vcs: http://blogs.msdn.com/b/visualstudioalm/archive/2015/02/13/announcing-limited-preview-for-visual-studio-online-code-search.aspx. Из этого я считаю справедливым сказать, что это всего лишь вопрос времени...
Ответ 11
Этот поиск ссылки на файл объясняет, как найти файл. Мне пришлось обманывать совет, чтобы он работал.
В случае команды cd я выполнил команду cd, потому что я искал файл tf.exe. Было легче начать с этого каталога стихи, добавив весь путь. Теперь, когда я понимаю, как сделать эту работу, я бы использовал абсолютный путь в кавычках.
В случае поиска tf я начал с корня сервера с $/
, и я искал все файлы, которые заканчивались на sql
i.e. *.sql
. Если вы не хотите начинать с корня, используйте вместо него "$/myproject/*.sql"
.
О! Это не решает поиск в файловой части вопроса, но мой поиск в Google привел меня сюда, чтобы найти файлы среди других ссылок.
Ответ 12
Предполагая, что вы Notepad ++, часто пропущенная функция - "Найти в файлах", которая очень быстрая и поставляется с фильтрами, регулярными выражения, заменить и все плюсы N ++.