有没有办法在 TFS 中搜索每个文件的最新版本以查找特定字符串或正则表达式?这可能是我从 Visual Source Safe 中唯一想念的东西......
目前,我在整个代码库上执行 Get Latest 并使用 Windows 搜索,但是这对于 75,000 个文件中超过 1GB 的代码来说非常痛苦。
编辑:尝试了提到的 powertools,但“通配符搜索”选项似乎只搜索文件名而不搜索内容。
更新:我们在现有的 MOSS(搜索服务器)安装中实现了自定义搜索选项。
有没有办法在 TFS 中搜索每个文件的最新版本以查找特定字符串或正则表达式?这可能是我从 Visual Source Safe 中唯一想念的东西......
目前,我在整个代码库上执行 Get Latest 并使用 Windows 搜索,但是这对于 75,000 个文件中超过 1GB 的代码来说非常痛苦。
编辑:尝试了提到的 powertools,但“通配符搜索”选项似乎只搜索文件名而不搜索内容。
更新:我们在现有的 MOSS(搜索服务器)安装中实现了自定义搜索选项。
Team Foundation Server 2015(本地)和 Visual Studio Team Services(云版本)包括对搜索所有代码和工作项的内置支持。
你可以做简单的字符串搜索foo
,比如布尔运算,foo OR bar
或者更复杂的语言特定的事情,比如class:WebRequest
您可以在此处阅读更多相关信息:https ://www.visualstudio.com/en-us/docs/search/overview
就我而言,用 C# 编写一个小实用程序很有帮助。帮助我的链接 - http://pascallaurin42.blogspot.com/2012/05/tfs-queries-searching-in-all-files-of.html
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/}")); // one some servers you also need to add collection path (if it not the default collection)
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;
}
}
}
还有另一种替代解决方案,似乎更有吸引力。
现在,通过上述所有设置,您可以为客户端提供一些选项:
更新:我确实走了这条路,而且效果很好。只是想补充一下。
参考链接:
如果您安装 TFS 2008 PowerTools,您将在 Team Explorer 右键单击菜单中获得“在源代码管理中查找”操作。
我们已经为 Team Foundation Server 源代码控制(不是您提到的 SourceSafe)设置了一个类似于 Grant 建议的解决方案;预定 TF Get,搜索服务器 Express。但是,用于 C# 文件(文本)的 IFilter 没有给出我们想要的结果,因此我们将源文件转换为 .htm 文件。我们现在可以向文件中添加额外的元数据,例如:
然而,我们更喜欢 TFS 源代码控制的协议处理程序,以及更有针对性的解决方案的专用源代码 IFilter。
好的,
TFS2008 电动工具没有文件查找功能。“源代码管理工具中的查找提供了通过项目状态或通配符表达式在源代码管理中查找文件和文件夹的能力。”
CodePlex上发布了具有此功能的 Windows 程序。我刚刚安装并测试了它,它运行良好。
现在可以通过使用Code Search
插件从 TFS 2015 开始。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-全文搜索工作项
虽然我怀疑它是否像拨动开关一样简单,但如果每个看过这个问题的人都投票支持它,MS 可能会实现一些东西。
更新:只需阅读Brian Harry 的博客,该博客显示此请求已引起他们的注意,并且 Visual Studio 的在线版本对搜索 git 用作 vcs 的位置的支持有限:http: //blogs.msdn.com/b/ visualstudioalm/archive/2015/02/13/announcing-limited-preview-for-visual-studio-online-code-search.aspx。从这里我认为公平地说这只是时间问题......
更新 2:现在有一个 Microsoft 提供的扩展程序代码搜索,它可以在代码和工作项中进行搜索。
此文件链接搜索说明了如何查找文件。 我确实不得不四处寻找建议以使其发挥作用。
在 cd 命令的情况下,我执行了 cd 命令,因为我正在寻找 tf.exe 文件。从该目录开始比添加整个路径更容易。现在我了解了如何进行这项工作,我将在引号中使用绝对路径。
在 tf 搜索的情况下,我从服务器的根目录开始,$/
并搜索所有以sql
ie结尾的文件*.sql
。如果您不想从根目录开始,请"$/myproject/*.sql"
改用。
哦!这并不能解决问题的文件部分搜索,但我的 Google 搜索将我带到这里以在其他链接中查找文件。
假设您有Notepad++,一个经常被忽略的功能是“在文件中查找”,它非常快,并且带有过滤器、正则表达式、替换和所有 N++ 好东西。
此加载项声称具有我相信您寻求的功能: