有没有办法在TFS中搜索特定字符串或正则表达式的每个文件的最新版本?这可能是我从Visual Source Safe中唯一遗漏的......
目前我在整个代码库上执行Get Latest并使用Windows Search,但是在75,000个文件中超过1GB的代码会非常痛苦。
编辑:尝试过提到的powertools,但“通配符搜索”选项似乎只搜索文件名而不是内容。
更新:我们在现有的MOSS(Search Server)安装中实施了自定义搜索选项。
答案 0 :(得分:56)
Team Foundation Server 2015(内部部署)和Visual Studio Team Services(云版本)包括对搜索所有代码和工作项的内置支持。
您可以执行简单的字符串搜索,例如foo
,布尔操作(例如foo OR bar
)或更复杂的语言特定内容,例如class:WebRequest
您可以在此处详细了解:https://www.visualstudio.com/en-us/docs/search/overview
答案 1 :(得分:14)
就我而言,在C#中编写一个小实用程序是有帮助的。 帮助我的链接 - http://pascallaurin42.blogspot.com/2012/05/tfs-queries-searching-in-all-files-of.html
How to list files of a team project using 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/}")); // 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;
}
}
}
答案 2 :(得分:13)
如果您安装TFS 2008 PowerTools,您将在Team Explorer右键菜单中获得“在源代码管理中查找”操作。
答案 3 :(得分:13)
还有另一种替代方案,似乎更具吸引力。
现在通过以上所有设置,您可以为客户端提供一些选项:
<强>更新强>: 我确实走了这条路,它一直很好用。只是想加入这个。
参考链接:
答案 4 :(得分:6)
我们已经为Team Foundation Server Source Control(不是你提到的SourceSafe)设置了一个类似于Grant建议的解决方案;预定TF Get,Search Server Express。但是,用于C#文件(文本)的IFilter没有给出我们想要的结果,因此我们将源文件转换为.htm文件。我们现在可以向文件添加其他元数据,例如:
然而,我们更喜欢TFS源代码控制的协议处理程序,以及专用的源代码IFilter,用于更具针对性的解决方案。
答案 5 :(得分:6)
好,
TFS2008 Power Tools 不具有find-in-files功能。 “查找源代码管理工具提供了通过项目的状态或通配符表达式在源代码管理中查找文件和文件夹的功能。”
在CodePlex上发布了一个具有此功能的Windows程序。我刚刚安装并测试了它,效果很好。
答案 6 :(得分:6)
现在可以使用Code Search
插件从TFS 2015开始。 https://marketplace.visualstudio.com/items?itemName=ms.vss-code-search
搜索是通过网络界面完成的,不需要您将代码下载到本地机器上,这很好。
答案 7 :(得分:3)
另一个解决方案是使用“ctrl + shift + F”。您可以将搜索位置更改为本地目录,而不是解决方案或项目。这将取代桌面搜索,您仍然需要获取最新的代码,但它将允许您保留在Visual Studio中进行搜索。
答案 8 :(得分:1)
此加载项声称具有我认为您寻求的功能:
答案 9 :(得分:1)
目前无法开箱即用,但有一个用户语音建议可以添加它:http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2037649-implement-indexed-full-text-search-of-work-items
虽然我怀疑它就像翻转开关一样简单,如果每个看过这个问题的人都投了赞成票,那么MS可能会实现一些东西。
更新:只需阅读Brian Harry's blog,其中显示此请求正在他们的雷达上,并且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提供的扩展程序Code Search,可以在代码和工作项中进行搜索。
答案 10 :(得分:1)
This search for a file link explains how to find a file.我确实不得不考虑让它发挥作用的建议。
在cd命令的情况下,我执行了cd命令,因为我正在寻找tf.exe文件。从该目录开始并添加整个路径更容易。既然我已经理解了如何使这项工作成功,我就会在引号中使用绝对路径。
如果是tf搜索,我从服务器的根目录$/
开始,我搜索了所有以sql
结尾的文件,即*.sql
。如果您不想从根开始,请改用"$/myproject/*.sql"
。
哦!这并没有解决问题的文件部分搜索,但是我的Google搜索让我在这里找到其他链接中的文件。
答案 11 :(得分:1)
假设你有Notepad++,一个经常遗漏的功能是“在文件中查找”,这非常快,并附带过滤器,正则表达式,替换和所有N ++好东西。