1

我们的 perforce 管理员限制了“最大行”扫描,因此我运行以下命令的第一个想法将不起作用:

  1. 所有更改,包括在特定标签时间 1 集成到分支中
  2. 所有更改,包括在特定的早期标签时间集成到分支中 2
  3. 从时间 1 中减去时间 2 更改以获得带有注释的新更改。

是否有另一种方法可以在没有如此庞大的查询的情况下获得相同的结果(当 perforce 包含 7 年的历史并且 -i 触发扫描回到历史的曙光时)

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

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

  1. qualityCenterId123 - 修复了一些错误
  2. 在 gui qcId124 中 - 修复了其他一些
  3. 错误 qcId125 - 修复了一些其他错误
  4. 合并123

根据评论更新:

Toby 的方法的问题是代码分支的大部分更改都是通过集成来实现的,-i 将包括这些更改,但正如所述,由于 perforce 服务器上的负载,我们的管理员不允许查询的程度会爆炸跑步。所以这就是为什么我正在寻找一种替代方法来获得相同的结果。

4

4 回答 4

2

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

  1. 说服您的管理员提高最大扫描行数限制。如果他担心这会导致整个用户群出现问题,只需让他将您添加到一个新用户组(例如“脚本”),并为该组设置限制。这将产生只有该组的成员才能使用上限的效果,然后您可以协商合适的时间来运行脚本。你甚至可以在一夜之间完成。
  2. 看看P4 管理指南,看看是否有任何关于脚本的提示会有所帮助——例如,更严格的数据视图可能会限制查询足以不打破 maxscanrows 限制。
  3. 你的 SQL 怎么样?您可以使用P4Report工具构建高效的查询。
  4. 尝试在 Perforce 邮件列表上提问。这是一个非常活跃的列表,其中有很多非常有经验的人,他们非常乐于助人。请参阅此链接以获取注册页面。他们很有可能会提出一些好的方法。
  5. 对于你现有的标签来说可能为时已晚,但考虑使用工作系统来跟踪工作。Perforce 具有内置的查询工具来跟踪哪些工作已进入不同的分支。但是,它确实需要您的团队改变工作实践。

抱歉,我无法提供更具体的答案。

于 2009-02-04T23:20:32.140 回答
1

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

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

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

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

于 2009-01-26T17:27:22.567 回答
0

普通的标签差异不会做你想要的吗?

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

还是我错过了你所追求的东西?

Ville 对上述内容发表评论后的进一步建议

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

从命令行执行“p4 帮助交换”以获取详细信息。

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

于 2009-01-26T13:28:21.423 回答
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 文件日志检索这些更改,因此您希望运行如下内容:

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

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

就像我说的,只有当你有凌乱的标签时,你才需要这个。如果有任何方法可以让您的标签代表变更列表,您应该使用 Toby Allen 的答案。

于 2009-01-30T20:30:02.797 回答