所有更改注释到2个标签之间的perforce分支? (包括合并)

时间:2009-01-22 22:19:51

标签: version-control merge perforce

我们的perforce管理员限制了“max-row”扫描,这样我第一次运行以下内容的想法就不起作用了:

  1. 所有更改包括在特定标签时间1
  2. 中集成到分支
  3. 所有更改包括在特定的早期标签时间2
  4. 中集成到分支
  5. 从时间1减去时间2更改以获得带注释的新更改。
  6. 是否有另一种方法可以在没有如此大规模查询的情况下获得相同的结果(当perforce包含7年的历史记录时,-i触发扫描回到历史的曙光)

    根据Gregs的评论添加了这条评论:

    基本上,重点是看看在2个标签之间的特定版本分支中修复了哪些错误(或者更常见的是,某些旧标签和今天)。 我希望简化(加速)我们目前拥有的太复杂的脚本,它查看进入发布分支的更改,它跟随进入它们的文件至少有2个分支,以便从原始更改打印出所有变更集注释(临时合并评论往往只是说merge123之类的东西,而不是实际变更评论的描述,所以我们需要将树向上走到原始评论),脚本最终输出如下所示(我们把质量中心ID进入变更集评论):

    1. qualityCenterId123 - 修正了一些错误
    2. gui qcId124中的
    3. - 修复了其他一些
    4. bug qcId125 - 修复了其他一些错误
    5. merge123
    6. 根据评论更新:

      Toby方法的问题在于,代码分支的大部分更改都是通过集成实现的,-i会包含这些更改,但正如所声明的那样,将查询分解到这样的程度,即由于perforce服务器上的负载,我们的管理员赢了“让它运行。所以这就是为什么我正在寻找另一种方法来获得相同的结果。

4 个答案:

答案 0 :(得分:1)

您的标签在创建时不仅仅是最新的更改列表吗?例如,您真的需要在客户端工作区中记录特定文件吗?如果没有,您可以非常轻松地比较最接近标签的两个更改清单。

假设对您的第一个标签日期的最接近的更改是23000,而您的关闭更改为您的第二个标签日期是25000然后

p4更改// depot / PATHTOMYCODE /...@ 23000,@ 25000

将为您提供这两个更改列表之间代码路径的所有更改。

答案 1 :(得分:1)

我看不出一个简单的答案,但确实有一些建议可能有助于指出正确的方向。

  1. 说服您的管理员提高maxscan行数限制。如果他感到紧张,这将导致整个用户群出现问题,只需让他将您添加到新用户组(例如“脚本”),并为该组设置限制。这将导致只有该组的成员可以使用上限,然后您可以协商适当的时间来运行脚本。你甚至可以在一夜之间完成。
  2. 查看P4 admin guide并查看脚本编写的任何提示是否有帮助 - 例如也许更严格的数据视图将限制查询足以不破坏maxscanrows限制。
  3. 你的SQL怎么样?您可以使用P4Report工具构建有效的查询。
  4. 尝试在Perforce邮件列表中提问。这是一个非常活跃的列表,有很多非常有经验的人非常有帮助。注册页面请参见this link。他们很可能会提出一些好的方法。
  5. 对于yoru现有标签可能为时已晚,但考虑使用作业系统来跟踪工作。 Perforce具有内置的查询工具,可以跟踪哪些作业进入了不同的分支。但是,它确实需要为您的团队进行工作实践变更。
  6. 抱歉,我无法提供更具体的答案。

答案 2 :(得分:0)

普通的Label-diff不会做你想要的吗?

  • 来自P4V,工具 - >差异。选择两个标签
  • 从P4Win右键单击标签,选择2个标签中的差异文件
  • 从命令行,p4 diff2 //codeline /...@label1 // codeline /...@ label2

或者我完全错过了你的目标?

Ville对上述评论后的进一步建议

如果您只是在每个更改列表的信息之后,而不是每个文件,那么从命令行尝试“p4交换”。这将为您提供一个分支中的更改在另一个分支中未发生的摘要,并且您可以提供修订范围以将其限制为您需要的标签。

有关详细信息,请从命令行执行“p4 help interchanges”。

不幸的是,交换命令尚未在P4V或P4Win中公开。

答案 3 :(得分:0)

如果您的标签是简单的变更列表,Toby Allen的答案是最好的方法。

如果标签更复杂,那么我认为您需要查看每个标签中的所有文件以及它们的版本不同的位置,找到版本更改的更改列表。

您可以使用以下命令获取文件和版本列表:

p4 fstat -Of //...@MyLabel

编辑:

考虑两个复杂的标签:

VERSION_A:
 //depot/file_A.cpp#4
 //depot/file_B.cpp#7
 //depot/file_C.cpp#1

VERSION_B:
 //depot/file_A.cpp#6
 //depot/file_B.cpp#5
 //depot/file_C.cpp#4

在此示例中,标签不描述特定的更改列表,每个文件的头部更改可能不同。

如果您可以使用这样的标签,那么您可以在每个标签上运行p4 fstat命令,然后找出差异。在此示例中,file_A.cpp已更改两次,file_C.cpp已更改3次。 file_B.cpp在第二个标签中较旧,因此可以忽略它。

现在您需要查看涉及这些版本的更改:

file_A.cpp#5
file_A.cpp#6
file_C.cpp#2
file_C.cpp#3
file_C.cpp#4

可以使用p4 filelog检索这些更改,因此您希望运行以下内容:

p4 filelog file_A.cpp#6
p4 filelog file_C.cpp#4

然后您需要删除任何重复项和早期版本的任何历史记录。

就像我说的,如果你有麻烦的标签,你只需要这个。如果有任何方法可以让你的标签代表变更清单,你应该使用Toby Allen的答案。