6

我想知道尝试删除已提交的更改列表有什么意义,因为已提交的更改列表不应该为空。

但是后来我正在使用教程库,并在整个分支上使用 obliterate 命令,我可以看到在某些情况下您可能会得到空的已提交更改列表(需要使用 -f 标志删除)。

但是,我不知道如何使用命令行找到它们,因为我不知道如何查找没有关联文件的更改列表。

有没有简单的方法可以做到这一点?

谢谢,

托马斯

4

4 回答 4

6

啊!

在问这个之前我应该​​浏览更多文档......

http://public.perforce.com/wiki/Perforce_Command_Line_Recipes

描述:删除所有空提交的变更列表。
shell命令:p4修改-s提交| 剪切 -d " " -f 2 | xargs -n1 p4 更改 -d -f
Powershell:p4 更改 -s 提交 | %{p4 更改 -d -f $_.split()[1]}
px: px -F %change% 更改 -s 提交 | px -X- change -d -f
贡献者:Sam Stafford、Philip Kania、Shawn Hladky

呃。

托马斯

于 2009-10-16T09:41:32.360 回答
1

要简单地查找所有提交的空更改列表而不删除它们,您可以比较以下两个命令的输出:

  • p4 changes -s submitted- 所有更改列表
  • p4 changes -s submitted //...- 带有关联文件的所有更改列表

例如,在 Windows PowerShell 中,运行

diff -ReferenceObject (p4 changes -s submitted) -DifferenceObject (p4 changes -s submitted //...)
于 2015-06-16T15:36:51.163 回答
0

当我在 Windows 上时,我创建了一个小脚本,在 PERL 中执行完全相同的操作,而不是 Shell、powershell 或 px :):

#*******************************************************************************
# Module:  delete_empty_changelist.pl
# Purpose: A script to delete empty changelist
# 

@list = `p4 changes -s submitted`;

foreach $chg (@list)
{
 $chgnbr = (split /\s+/, $chg)[1];
 print `p4 change -d -f $chgnbr`;
 }     
exit 0;

请注意,实际上,在所有情况下,它都不是一个非常聪明的脚本:它会尝试绝对删除每个提交的更改列表,并且会被强制阻止这样做,因为如果文件与之关联,您将收到错误消息。

我想应该将脚本的结果发送到日志并解析,以便仅突出显示相关行。

运行脚本将产生类似于以下内容的输出:

Change 857 has 1 files associated with it and can't be deleted.
Change 856 has 1 fixes associated with it and can't be deleted.
Change 855 has 1 fixes associated with it and can't be deleted.
Change 854 deleted.
Change 853 has 1 fixes associated with it and can't be deleted.
Change 852 has 8 files associated with it and can't be deleted.
Change 851 has 1 files associated with it and can't be deleted.
Change 850 has 2 files associated with it and can't be deleted.
Change 849 has 2 files associated with it and can't be deleted.
Change 846 deleted.
Change 845 has 2 files associated with it and can't be deleted.

干杯,

托马斯

于 2009-10-16T14:54:03.933 回答
0

这是仅 DOS CMD 的版本。只需替换 %p4streamsUser%。

    for /f "tokens=* delims=" %%i in ('p4 changes -u %p4streamsUser% -s pending') do (
        for /f "tokens=1-7*" %%a in ("%%i") do (
            echo Deleting CL %%b %%h %%f
            p4 change -d -f %%b
        )
    )

我在 Windows 7 机器上。这将适用于其他几个版本的 windows/DOS。

于 2014-07-18T19:58:00.007 回答