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


71

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

p4 changes -l > p4changes.txt

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


真正的解决方案是让p4d在变更列表说明(以及源文件本身……)上具有全文索引。
Jonesome恢复Monica

Answers:


66

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

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


真好 进行了尝试,它跳转以选择每个匹配的更改列表。真的很方便。
埃普

这确实帮助了我。非常感谢!
罗尼·迈克尔

1
我希望我能再次投票。我忘记了,今天又找到了这个答案,但是看到我已经赞成了。
CoderDennis

1
对我来说,当p4v不包含如此有用的搜索时,情况非常糟糕。让我们想象一下您的CL很旧的情况(在高度发展的应用程序中大约超过两年)。您不会通过这种方式找到它。
23W

22

p4 changes -L | grep -B 3 searchstring

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


17

我使用p4sql并在“ changes”数据库上运行查询。这是perforce数据库架构

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

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

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


那没用。由于某些原因,“喜欢”的行为类似于“ =”。假设描述为“ foo bar”。像'foo'失败,但是像'foo bar'成功。更重要的是,它们不会使描述的整个文本可用,只有前30个字符可用。
乌鸦

@raven-%字符对SQL很重要,应该可以使查询工作。我也认为您的描述不正确-您应该能够理解所有内容。您可以发布查询吗?
格雷格·惠特菲尔德

@Greg Whitfield:没错,我没有使用%字符。查询有效,但没有太大用处。我验证了它只是查询并显示描述的前31个字符。
乌鸦

@raven-更新了查询,使其包含p4options ='longdesc'。应该返回完整的描述。
08年

p4options使查询变慢了一点。
08年

8

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

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

3

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

p4 changes -l | less

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

lessWindows的实现是UnxUtils的一部分。


如果您已经拥有较少的选项,这可能是最用户友好的选项。我已经在msys2中安装了它,因此很容易安装。
leetNightshade

1

实际上,使用p4sql是有效执行所需操作的唯一方法。我没有其他办法。当然,这样做的好处是您可以使用select语句来限制更改列表值的范围(通过日期,用户等)。您的方法可以使用,但是随着您生成更多变更列表,它会变得非常麻烦。您可以限制changes命令的范围,但不会获得p4sql的灵活性。



0

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

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.