【问题标题】:TFS 2010 and VS 2010 searching code in source controlTFS 2010 和 VS 2010 在源代码控制中搜索代码
【发布时间】:2016-02-19 21:08:39
【问题描述】:

这个问题类似于:Find in Files: Search all code in Team Foundation Server 但是它是 4 年前提出的。我专门询问带有 VS 2010 的 TFS 2010。

Microsoft 是否终于像在 Visual Source Safe 中那样添加回文件搜索代码 sn-ps 了?如果有,如何启用和使用?

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

【问题讨论】:

  • Grant Holliday 对您引用的 TFS 2008 问题的回答对于 TFS 2010 仍然是准确的。需要注意的是,您对 "adding back" 的引用表明它曾经存在于TFS。我意识到 VSS 中存在(基本的)搜索,但我想特别指出 VSS 和 TFS 是两个独立的产品,没有共享的血统。 (也就是说不是TFS中曾经存在search,我们就去掉了。)
  • 正如我的问题中所述,VSS 具有出色的代码搜索功能,可以通过代码文件搜索您的查询(无需安装,它只是作为基本功能附带的)。 TFS 从未附带它,MS 也不允许您将其作为附加组件获取。血统很清楚。这是微软的源代码控制产品。仅仅因为它更改了名称,并不意味着它们不存储代码、允许签入和签出以及版本文件。
  • 它没有更改名称。它们是完全不同的产品。共有的代码完全为零。
  • 那么让我直说吧。 Visual Source Safe 不对代码和文件进行版本控制,允许签出、签入、锁定、版本比较,还是 TFS 不做这些事情? VSS 和 TFS 不都是与各自版本的 Microsoft 集成开发环境集成的首选源代码控制程序吗? (因为奇怪的是,在过去的 13 年中我一直在使用这两种方法,而且它们似乎确实是为此而设计的)
  • @EdwardThomson 您不是从最终用户的角度来看它。微软的源代码控制解决方案删除了​​一个主要功能——跨版本的代码搜索。这就是用户理解或需要的全部内容。

标签: visual-studio-2010 tfs


【解决方案1】:

我遇到了同样的问题,在寻找解决方案时发现了这个帖子。然后我发现此功能在 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

【讨论】:

【解决方案2】:

没有任何内置功能,而且由于 TFS 将文件存储为先前版本的增量的方式,在数据库级别执行此操作会很困难。

在我看来,有两个可行的选项,但都只适用于代码的“提示”版本。最简单的方法是“获取”所有源代码,然后在命令窗口中使用findstr 命令,或使用Windows Grep 之类的命令进行搜索。

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

还有像CAST 这样的产品,它们会进行影响分析,并允许您进行一定程度的搜索,但此时,您正在考虑放弃一些像样的金币来获得产品。

【讨论】:

  • 我们公司有很多很多的产品开发团队。必须下载并保留每个存储在本地的代码是不可行的。通过已经存储数据的地方进行搜索会更干净。您回答的是一些很棒的解决方法。为您的信息 +1。
【解决方案3】:

我不知道有什么可以做到这一点。

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

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

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

【讨论】:

  • "并且不难看出为什么它可能永远不会达到 MS 优先级列表的顶部 - 特别是当他们仍在努力获得基本功能时,例如可用的待处理签入窗口、合并工具、并希望重命名适用于 VS11 的文件(!)。” ——对于像微软这样大的公司,即使是很小的事情也需要很大的力量来改变。它不再像以前那样小巧灵活的快艇,现在它是一艘巨大的游轮,需要大量的能量才能让它改变它的方向。我还给了你一个 +1。
【解决方案4】:

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

【讨论】:

  • 谢谢!这可能是我向我们的 TFS 管理员提出的建议。
【解决方案5】:

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

然后我有一个网站,它有一个搜索功能,它调用 locateb 来提取包含该文本的文件的名称。

TFS 有可以调用网络服务的订阅。

【讨论】:

  • 您的回答是一个很好的解决方法。为您的信息 +1。
【解决方案6】:

我检查了整个库(最新版本)并运行这个 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 中的所有文件进行递归搜索以查找“字符串”(当然,在其中添加您的字符串)并将结果输出到文本文件。

【讨论】:

    【解决方案7】:

    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" 部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-20
      • 2014-11-07
      相关资源
      最近更新 更多