有时,我发现自己想在 Perforce 中搜索更改列表描述的文本。在 P4V 中似乎没有办法做到这一点。我可以通过将更改命令的输出重定向到文件来做到这一点......
p4 changes -l > p4changes.txt
...(-l 开关告诉它转储更改列表描述的全文)然后搜索文件,但这相当麻烦。有没有人找到更好的方法?
有时,我发现自己想在 Perforce 中搜索更改列表描述的文本。在 P4V 中似乎没有办法做到这一点。我可以通过将更改命令的输出重定向到文件来做到这一点......
p4 changes -l > p4changes.txt
...(-l 开关告诉它转储更改列表描述的全文)然后搜索文件,但这相当麻烦。有没有人找到更好的方法?
当提交的更改列表窗格具有焦点时,CTRL+F 允许您进行任意文本搜索,其中包括更改列表描述。
唯一的限制是它只搜索那些从服务器获取的更改列表,因此您可能需要增加检索到的数量。这是通过“一次获取的更改列表、作业、分支映射或标签的数量”设置完成的,可以通过导航到“编辑”->“首选项”->“服务器数据”找到该设置。
p4 changes -L | grep -B 3 searchstring
-B 3
表示在匹配的字符串之前显示 3 行,应该足以显示带有 2 行注释的更改 ID,但您可以根据需要进行更改。
我使用p4sql并在“更改”数据库上运行查询。这是perforce 数据库模式
查询看起来像这样(未经测试)
select change from changes where description like '%text%' and p4options = 'longdesc'
编辑:添加了 p4options 以在描述中返回超过 31 个字符。
这是 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的一部分使用。
使用 p4sql 确实是有效地做你想做的事情的唯一方法。我不知道任何其他方式。当然,好处是您可以使用 select 语句来限制更改列表值的范围(通过日期、用户等)。您的方法将有效,但随着您生成更多更改列表,很快就会变得很麻烦。您可以限制更改命令的范围,但不会获得 p4sql 的灵活性。
Eddie on Games 在http://www.eddiescholtz.com/blog/archives/130上发布了他的 Perforce Changelist Search 0.1
但是,我喜欢使用我最喜欢的文本编辑器和简单的:p4 changes -s 提交 //prog/stuff/main/... >temp.txt
如果你仍然喜欢你的命令行,你可以编写一个小的 perl 脚本:
用法类似于 'p4 -ztag changes -l | yourperlfilter.pl searchterm1 searchterm2'
如果一切正常,您可以将其集成到 p4win 工具菜单中。