在perforce中如何从工作区中的目录中删除文件,其中我要删除的文件不是工作区的一部分?
我的文件系统上有一个目录,其中包含从perforce获取的文件,但在某些进程运行后,它会在这些目录中创建一些新文件。
是否有perforce命令删除不属于我的工作区的这些生成的文件?
答案 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
的结果(这样您就不会意外删除重要内容) )。