如何在 Perforce 中搜索变更列表描述的文本?

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

p4 changes -l > p4changes.txt

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

37814 次浏览

我使用 P4sql并在“ change”数据库上运行一个查询

查询类似于这样(未经测试)

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

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

使用 p4sql 确实是有效完成所需任务的唯一方法。我不知道还有什么别的办法。当然,这样做的好处是您可以使用 select 语句来限制变更列表值的范围(通过日期、用户等)。您的方法将工作,但会变得非常麻烦,因为您生成更多的变更列表。您可以限制 change 命令的作用域,但是无法获得 p4sql 的灵活性。

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

  • 将记录分隔符 $/更改为 双换行“ n”,所以它过滤 的完整记录 带 Z 标记的 p4输出。
  • 扫描 “/^ ... desc/. ./”部分 来自参数的正则表达式。

用法类似于“ p4-ztag change-l | yourperlfilter.pl searchterm1 searchterm2”

如果成功的话,你可以用 整合到 p4win 工具菜单中

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

唯一的限制是它只搜索那些已经从服务器获取的变更列表,因此您可能需要提高检索到的数量。这是通过“每次获取的变更列表、作业、分支映射或标签的数量”设置完成的,该设置可以通过导航到 Edit-> Preferences-> Server Data 找到。

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

但是,我确实喜欢使用我最喜欢的文本编辑器: P4更改-s submit//prog/stuff/main/... > tem.txt

p4 changes -L | grep -B 3 searchstring

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

下面是 Paul 的“ grep”答案的 Powershell 版本。同样,它在变更描述中搜索指定的字符串,并返回之前的3行,以包含变更 id:

p4 changes -L | select-string "search string" -Context (3,0)

如果可以通过 less管道输出并使用 less的搜索,为什么还要重定向到文件呢?

p4 changes -l | less

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

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