在早上同步我的 Perforce 客户端之前,我想阅读所有会影响我的更改列表的差异和日志消息。不过,不幸的是,我找不到一种简单的方法来使用p4 changes
P4V 或 P4V 列出此类更改列表。不过,我怀疑我缺少一些简单的东西。
有没有一种方法可以列出自上次同步客户端以来提交的所有更改列表?如果我能从以前的 depot 修订中获得完整的描述和差异,就像p4 describe
单个变更列表一样,那就更好了。
在早上同步我的 Perforce 客户端之前,我想阅读所有会影响我的更改列表的差异和日志消息。不过,不幸的是,我找不到一种简单的方法来使用p4 changes
P4V 或 P4V 列出此类更改列表。不过,我怀疑我缺少一些简单的东西。
有没有一种方法可以列出自上次同步客户端以来提交的所有更改列表?如果我能从以前的 depot 修订中获得完整的描述和差异,就像p4 describe
单个变更列表一样,那就更好了。
简单的答案是:
p4 changes -l "...#>have"
您需要引号来避免您的外壳进行重定向。
您可以简单地迭代更改并在每个更改上调用“p4 describe”。
您可以使用“p4 diff2”获得完整的差异(假设您想要一个 unidiff):
p4 diff2 -du ...#have ...#head
但这并没有为您提供每个更改列表的差异。
谨防!
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 删除的文件的旧更改列表。如果您在仓库中有很多历史记录,那么性能也可能非常糟糕。
p4 sync -n ... | cut -f1 -d' ' | p4 -x- changes -m1 | sort | uniq
非常接近,但如果自上次同步以来已多次编辑文件,则无法列出较旧的更改列表。对于要同步的每个文件,它也会访问一次软件仓库,因此性能可能真的很差。
较新版本的 P4V(从 2009.2 开始,可能是 2009.1)具有称为仪表板的东西,其中包含多个“任务”。其中之一是尚未同步到您的工作区的变更列表。
在菜单栏中转到查看 -> 仪表板。DashBoard 选项卡栏右侧有一个齿轮图标,可让您配置选项。其中之一是“我的工作区中的文件不是最新版本”。未同步的文件由更改列表组织。
这个问题的答案有帮助吗?
据我所知,您必须存储上次同步的日期/时间,然后解析输出p4 changes -t
以在您的日期之后显示这些更改列表。
随着时间的推移,您最终可能会围绕您对 Perforce 的使用构建许多小代码片段。将它们全部捆绑到一个包装脚本中可能是个好主意,该脚本会为您调用 p4 并将命令传递给它,无论是否有额外的自定义步骤。
如果您使用这种带有纪律的包装器(即不直接调用 p4),让它存储您同步到的最后一个更改是微不足道的。
在 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)
我建议您将这些数据通过管道传输到文件中,以便更容易查看。