在Perforce文件中查找字符串而不同步

在Perforce文件中查找字符串而不同步,perforce,Perforce,不确定这是否可能,但我想我会问一下是否有人知道。是否可以在Perforce存储库中找到包含字符串的文件?具体来说,是否可以在不首先将整个存储库同步到本地目录的情况下执行此操作?(它相当大——我想即使我删除了很多东西,我也没有空间——不管怎样,这就是归档服务器的用途。) 有很多工具可以搜索本地目录中的文件(我个人使用Agent Ransack,但这只是众多工具中的一个),但这些工具不会搜索远程Perforce目录,除非我不知道有一些(最好是免费的)工具具有此功能,或者可能是Perforce本身的某

不确定这是否可能,但我想我会问一下是否有人知道。是否可以在Perforce存储库中找到包含字符串的文件?具体来说,是否可以在不首先将整个存储库同步到本地目录的情况下执行此操作?(它相当大——我想即使我删除了很多东西,我也没有空间——不管怎样,这就是归档服务器的用途。)


有很多工具可以搜索本地目录中的文件(我个人使用Agent Ransack,但这只是众多工具中的一个),但这些工具不会搜索远程Perforce目录,除非我不知道有一些(最好是免费的)工具具有此功能,或者可能是Perforce本身的某些隐藏功能?

这不是标准Perforce工具所能做到的。一个有用的命令可能是
p4 print
,但它并不比我想象的同步快。

这是一个很大的if,但如果您有权访问服务器,您可以在perforce目录上运行agent ransack。Perforce将所有版本文件存储在磁盘上,数据库中只有元数据。

p4 grep
是您的朋友。从

“p4 grep”允许用户使用简单的文件搜索和常规搜索 用于搜索head以及更早版本的文件内容的表达式 服务器上存储的文件的修订。虽然不是每个选项 如果支持标准grep,最重要的选项是 可用。以下是根据“p4帮助”的命令语法 格雷普:

另见

更新:请注意,Perforce在单个
p4 grep
命令中搜索的文件数量有限制。这大概是为了帮助降低服务器上的负载。这表现为一个错误:

Grep revision limit exceeded (over 10000).
如果您有足够的performe权限,可以使用将
dm.grep.maxrevs
设置从默认值10K增加到更大的值。e、 g.设定为100万:

p4 configure set dm.grep.maxrevs=1M
如果您没有更改此项的权限,可以通过将
p4 grep
拆分为子目录上的多个命令来解决此问题。根据仓库结构,您可能需要进一步拆分为子目录等

例如,可以在bashshell中使用此命令一次搜索
//depot/trunk
的每个子目录。使用命令从服务器获取子目录列表

for dir in $(p4 dirs //depot/trunk/*); do
  p4 grep -s -i -e the_search_string $dir/...
done

事实上,我自己解决了这个问题<代码>p4 grep确实做到了这一点。在它正常工作之前,您必须仔细地缩小它的范围-在我们的服务器上,至少您必须将其缩小到<10000个文件。我还必须将输出重定向到一个文件,而不是在控制台中打印出来,添加
>output.txt
,因为控制台中每行有4096个字符的限制,并且文件路径相当长。

这不是速度问题,而是磁盘空间问题。我查了一下
p4 grep
,它似乎可以做到这一点,但我似乎没有设置权限来做到这一点。(在这里获得p4权限就像拔牙一样,所以我不想再这样做了。)如果我能把搜索范围缩小到足够的范围,这可能会奏效……我很尴尬,我忘了
p4 grep
,我是叫嚷着要它的人之一。哎呀,你在我回答我自己的问题时发布了这篇文章。谢谢。没问题,很高兴你找到了答案。现在你只需要找到那个讨厌的字符串;)我想我会给你打勾,因为你的答案比我的略详细,包括手动链接。@Day,你不必将grep分解成多个命令,还可以将dm.grep.maxrevs可配置重置为更高的值。@Bryan如果你有权访问服务器配置,那么可以。根据我的经验,大多数有足够的进取心为Performance付费的公司不会让开发人员改变这些事情,也不会为他们立即改变。当您等待“服务器配置更改请求”获得批准时,“多命令”技巧将始终有效:)不过,我已经用这些信息更新了答案,因为如果您能够做到这一点,肯定会更容易。谢谢,谢谢,但我很确定我不可能得到那种访问。仅获取此文件夹的Perforce访问权限就花了一周多的时间…您需要多久执行一次?一次,每小时,一周一次?也许你可以下载一批文件到searchWell,到目前为止,在我来这里的三个半月里——一次。我需要搜索的代码不是当前代码(我在本地确实有),而是一个较旧的存档版本。已经足够大了,大部分从事这项工作的人都不再在这里工作了,甚至没有人知道如何获得许可。。。这是一家大公司,很多像这样的东西有时都会出现问题。Perforce因为糟糕的管理员而名声扫地,听起来你正面临着这个问题。看看是否可以让IT支持人员处理您的案例并获得旧版本的权限,然后同步部分代码,直到找到所需的字符串。通过一次一个地对每个顶级目录进行灰显,帮助您绕过文件限制。适应环境。整洁-如果我需要再次这样做,我可能会尝试,尽管我担心如果我经常这样做,我可能会因为在服务器上使用太多CPU时间而收到IT人员的愤怒电话。。。
for dir in $(p4 dirs //depot/trunk/*); do
  p4 grep -s -i -e the_search_string $dir/...
done