不确定这是否可能,但我想我会问是否有人知道.是否可以在Perforce存储库中找到包含字符串的文件?具体来说,是否可以在不将整个存储库首先同步到本地目录的情况下这样做?(它非常大 - 即使我删除了很多东西,我也不认为我有空间 - 这就是存档服务器无论如何.)
有许多工具可以搜索本地目录中的文件(我个人使用Agent Ransack,但它只是其中之一),但这些不会搜索远程Perforce目录,除非有一些(最好是免费的)工具我是不知道有没有这种能力,或者Perforce本身可能有一些隐藏的功能?
Day*_*Day 10
p4 grep是你的朋友.来自perforce博客
'p4 grep'允许用户使用简单的文件搜索以及正则表达式来搜索head的文件内容以及存储在服务器上的文件的早期版本.虽然不支持标准grep的每个选项,但最重要的选项是可用的.这是根据'p4 help grep'命令的语法:
p4 grep [ -a -i -n -v -A after -B before -C context -l -L -t -s -F -G ] -e pattern file[revRange]...
Run Code Online (Sandbox Code Playgroud)
另请参见手册页.
更新:请注意,Perforce将在单个p4 grep命令中搜索的文件数量存在限制.据推测,这有助于降低服务器的负载.这表现为错误:
Grep revision limit exceeded (over 10000).
Run Code Online (Sandbox Code Playgroud)
如果您具有足够的perforce权限,则可以使用p4 configure此dm.grep.maxrevs设置从此默认值10K增加到更大.例如设置为100万:
p4 configure set dm.grep.maxrevs=1M
Run Code Online (Sandbox Code Playgroud)
如果您无权更改此权限,则可以通过将p4 grep子目录拆分为子目录上的多个命令来解决此问题.根据您的软件仓库结构,您可能需要进一步拆分为子子目录等.
例如,可以在bash shell中使用此命令一次搜索一个子目录//depot/trunk.使用该p4 dirs命令从服务器获取子目录列表.
for dir in $(p4 dirs //depot/trunk/*); do
p4 grep -s -i -e the_search_string $dir/...
done
Run Code Online (Sandbox Code Playgroud)