简短版本:
在P4中分支之后,我如何才能找到分支的“源”变更列表?
长篇版本:
假设我的项目的一个主要分支是
//project/main/...这里提交的最新变更单是@123,当我决定为1.0版创建一个分支时
//project/1.0/...从P4V创建了一个新的变更列表(例如@130),解析并提交。
从CLI来看,它应该是这样的:
p4 integrate -c 123 -o //project/main/... //project/1.0/...
p4 submit稍后,我将查看//project/1.0下的变更列表,并看到包含大量分支文件的@130变更列表。我怎么才能找到改变者不。它最初是从(即@123)中分支出来的吗?
发布于 2010-11-09 16:03:48
p4 changes将显示提交的变更者列表,可选地过滤到特定路径。
p4 changes //project/main/...
Change 123 ... 'Very last change.'
Change 122 ... 'Next-to-last change.'
Change 100 ... 'Only two changes to go...'
...这并不奇怪,但是,正如您所发现的,当您将所有这些更改集成到一个更改中时,p4 changes就不太有用了:
p4 changes //project/1.0/...
Change 130 ... 'Integrated everything from main.'诀窍是使用-i 选项,其中包含集成到指定文件中的所有变更者。
p4 changes -i //project/1.0/...
Change 130 ... 'Integrated everything from main.'
Change 123 ... 'Very last change.'
Change 122 ... 'Next-to-last change.'
Change 100 ... 'Only two changes to go...'
...要得到您想要的结果(123),您需要编写一个脚本,该脚本过滤来自p4 changes -i //project/1.0/...的输出,以删除p4 changes //project/1.0/...列出的任何更改(然后接受最新的剩余更改)。
(在探索时,我还经常发现-m max选项很有用。这限制了最近的“最大值”的变化。这有助于您的输出,而不是在屏幕外流动时,有许多变化。)
发布于 2010-11-04 13:40:20
我不知道有任何简单的命令可以执行您想要做的事情。如果您愿意编写一些脚本,并且命令不必执行得很快,那么您也许可以尝试为所有分支文件编写如下脚本:
(或者也许可以采取简单的方法,请求Perforce支持)
发布于 2014-07-16 12:17:26
由于到目前为止,所有的答案都没有提供找到分支的源代码或根变更列表的代码,所以我想我应该提供一个一行代码来完成这个任务。此方法基于@Cwan的建议,并将打印创建分支的“父”变更列表。需要用分支创建变更列表(即提交给新分支的第一个变更列表)替换FIRST_BRANCH_CL参数。作为一个具体的例子,用原来问题中的FIRST_BRANCH_CL代替130,这个一行将输出123。
p4 describe -s FIRST_BRANCH_CL | perl -lne 'if(/^\.\.\. (.+#[0-9]+) .+$/) {print quotemeta $1}' | xargs p4 filelog -m1 | perl -lne 'if(/^\.\.\. \.\.\. branch from (.+#[0-9]+)/) {print quotemeta $1}' | xargs p4 fstat | perl -lne 'if(/^\.\.\. headChange (\d+)/) {$MaxCL=$1 if($1 > $MaxCL)} END {print $MaxCL}'https://stackoverflow.com/questions/4088420
复制相似问题