73

有时,我发现自己想在 Perforce 中搜索更改列表描述的文本。在 P4V 中似乎没有办法做到这一点。我可以通过将更改命令的输出重定向到文件来做到这一点......

p4 changes -l > p4changes.txt

...(-l 开关告诉它转储更改列表描述的全文)然后搜索文件,但这相当麻烦。有没有人找到更好的方法?

4

8 回答 8

70

当提交的更改列表窗格具有焦点时,CTRL+F 允许您进行任意文本搜索,其中包括更改列表描述。

唯一的限制是它只搜索那些从服务器获取的更改列表,因此您可能需要增加检索到的数量。这是通过“一次获取的更改列表、作业、分支映射或标签的数量”设置完成的,可以通过导航到“编辑”->“首选项”->“服务器数据”找到该设置。

于 2008-12-01T22:26:26.420 回答
22

p4 changes -L | grep -B 3 searchstring

-B 3表示在匹配的字符串之前显示 3 行,应该足以显示带有 2 行注释的更改 ID,但您可以根据需要进行更改。

于 2009-10-15T11:54:49.423 回答
17

我使用p4sql并在“更改”数据库上运行查询。这是perforce 数据库模式

查询看起来像这样(未经测试)

select change from changes where description like '%text%' and p4options = 'longdesc'

编辑:添加了 p4options 以在描述中返回超过 31 个字符。

于 2008-09-25T15:57:06.657 回答
8

这是 Paul 的“grep”答案的 Powershell 版本。再次,它在更改描述中搜索指定的字符串并返回它之前的 3 行,以包含更改 ID:

p4 changes -L | select-string "search string" -Context (3,0)
于 2010-10-07T11:13:52.943 回答
3

less当您可以通过管道输出并使用搜索时,为什么要重定向到文件less

p4 changes -l | less

然后按/提示输入搜索字符串。之后,n将跳转到下一场比赛,Shift+n将跳转到上一场比赛。

Windows的实现less可作为UnxUtils的一部分使用。

于 2012-09-15T23:55:37.737 回答
1

使用 p4sql 确实是有效地做你想做的事情的唯一方法。我不知道任何其他方式。当然,好处是您可以使用 select 语句来限制更改列表值的范围(通过日期、用户等)。您的方法将有效,但随着您生成更多更改列表,很快就会变得很麻烦。您可以限制更改命令的范围,但不会获得 p4sql 的灵活性。

于 2008-09-25T17:16:23.940 回答
1

Eddie on Games 在http://www.eddiescholtz.com/blog/archives/130上发布了他的 Perforce Changelist Search 0.1

但是,我喜欢使用我最喜欢的文本编辑器和简单的:p4 changes -s 提交 //prog/stuff/main/... >temp.txt

于 2009-06-24T19:45:51.980 回答
0

如果你仍然喜欢你的命令行,你可以编写一个小的 perl 脚本:

  • 将记录分隔符 $/ 更改为双换行符“\n\n”,以便将输入过滤为 ztagged p4 输出的完整记录。
  • 使用 args 中的正则表达式扫描 '/^... desc/..//' 部分。

用法类似于 'p4 -ztag changes -l | yourperlfilter.pl searchterm1 searchterm2'

如果一切正常,您可以将其集成到 p4win 工具菜单中。

于 2008-11-21T06:47:00.717 回答