(我是新的perforce用户,但过去曾使用过很多其他源代码控制系统。)
我们使用更改列表来检入每个错误修复;更改列表注释包含错误ID,因此很容易跟踪错误修复签入分支的时间。
但是我看不到一个简单的方法来查找已经合并到的给定错误修复的所有分支,或找到已合并到给定分支的所有错误修复。
据我所知perforce不跟踪所有分支,变更列表已合并到其中。据我所知,当在perforce中完成合并时,历史记录不会被复制到目标分支中,因此在更改列表的注释中目标中的唯一历史记录已完成合并。
我错过了什么?
答案 0 :(得分:15)
Perforce跟踪已整合文件修订的位置,但它不会自动传播带有错误跟踪元数据的签入注释。
鉴于特定分支上的变更列表,您可以通过要求Perforce集成变更列表来判断Perforce是否认为变更列表已经集成。 (我在更传统的源代码控制意义上使用“分支”,意思是源代码树的特定分支,而不是特定的Perforce意义,意味着这两个源代码树之间的集成路径。)让我们假设您一直在//source/project/trunk/...
工作,并且您有一个更改列表@ 1234,您想检查它是否已集成到您的发布分支//source/project/rel/...
中。创建映射//source/project/rel/...
并执行:
$ p4 integrate -n //source/project/trunk/...@1234,1234 //source/project/rel/...
如果Perforce告诉您“已经集成了所有修订版本。”,则集成了更改列表@ 1234,并且应该在发布分支上提供该错误修复。如果Perforce列出已更改的文件,则表示尚未集成这些文件。 (也可以将变更列表中的某些文件集成而不是其他文件,这可能会产生一些有趣的问题。)
这不能很好地扩展 - 您需要检查您关心的每个分支上的每个错误修复,尽管它确实适合自动化。
您可以使用“不受支持的”Perforce命令interchanges
快速了解哪些更改列表未从一个分支集成到另一个分支。 (用Perforce的说法,“不支持”意味着“在下一版本中可能不会起作用,但我们认为它可能有用,所以无论如何我们都会发布它。”)看看哪些更改列表没有从我们的版本中集成示例trunk用于释放分支,执行:
$ p4 interchanges //source/project/trunk/... //source/project/rel/...
Change 1236 on 2010/10/10 by user@client 'Fixed some bug you don't care about'
Change 1235 on 2010/10/09 by user@other_client 'Fixed some other random bug'
在这个例子中,我没有列出更改列表@ 1234,因为它已经集成到发布分支中。我使用interchanges
遇到的一个问题是它会在未经整合的更改之后列出每个较新的修订版,即使新的版本本身已经集成,所以如果您正在挑选发布分支的修订版,那么再看一下列出的变更清单。我使用interchanges
作为第一遍来粗略了解我需要整合的内容,然后查看integrate
以更好地了解真正缺少的内容。
(Perforce还支持类似的“作业”概念,让一个人特别修改特定的更改列表,但我的组织不使用它们,所以我不知道它们的工作情况或它们是否自动传播集成。)