有没有一种方法可以搜索TFS中每个文件的最新版本以查找特定字符串或正则表达式?这可能是我从Visual Source Safe想念的唯一东西...
目前,我对整个代码库执行“获取最新版本”,然后使用Windows搜索,但在超过75,000个文件且总共有1GB代码量的情况下,这会变得非常困难。
编辑: 尝试了提到的Powertools,但“通配符搜索”选项似乎只能搜索文件名而不能搜索内容。
更新: 我们已经在现有的MOSS(Search Server)安装中实施了自定义搜索选项。
有没有一种方法可以搜索TFS中每个文件的最新版本以查找特定字符串或正则表达式?这可能是我从Visual Source Safe想念的唯一东西...
目前,我对整个代码库执行“获取最新版本”,然后使用Windows搜索,但在超过75,000个文件且总共有1GB代码量的情况下,这会变得非常困难。
编辑: 尝试了提到的Powertools,但“通配符搜索”选项似乎只能搜索文件名而不能搜索内容。
更新: 我们已经在现有的MOSS(Search Server)安装中实施了自定义搜索选项。
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 2015开始,现在可以使用Code Search
插件来实现这一点。https://marketplace.visualstudio.com/items?itemName=ms.vss-code-search
搜索是通过Web界面完成的,不需要将代码下载到本地机器上,这非常方便。
好的,
TFS2008 Power Tools没有查找文件中内容的功能。 "查找源代码控制工具提供了通过项目的状态或使用通配符表达式在源代码控制中定位文件和文件夹的能力。"
有一个Windows程序可以实现这个功能,发布在CodePlex上。我刚刚安装并测试了一下,效果很好。
另一个解决方案是使用“ctrl+shift+F”快捷键。你可以将搜索位置更改为本地目录而不是解决方案或项目。这只是取代了桌面搜索,你仍然需要获取最新的代码,但它将允许你在Visual Studio内进行搜索。
目前没有现成的方法来实现这个功能,但是有一个用户建议可以添加它:http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2037649-implement-indexed-full-text-search-of-work-items
虽然我怀疑它并不像翻转开关那么简单,但如果所有查看此问题的人都投票支持,微软可能会实现一些东西。
更新:刚刚阅读了Brian Harry's blog,这显示出他们已经关注此请求,并且Visual Studio Online版本在搜索git作为vcs使用的地方方面有限的支持:http://blogs.msdn.com/b/visualstudioalm/archive/2015/02/13/announcing-limited-preview-for-visual-studio-online-code-search.aspx。从这个可以推断出,这只是时间问题...