Найти в файлах: Поиск всего кода в Team Foundation Server
есть ли способ поиска последней версии каждого файла в TFS для определенной строки или регулярного выражения? Это, вероятно, единственное, что я пропустил из визуального источника Safe...
В настоящее время я выполняю Get Latest на всей кодовой базе и использую поиск Windows, но это становится довольно болезненным с более чем 1 ГБ кода в 75 000 файлов.
EDIT: пробовал упомянутые powertools, но опция "подстановочный знак" появляется только для поиска имен файлов, а не содержание.
обновление: мы реализовали настраиваемый вариант поиска в существующей установке MOSS (Search Server).
12 ответов:
Team Foundation Server 2015 (локальная версия) и Visual Studio Team Services (облачная версия) включают встроенную поддержку поиска по всему коду и рабочим элементам.
вы можете сделать простые строки поиска, как
foo
, логические операции, такие какfoo OR bar
или более сложные языковые вещи, такие какclass:WebRequest
вы можете прочитать больше об этом здесь: https://www.visualstudio.com/en-us/docs/search/overview
есть еще одно альтернативное решение, которое кажется более привлекательным.
- настройка поискового сервера-может быть любая машина/сервер windows
- настройка a служба уведомлений TFS* (Bissubscribe), чтобы получить, удалить, обновление файлов каждый раз при проверке происходит. Так это веб-сервис, который действует как слушатель на TFS сервер и обновления / синхронизация файлов и папки на поисковом сервере. - это значительно улучшит точность (живой поиск), и избежать одноразовой нагрузки делает периодические получает
- настройка службы индексирования / windows индексированный поиск на поисковом сервере для корневой папки
- предоставление веб-службы для возврата Результаты поиска
теперь со всеми вышеперечисленными установки, у вас есть несколько вариантов для клиента:
- настройка веб-страницы для вызова службы поиска и форматирования результатов для отображения на веб-странице - вы также можете интегрировать эту веб-страницу внутри visual studio (через макрос или надстройку)
- создайте клиентский интерфейс windows (winforms/wpf) для вызова службы поиска и форматирования результатов и отображения их в пользовательском интерфейсе - вы также можете интегрировать этот клиентский инструмент внутри visual studio с помощью VSPackages или надстройки
обновление: Я пошел по этому пути, и он работал хорошо. Просто хотел добавить к этому.
ссылки:
Если вы установите TFS 2008 PowerTools, вы получите действие "найти в системе управления версиями" в меню правой кнопки мыши Team Explorer.
в моем случае помогло написание небольшой утилиты на C#. Ссылки, которые помогли мне - 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; } } }
мы создали решение для управления версиями Team Foundation Server (не SourceSafe, как вы упомянули), аналогичное тому, что предлагает Грант; запланированный TF Get, Search Server Express. Однако IFilter, используемый для файлов C# (текст), не давал желаемых результатов, поэтому мы конвертируем исходные файлы .htm файлы. Теперь мы можем добавить дополнительные метаданные в файлы, такие как:
- автор (мы определяем его как человека, который последний раз в файле)
- цветовое кодирование (на нашем todo-list)
- количество изменений, указывающих на потенциальные проблемы проектирования (в нашем списке задач)
- интеграция с VSTS IDE, как функция Koders SmartSearch
- etc.
однако мы предпочли бы protocolhandler для управления версиями TFS и выделенный исходный код IFilter для гораздо более целевого решения.
хорошо,
электроинструменты TFS2008 делают не есть функция поиска в файлах. "Поиск в инструментах управления версиями обеспечивает возможность поиска файлов и папок в системе управления версиями по элементу статус или подстановочный знак выражение."
есть программа для Windows с этой функциональностью размещена на CodePlex. Я только что установил и проверил это, и это работает что ж.
Это теперь возможно с TFS 2015 с помощью
Code Search
плагин. https://marketplace.visualstudio.com/items?itemName=ms.vss-code-searchпоиск осуществляется через веб-интерфейс и не требует загрузки кода на локальную машину, что приятно.
другое решение-использовать "ctrl + shift+F". Расположение поиска можно изменить на локальный каталог, а не на решение или проект. Это просто займет место поиска на рабочем столе, и вам все равно нужно будет получить последний код, но это позволит вам оставаться в Visual Studio для выполнения поиска.
в настоящее время нет способа сделать это из коробки, но есть голосовое предложение пользователя для его добавления: 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 из этого, я думаю, справедливо будет сказать, что это всего лишь вопрос времени...
этот поиск ссылки на файл объясняет, как найти файл. мне пришлось возиться с советом, чтобы заставить его работать.
- cd "C:\Program файлы (x86)\Microsoft Visual Studio 12.0\Common7\IDE"
- реж ТФ "$/*.sql " / recursive / server:http://mytfsserver:8080/tfs
в случае команды cd я выполнил команду cd, потому что я искал tf.файл EXE. Проще было просто начать с в этом каталоге стихи, добавляющие весь путь. Теперь, когда я понимаю, как сделать эту работу, я бы использовал абсолютный путь в кавычках.
в случае поиска tf, я начал в корне сервера с
$/
и я искал все файлы, которые закончились сsql
т. е.*.sql
. Если вы не хотите начинать с корня, то используйте .о! Это не решает поиск в файловой части вопроса, но мой поиск Google привел меня сюда, чтобы найти файлы среди другие ссылки.
Если у вас есть Блокнот++, часто пропущенная функция "Найти в файлах", которая чрезвычайно быстра и поставляется с фильтрами, регулярными выражениями, заменой и всеми вкусностями N++.