TFS 2010和VS 2010在源代码管理中搜索代码

时间:2012-03-26 21:29:21

标签: visual-studio-2010 tfs tfs2010

这个问题类似于:Find in Files: Search all code in Team Foundation Server但是有人问过4年前。我正在特别询问有关VS 2010的TFS 2010。

微软最终是否已经开始添加回搜索文件中的代码片段,就像他们回到Visual Source Safe一样?如果是,如何启用并使用它?

我尝试添加微软的Power Tools。虽然它具有搜索功能,但搜索仅针对文件名,并忽略查看文件中的内容。 :(

7 个答案:

答案 0 :(得分:26)

我遇到了同样的问题,并在寻找解决方案时发现了这个问题。然后,我发现在Visual Studio库中名为“TFS Administrators Toolkit”的Visual Studio 2010加载项中提供了此功能。它似乎工作!

MSDN链接:

TFS Administrators Toolkit for VS 2010

TFS Administrators Toolkit for VS 2012

TFS Administrators Toolkit for VS 2013

答案 1 :(得分:5)

由于TFS将文件存储为以前版本的增量,因此没有内置任何内容,并且很难在数据库级别执行此操作。

我看到它的方式,有两个可行的选项,但两者只适用于代码的“提示”修订版。最简单的方法是对所有源进行“获取”,然后在命令窗口中使用findstr命令,或使用类似Windows Grep的内容进行搜索。

或者,您可以做一些我们更有进取心的开发人员所做的事情,并使用Lucene索引您的代码,然后在结果周围放置一个漂亮的前端。我们设置这个设置是为了定期获取MAIN分支和DEV分支,因此我们可以获得接近实时的搜索结果。

还有像CAST这样的产品可以进行影响分析,并允许你进行一定程度的搜索,但在那时,你正在寻找一些不错的金币来获得产品。

答案 2 :(得分:1)

我不知道会有什么事情会这样做。

20年前的SourceSafe存储方法非常基础,数据库仅限于我们现在认为的“微小”数据量。 TFS存储文件版本之间的紧凑差异,并且不再有任何人可以轻易搜索的“大块文本”。

任何此类工具都需要获取每个文件的每个版本才能重建要搜索的原始文本,这会使服务器损坏数天或数周。添加生成强大工具的测试开销,以及许多人实际需要它的机会,并且不难看出为什么它可能永远不会达到MS优先级列表的顶部 - 特别是当他们仍在努力获得像这样的基本功能时一个可用的挂起签入窗口,合并工具,并希望重命名为VS11工作的文件(!)。

可以说,使用自动化模型,甚至只是一个调用tf.exe的控制台应用程序,自己编写几行代码来遍历每个文件的所有版本并应用RegEx将是一项相对简单的任务,如果你真的需要应用这样的搜索。

答案 3 :(得分:1)

我知道几年前我是如何使用PVCS版本管理器做的。我在checkin上有一个触发器并添加归档。这排队了一个工作进程,该进程将获取源代码并使用cygwin / unix命令updatedb来创建所有文件的索引。数据库的构建将转到临时数据库,然后在构建后超快速地交换读取数据库。

然后我有一个带有搜索功能的网站,名为locateb,用于撤回包含该文本的文件的名称。

TFS拥有可以调用webserivces的订阅。

答案 4 :(得分:1)

如果您不想推出自己的解决方案,我之前曾与Krugle for TFS合作过(仅测试和评估它)并发现它是一个非常好的解决方案。

答案 5 :(得分:0)

我查看整个库(最新版本)并运行此Powershell脚本:

C:\Users\username>powershell
Windows PowerShell
Copyright (C) 2013 Microsoft Corporation. All rights reserved.

PS C:\Users\username> cd C:\LocalDevelopment
PS C:\LocalDevelopment> get-childitem -include *.* -rec | select-string -pattern "a string" > a_string.txt

是:对c:\ LocalDevelopment中的所有文件进行递归搜索,以获得"字符串" (当然,在那里添加你的字符串)并将结果输出到文本文件。

答案 6 :(得分:0)

TFS并不提供开箱即用的功能,但您可以使用Powershell结合现有的TFS功能来获得所需的功能。

我的计划是首先使用tf dir获取文件列表,然后使用tf view获取文件内容,最后将内容提供给Select-String以查找字符串(或正则表达式)我们正在寻找。

您可以从:

开始
tf dir /recursive $/

但该列表可能会很大,因此请尝试将搜索限制在较小的范围内,例如:

tf dir /recursive $/some/path/*.cs

下一步是将上一步的结果转换为我们可以输入tf view的格式。这是一个执行该操作的powershell脚本:

(tf dir /recursive $/) -join "+" -replace ":", "" -replace "\+\+", "`n" -split "`n" | %{ $arr = $_ -split "\+"; $arr | select -Skip 1 | %{ $arr[0] + '/' + $_ } }

现在让我们将列表导入tf view然后Select-String

... | %{ $file = $_ ; if (tf view "$file" /console | Select-String "some string") { Write-Host $file } }

请勿忘记更改"some string"部分。

总而言之,你得到:

(tf dir /recursive $/) -join "+" -replace ":", "" -replace "\+\+", "`n" -split "`n" | %{ $arr = $_ -split "\+"; $arr | select -Skip 1 | %{ $arr[0] + '/' + $_ } } | %{ $file = $_ ; if (tf view "$file" /console | Select-String "some string") { Write-Host $file } }

哦,不要忘记用您的实际搜索查询替换"some string"部分。