代码之家  ›  专栏  ›  技术社区  ›  Cristian Diaconescu

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

  •  13
  • Cristian Diaconescu  · 技术社区  · 14 年前

    在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 回复  |  直到 14 年前
        1
  •  8
  •   Jon-Eric    14 年前

    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变更 当您将所有这些更改集成到一个更改中时,没有太大帮助:

    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 选项有用。这个 将更改限制为最新的“最大值”

        2
  •  1
  •   rjnilsson    14 年前

    我不知道有哪个简单的命令可以执行您想要执行的操作。如果您愿意编写一点脚本,并且命令不必执行得很快,那么您可以尝试编写如下脚本 全部的

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

      p4文件日志 //项目/1.1/foo.bar#1
      //项目/1.1/foo.bar
      ... #1由foo@bar(文本)“Release 1.1”于2009年7月10日更改6416分行
      ... ... 分支自 #1个,

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

      //项目/main/foo.bar#2

      ... 头部动作编辑
      ... 头型文本
      ... 人头时间1201771167
      ... 引水阀2
      ... 头部变化
      ... 人头模型时间1201770971

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

    (或者可以采取简单的方法,请求Perforce支持)

        3
  •  1
  •   troydj    10 年前

    由于到目前为止没有一个答案提供了查找分支的源或根变更列表的代码,我想我应该提供一个一行程序来完成这项工作。此方法基于@Cwan的建议,并将打印从中创建分支的“父”变更列表。这个 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}'
    
        4
  •  0
  •   Dennis    14 年前

    简短的回答 :

    在P4V中使用修订图是通过时间后退并调查集成历史。 Video on the Perforce website .

    冗长的回答 :

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

        5
  •  0
  •   Toby Allen mercator    14 年前

    //project/1.0/...
    

    找到最早提交的变更列表后,该变更列表中的任何一个文件都将查看其修订图,这将显示文件(和其他文件)从中集成的分支。

    我看看能不能用p4命令来做同样的事情。

        6
  •  0
  •   Chance    14 年前

    更新答案: 我想这能行。试试这个:

    p4 interchanges from_branch  to_branch
    

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

    认为 这会奏效的。可能会有一些特殊的情况下,它不会,但这是我对一个艰难和重要的问题最好的猜测。

        7
  •  0
  •   Jesper    8 年前

    “p4集成”对我有效。在描述中查找“复制自”