显示自上次同步以来提交的Perforce更改列表

时间:2009-06-30 16:18:06

标签: perforce

在我早上同步Perforce客户端之前,我想read the diffs and log messages了解会影响我的任何更改列表。不幸的是,我找不到使用p4 changes或P4V列出此类更改列表的简单方法。我怀疑我错过了一些简单的东西。

有没有办法可以列出自上次同步我的客户以来提交的所有更改列表?如果我可以从先前的软件仓库修订版中获得完整的描述和差异,正如p4 describe对单个更改列表所做的那样,那就更好了。

6 个答案:

答案 0 :(得分:8)

简单的答案是:

p4 changes -l "...#>have"

您需要引号以避免shell执行重定向。

您可以轻松地迭代更改并在每个更改上调用“p4 describe”。

你可以使用“p4 diff2”获得一个完整的差异(假设你需要一个unidiff):

p4 diff2 -du ...#have ...#head

但这并没有给你一个per-changelist差异。

答案 1 :(得分:3)

<强>小心!

p4 changes "...#>have"

不会列出仅包含新/已添加文件的更改列表。

最好的办法是缓存上一个同步点,例如

HEAD=`p4 counter change`
if [ -f lastbuild.txt ]
then
  OLDHEAD=`cat lastbuild.txt`
else
  OLDHEAD=`p4 changes -m1 ...#have`
  echo lastbuild.txt not found!  I will guess that your last sync was @$OLDHEAD
fi
p4 changes ...@$OLDHEAD,$HEAD > changes.txt
# -snip- review changes.txt, perhaps prompt "Continue with sync to $HEAD?"
p4 sync ...@$HEAD
echo $HEAD > lastbuild.txt

使用此方法,如果您自上次更新同步点缓存后提交或者挑选同步任何更改列表,您将得到误报,但最好列出额外的更改列表以供审阅而不是错过一个,尤其是一个包含所有新代码。


请勿在家中尝试

对于后人来说,这里有一些我过去尝试过的最终失败的事情:

p4 changes ...#have > have.txt
p4 changes ...#head > head.txt
diff have.txt head.txt

涵盖了包含所有添加的更改列表的情况,但最终输出错误地包含了在#have中删除的文件的旧更改列表。如果你在仓库中有很多历史记录,那么perf也会非常糟糕。

p4 sync -n ... | cut -f1 -d' ' | p4 -x- changes -m1 | sort | uniq

非常接近,但如果自上次同步以来多次编辑了一个文件,则无法列出旧的更改列表。对于每个要同步的文件,它也会对软件仓库执行一次,因此perf可能非常差。

答案 2 :(得分:1)

较新版本的P4V(从2009.2开始,可能是2009.1)有一个名为Dashboard的东西,其中包含几个“任务”。其中一个是尚未同步到您的工作区的更改列表。

在菜单栏中转到查看 - &gt;仪表板。 DashBoard选项卡栏右侧有一个齿轮图标,可用于配置选项。其中之一是“我工作区中的文件不是最新修订版”。未同步的文件由changelist组织。

答案 3 :(得分:0)

this question的答案是否有帮助?

根据我的记忆,您必须存储同步的最后日期/时间,然后解析p4 changes -t的输出,以便在您的日期之后显示这些更改列表。

答案 4 :(得分:0)

随着时间的推移,您最终可能会围绕使用Perforce构建大量的代码片段。将它们全部捆绑到一个包装器脚本中可能是一个好主意,该脚本为您调用p4并将命令传递给它,无论是否有额外的自定义步骤。

如果您正在使用这种带有纪律的包装器(即不直接调用p4),那么将它存储到您同步的最后一个更改是微不足道的。

答案 5 :(得分:0)

在DOS批处理文件中,您可以执行以下操作:

FOR /F "tokens=2 delims= " %%a IN ('p4 changes -m1') DO (SET TO_CHANGELIST=%%a)
FOR /F "tokens=2 delims= " %%a IN ('p4 changes -m1 -c <client_name>')
       DO (SET FROM_CHANGELIST=%%a)

p4 changes -s submitted @%TO_CHANGELIST%,@%FROM_CHANGELIST%

它将为您提供所有p4更改列表的列表,这些更改列表位于客户端上次同步的更改列表与最近提交的更改列表之间。

如果您想获取更改列表描述和差异,可以使用以下内容替换最后一行:

FOR /F "tokens=2 delims= " %%a 
     IN ('p4 changes -s submitted @%TO_CHANGELIST%,@%FROM_CHANGELIST%') 
     DO (p4 describe %%a)

我建议您将此数据传输到文件中,以便更容易查看。