Perforce:查找分支的源更改列表

时间:2010-11-03 15:04:16

标签: version-control perforce branching-and-merging

简短版本:

在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)?

7 个答案:

答案 0 :(得分:8)

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选项很有用。这个限制了对最近“最新”的更改。这有助于在有很多变化时输出不会流出屏幕。)

答案 1 :(得分:1)

我不知道任何执行你想做的简单命令。如果您愿意编写一点脚本且命令不必快速执行,您可能会尝试为所有分支文件编写类似以下内容的脚本:

  1. 查找目标文件的源文件/修订版。

      

    p4 filelog // project / 1.1 / foo.bar#1
      //project/1.1/foo.bar
      ...#1在2009/07/10改变6416分支由foo @ bar(文本)'Release 1.1'发送   ......分支来自 // project / main / foo.bar #1,#2

  2. 获取提交源文件/修订的更改列表。

      

    p4 fstat // project / main / foo.bar#2
      ... depotFile //project/main/foo.bar
      ... headAction编辑
      ... headType文本
      ... headTime 1201771167
      ... headRev 2
      ... headChange 5353
      ... headModTime 1201770971

  3. 对分支中的所有文件重复并选择最高更改号(上面的headChange),这应该是在分支该特定文件之前提交给父级的最新更改。您可以使用以下方法获取所有分支文件的完整列表: “p4 files //project/1.0 /...# 1”。

  4. (或者可以采取简单的方法并要求Perforce支持)

答案 2 :(得分:1)

由于迄今为止没有一个答案提供了查找分支的源或根变更列表的代码,我想我会提供一个单行代码来做到这一点。这种方法基于@ 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}'

答案 3 :(得分:0)

简短回答

使用P4V中的修订图表后退并研究集成历史记录。 Video on the Perforce website

我已成功在具有数千个文件的分支上使用修订图,以跟踪特定更改何时集成到分支中。这就是为什么我推荐它并链接到培训视频,因为大多数人低估了它,因为他们不知道如何使用它。

答案很长

... [已删除]

更新:由于修订图显然不可行,您可以使用流程/策略解决此问题,即,当您执行集成时,在描述“Branched @ CL 123”中添加注释”。当从主干到释放线集成时,我们自己使用了这种方法。

答案 4 :(得分:0)

更新后的答案:我认为这样可行。试试这个:

p4 interchanges from_branch  to_branch

这将显示从主分支到发布分支的未集成更改。我相信您可以使用最大变更列表编号减1来查找您的源更改列表。 interchanges是未记录的Perforce CLI功能。要了解更多信息,请键入p4 help interchanges以了解有关此命令的更多信息。

再次,我认为这将有效。可能会有一些不会发生的特殊情况,但这是我对一个棘手而重要问题的最佳猜测。

答案 5 :(得分:0)

如果您使用p4v中的历史记录选项卡,它将显示针对分支提交的所有更改列表,因此请查看此内容

//project/1.0/...

一旦找到最早提交的更改列表,然后在该更改列表中的任何一个文件中查看其修订图,这将显示文件(以及其余文件)的集成分支。< / p>

我会看看我是否可以使用p4命令来执行相同的操作。

答案 6 :(得分:0)

&#34; p4整合&#34;为我工作。寻找&#34;复制来自&#34;在说明中