如何在Perforce树中查找未跟踪的文件? (svn状态的类似物)
有人拥有脚本或者别名来在Perforce树中查找未跟踪(实际上是未添加)的文件吗?
编辑:我更新了对此的可接受的答案,因为看起来P4V在2009年1月的发行版中对此添加了支持。
解决方案
回答
啊,Perforce的经典著作之一:)是的,这真是令人遗憾,默认命令中还没有简便的方法可以实现这一点。
最简单的方法是运行命令以找到客户端根目录下的所有文件,然后尝试将它们添加到软件仓库中。最后,我们将获得所有新文件的更改列表,而现有文件将被忽略。
例如dir / s / b / A-D | p4 -x添加
(从nix命令行使用'find。-type f -print')。
如果需要物理列表(在控制台或者文件中),则可以通过管道传递差异结果(如果需要,也可以添加它们在变更列表中)。
如果在P4Win中运行此命令,则可以使用$ r替换当前工作区的客户端根目录。
回答
在linux上,或者如果我们在Windows上安装了gnu-tools:
find . -type f -print0 | xargs -0 p4 fstat >/dev/null
这将为每个未解释的文件显示一条错误消息。如果要捕获该输出:
find . -type f -print0 | xargs -0 p4 fstat >/dev/null 2>mylogfile
回答
或者从P4Win中使用左侧视图面板上的"本地文件不在仓库中"选项。
我使用P4V的次数不多,但是我认为这等效于在"工作区"视图选项卡的过滤器下拉列表中选择"隐藏本地工作区文件"。p4help fstat
在P4V 2015.1中,我们可以在过滤器按钮下找到这些选项,如下所示:
回答
在Unix下:
find -type f ! -name '*~' -print0| xargs -0 p4 fstat 2>&1|awk '/no such file/{print }'
这将打印出客户端或者Perforce软件仓库中未添加的文件列表。我用过! -name'*〜'
排除以〜结尾的文件。
回答
我在工具中使用以下内容来备份工作区中与存储库不同的所有文件(对于Windows)。它可以处理一些Perforce不太喜欢的奇怪情况,例如嵌入的空格,星号,百分比和井号:
dir /S /B /A-D | sed -e "s/%/%25/g" -e "s/@/%40/g" -e "s/#/%23/g" -e "s/\*/%2A/g" | p4 -x- have 1>NUL:
" dir / S / B / A-D"以"裸"格式(/ B)列出此文件夹(/ S)或者以下的所有文件,但不包括目录(/ A-D)。 " sed"将危险字符更改为其"%xx"形式(例如HTML)," p4 have"命令对照服务器丢弃此列表(" -x-"),丢弃该文件实际上位于存储库中的任何内容(" 1> NUL:")。结果是一串像这样的行:
Z:\No_Backup\Workspaces\full\depot\Projects\Archerfish\Portal\Main\admin\html\images\nav\navxx_background.gif - file(s) not on client.
等等!
回答
编辑:请立即使用" p4状态"。不再需要跳铁圈了。请参阅@ColonelPanic的答案。
在2009年1月版的P4V中,我们可以右键单击工作区树中的任何文件夹,然后单击"协调离线工作..."。
这将进行一些处理,然后显示未检出但与软件仓库版本有所不同或者根本未检入的文件的拆分树视图。它甚至可能提出其他一些类别。
我们可以在此视图中右键单击文件,然后将其检出,添加或者什至还原它们。
这是一个非常方便的工具,已经节省了我几次。
编辑:啊,这个问题专门询问了脚本,但是为了以防万一,我将在这里留下这个答案。