在perforce中,我如何从工作区中的目录中删除文件,其中文件不是工作区的一部分?

时间:2010-07-09 23:30:40

标签: perforce

在perforce中如何从工作区中的目录中删除文件,其中我要删除的文件不是工作区的一部分?

我的文件系统上有一个目录,其中包含从perforce获取的文件,但在某些进程运行后,它会在这些目录中创建一些新文件。

是否有perforce命令删除不属于我的工作区的这些生成的文件?

7 个答案:

答案 0 :(得分:4)

Perforce 2013.2有一个p4 status命令,它是p4 reconcile -n的别名

我不知道它是否在早期版本中可用。

答案 1 :(得分:3)

这是我对p4 nothave的快速实施。

#!/bin/bash
#
# List files present, but not in perforce.

tmpd="$(mktemp -d /tmp/nothave.XXXXXXXX)"
trap "rm -rf $tmpd" EXIT HUP INT QUIT TERM

p4 have | awk -F' - ' '{print $2}' | sort >$tmpd/have.txt

root=$(p4 info | awk -F': ' '$1=="Client root"{print $2}')
find $root -type f | sort >$tmpd/find.txt

comm -13 $tmpd/have.txt $tmpd/find.txt

这将生成一个文件列表,然后可以将其传送到xargs rm以便删除。在删除之前要小心检查列表。你可能会在那里找到你没想到的东西。

答案 2 :(得分:3)

您还可以使用p4v和p4中的“协调脱机工作”选项来完成此操作而无需任何脚本。在p4v中,右键单击Depot视图中的任何目录,然后选择“Reconcile Offline Work”。

中间窗格将显示“不在库中的本地文件”。您可以选择任何或所有这些,右键单击并选择“删除本地文件”。

容易!

答案 3 :(得分:2)

如果使用Linux / Unix,则可以在Bourne shell系列中键入

find . -type f | p4 -x- files 2>&1| grep "no such file" | cut -f1 -d" " | xargs rm

同样,对于符号链接,请键入

find . -type l | p4 -x- files 2>&1| grep "no such file" | cut -f1 -d" " | xargs rm

上面是字母'el',而不是'one'。

Windows中是否有相应的内容我不知道。

答案 4 :(得分:1)

您无法在perforce中修改/删除不属于工作区的文件。您必须为此编写外部脚本。

答案 5 :(得分:1)

这在powershell中有点尴尬,因为p4将not-find-file消息发送到错误流而不是std out。

ps > $error.clear()
ps > dir | %{p4 fstat -T "haveRev" $_} 2>$null
ps > $error | %{$_.Exception.ToString().Split()[1]} | %{del $_}

第二行应该产生错误,例如"FILENAME.EXT - no such file(s)."如果你在错误流中有除了这些异常以外的任何东西,它可能有点不稳定,所以要小心。

答案 6 :(得分:-4)

您可以使用p4 nothave来确定不受perforce管理的文件。根据{{​​1}}的输出,您可以执行p4 nothave,但请确保在运行之前检查p4 nothave | xargs rm的结果(这样您就不会意外删除重要内容) )。