|
|
1
88
对于自动构建系统,我建议使用相反的方法:首先应使用以下方法从服务器获取最新的变更列表:
然后同步到该更改并将其记录在修订信息中。原因如下。虽然 Perforce recommends the following 要确定与工作区同步的变更列表,请执行以下操作:
他们注意到一些问题:
另外还有一个他们没有提到的问题:
如果您必须先同步,然后再录制,则Perforce建议运行以下命令来确定您是否被上述gotchas占用;它应指示未同步或删除任何内容:
|
|
|
2
28
我自己来回答这个问题,以符合Jeff的建议,即使用StackOverflow作为保存技术片段的位置…… 从命令行使用:
只需替换为客户机规范的名称。这将生成以下表单的输出:
它很容易解析以提取变更列表编号。 |
|
|
3
14
您可以尝试在“p4文件”命令的输出中查找最大更改数。不过,工作目录不应包含后同步提交。这只是比
因为后者似乎在服务器上运行,并且可能由于“maxresults”限制而在大型源树上失败。
其中p4lastchange.py基于 Using P4G.py From the Command Line J.T.Goldstone,柯达信息网络/ofoto,2005年4月15日。
|
|
|
4
8
您还可以使用cstat命令: P4帮助CSTAT
|
|
|
5
5
对于严重的生成(正在准备测试的生成),显式指定所需的标签或变更列表编号, 同步到标签, 并将其嵌入到构建工件中。
如果未提供变更列表(或标签),请使用
我认为您不能完全实现您想要的,因为一般来说,整个工作区不会同步到特定的变更列表编号。可以显式地将一些文件与旧版本同步,然后单个变更列表编号就没有意义了。这就是为什么
关于注释:是的,我的答案是供准备一个构建给QA的配置管理器使用的。我们的开发人员通常不会作为构建的一部分进行同步;他们会在提交之前进行构建,以便确保他们的更改不会破坏构建或测试。在这种情况下,我们不需要嵌入存储库标签。 使用这种方法,您可以假设在提交上一个变更列表时整个工作区已同步到head,并且该变更列表包含所有打开的文件。在这些假设中很容易被误解,很难被发现,而且在损失的时间方面非常昂贵。另一方面,解决问题很容易,没有缺点。而且,由于可以显式地指定变更列表编号,所以无论您需要什么修订版,或者代码库更改的速度有多快,都无所谓。 |
|
|
6
4
这是我使用的:
对于同一个客户机,需要2.1秒 |
|
|
7
4
如果您使用的是P4V,则可以以图形方式执行此操作:
|
|
|
8
3
整个仓库(不仅仅是您的工作区/客户机)
完成任务,只告诉最后一个变更列表。 |
|
|
9
2
到目前为止,我发现最好的方法是同步到您想要构建的任何变更列表,然后使用变更-m1/…必须获取当前的本地变更列表(修订版)。 P4同步@changelist_num P4更改-M1/…有awk'打印$2 为您提供可以随时随地使用的变更列表编号。我目前正在寻找一种比P4更改更简单的方法-m1/…。 |
|
|
10
0
我不确定你是否得到了你需要的答案,但我也有类似的问题。目标是在日志中编写项目的特定版本。问题是,当我们制作自己的makefile时,整个构建系统由我们的配置管理控制。这意味着所有说“同步到某个东西然后做某件事”的解决方案都不起作用,而且我不想在每次提交时手动更改版本(错误的可靠来源)。 解决方案(实际上在上面的一些答案中有所暗示)是: 在我们的makefile中,我执行p4更改-m1“./…have” 这样做的结果是更改“用户@client'msg'的日期更改编号” 我只需将消息创建成一个由记录器打印的字符串(更改编号是一个重要元素,但另一个也很有用,可以快速确定某个版本是否包含您知道自己在不进行性能检查的情况下所做的更改)。 希望这有帮助。 |