如何从Perforce工作树中删除未跟踪的文件?

时间:2009-08-31 13:28:18

标签: perforce

与Perforce相同的"git clean"是什么?

  

git-clean - 从工作树中删除未跟踪的文件

     

通过从当前目录开始递归删除不受版本控制的文件来清理工作树。

     

-x不要使用从.gitignore读取的标准忽略规则(每个   目录)和$ GIT_DIR / info / exclude,但仍然使用ignore   使用-e选项给出的规则。这允许删除所有未跟踪的文件,   包括构建产品。这可以使用(可能结合使用)   用git reset)创建一个pristine工作目录来测试一个干净的   建立。

     

-X只删除Git忽略的文件。这可能对重建很有用   从头开始,但保留手动创建的文件。

11 个答案:

答案 0 :(得分:14)

使用P4V,您可以右键单击文件夹并选择“Reconcile Offline Work ...”。在中间面板(“不在软件仓库中的本地文件”)中,将列出Perforce可以在文件夹树中找到的所有不在软件仓库中的文件。您可以选择部分或全部,然后右键单击并选择“删除本地文件”

这不是一个脚本,但它比Windows上的大多数其他解决方案容易得多。

答案 1 :(得分:10)

从顶级尝试(对于Unix):

# Find all files and filter for those that are unknown by Perforce
find . -type f | p4 -x - fstat 2>&1 > /dev/null | sed 's/ -.*$//' > /tmp/list
### manually check /tmp/list for files you didn't mean to delete
# Go ahead and remove the unwanted files.
xargs rm < /tmp/list

或者,对于一种干净的-f方法,只需直接管道到xargs rm,而不是先在/ tmp / list中暂存文件列表。

答案 2 :(得分:10)

新的P4 clean应该可以解决问题

答案 3 :(得分:6)

p4 clean“还原工作区文件之间的行为存在细微差别,以匹配相应的库文件的状态 “和git clean”从工作树中删除未跟踪的文件“,请仔细阅读手册。

特别是,vanilla p4 clean将还原您对任何待定更改列表之外的文件所做的更改。因此,使用“干运行”选项p4 clean -n测试结果是明智的。

据我所知:

  • p4 clean -a模拟git clean“从工作树中删除未跟踪的文件。”
  • p4 clean -a -I模仿git clean -x“删除所有未跟踪的文件,包括构建产品。”

令我沮丧的是,git clean -X并没有完全类似于“仅删除Git忽略的文件”,但您可以使用p4 reconcile进行近似处理:

  • p4 reconcile -a && p4 clean -a -I。将删除与忽略列表匹配的未跟踪文件,其他文件将移至默认更改列表。

答案 4 :(得分:4)

没有等价物。 Perforce没有命令删除不受其控制的文件。您可以在工作区选项卡上的P4V中看到它们(它们具有纯白色图标而不是带有绿点的带衬线的图标)并手动删除它们。如果要自动执行该过程,最简单的方法是从工作区中删除文件,删除目录中的所有内容,然后将其重新同步。执行此操作的批处理文件如下所示:

p4 sync "//depot/someFolder/...#0"
erase C:\projects\someFolder\*.* /s /q /f
rd C:\projects\someFolder /s  /q
p4 sync -f "//depot/someFolder/..."

如果在擦除和同步命令上使用强制开关,则第一行是可选的。


然而,该解决方案有其缺点。如果您当前正在处理任何文件,您显然不想将它们删除。此外,如果目录树中有大量数据要清理,则完全同步可能需要一段时间。

更好的方法是使用清洁实用程序(我认为此时我们已超出批处理文件)使用p4 files命令获取版本控制下的文件列表。然后遍历目录中的所有文件,删除那些未出现在列表中的文件。

答案 5 :(得分:2)

你不能,令人沮丧地,。没有svn cleangit clean的类似物。遗憾的是,这些是非常有用的命令。

这是Perforce网站上的一项呼吁,要求开发人员添加一个干净的命令。 https://perforce.ideas.aha.io/ideas/P4V-I-7

答案 6 :(得分:1)

Easy Gui解决方案以及此处已提到的示例: How to find untracked files in a Perforce tree? (analogue of svn status)

答案 7 :(得分:1)

在Linux上,您可以在没有临时文件的情况下执行此操作:

find . -type f | p4 -x- have 2>&1 >/dev/null  | grep "not on client" | cut -d " " -f1 | xargs -ifoo echo rm foo

答案 8 :(得分:0)

在Windows中:

@ECHO OFF
SETLOCAL EnableDelayedExpansion
IF "%1"=="" ( 
    SET proceed=N
    ECHO Are you sure you wish to nuke all files under: 
    ECHO %CD%
    SET /P proceed="Y/N: "
    ECHO !proceed!
    IF /I "!proceed!"=="Y" (
        ECHO Nuking %cd%
        FOR /F "tokens=1 delims=-#" %%G IN ('p4 reconcile -nlad -f ...') do (
            DEL /F "%%G"
        )
    )
) ELSE IF /I "%1"=="-n" (
    ECHO Files to be deleted 1>&2
        FOR /F "tokens=1 delims=-#" %%G IN ('p4 reconcile -nlad -f ...') do (
            ECHO "%%G"
        )
) ELSE GOTO :USAGE

GOTO :STOP

:USAGE
ECHO Usage: nuke [-n]
ECHO     -n will only write the files to be deleted but will not actually delete them

:STOP

答案 9 :(得分:0)

这个效果更好:

@ECHO OFF
SETLOCAL EnableDelayedExpansion
IF "%1"=="" ( 
    SET proceed=N
    ECHO Are you sure you wish to nuke all files under: 
    ECHO %CD%
    SET /P proceed="Y/N: "
    ECHO Looking for files to be deleted.  This may take some time depending on the depth of your tree. 1>&2
    IF /I "!proceed!"=="Y" (
        ECHO Nuking %cd%
        FOR /F "tokens=1 delims=#" %%G IN ('p4 reconcile -nla -f ...') DO (
            DEL /F %%G
        )
    )
) ELSE IF /I "%1"=="-n" (
    ECHO Looking for files to be deleted.  This may take some time depending on the depth of your tree. 1>&2
    ECHO Files to be deleted 1>&2
    FOR /F "tokens=1 delims=#" %%G IN ('p4 reconcile -nla -f ...') DO (
        ECHO %%G
    )
) ELSE GOTO :USAGE

GOTO :STOP

:USAGE
ECHO Usage: nuke [-n]
ECHO     -n will only write the files to be deleted but will not actually delete them

:STOP

答案 10 :(得分:0)

如果我的更改列表没有更改,我会使用下一个命令。

  • 运行&#39; p4调和&#39;用于协调Perforce之外所做的所有更改的命令(如果只需要未跟踪的文件,则可以使用一个密钥)。
  • 运行&#39; p4还原路径\ ...,v&#39;从更改列表中删除服务文件(使用,v后缀,通过协调添加它们),但将它们留在文件系统中
  • 运行&#39; p4还原-w path \ ...&#39; thet从更改列表和磁盘中删除所有其他文件。