我想知道尝试删除已提交的更改列表有什么意义,因为提交的更改列表不应该为空。
但是后来我正在玩教程库,并在整个分支上使用obliterate命令,我可以看到有些情况你最终会得到空的已提交的更改列表(需要使用-f标志删除)。 / p>
但是,我不知道如何使用命令行找到它们,因为我不知道如何查找没有与之关联的文件的更改列表。
有一种简单的方法吗?
谢谢,
托马斯
答案 0 :(得分:6)
啊!
在询问之前我应该浏览更多文档...
http://public.perforce.com/wiki/Perforce_Command_Line_Recipes
说明:删除所有空提交的更改列表 Shell命令:p4更改-s submitted | cut -d“” - f 2 | xargs -n1 p4改变-d -f
Powershell:p4更改-s已提交| %{p4 change -d -f $ _.split()[1]}
px:px -F%更改%更改-s提交| px -X-改变-d -f
撰稿人:Sam Stafford,Philip Kania,Shawn Hladky
咄。
托马斯
答案 1 :(得分:1)
要简单地查找所有空提交的更改列表而不删除它们,您可以比较这两个命令的输出:
p4 changes -s submitted
- 所有更改列表p4 changes -s submitted //...
- 包含相关文件的所有更改列表例如,在Windows PowerShell中,运行
diff -ReferenceObject (p4 changes -s submitted) -DifferenceObject (p4 changes -s submitted //...)
答案 2 :(得分: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;
请注意,实际上,在所有情况下,它都不是一个非常聪明的脚本:它会尝试绝对删除每个提交的更改列表,并且perforce会阻止这样做,因为如果文件与之关联,则会出现错误
我认为应该将脚本的结果发送到日志并进行解析,以便只突出显示相关的行。
运行脚本将产生类似于:
的输出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.
干杯,
托马斯
答案 3 :(得分: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。