3

使用 Perforce,我正在尝试自动化从我们的开发分支到我们的主分支的集成。我已经设置了分支映射,并且我知道我可以为整个分支自动集成更改。我想知道是否有一种方法可以跨分支集成,但一次执行一个更改列表,按顺序?

例如,今天我们有 3 位开发人员向我们的 dev 分支提交更改,Changelist # 的编号为 1、2 和 3。有没有办法执行 p4 集成 -b 分支名称但让它为每个 changelis 单独集成,开始与 1?这样,如果出现问题,我可以退出某些变更列表吗?或者,更好的是,如果我可以告诉它只集成需要集成的最早的更改列表,那么我可以集成更改列表 1,冒烟测试构建,然后集成更改列表 2,等等。

我的一位同事提到使用 Jobs,但据我了解,jobs 只会让我自动处理有关错误等的信息,但不允许我实际自动运行集成。

抱歉,如果答案很明显,我对 Perforce 还是比较陌生。我在网上四处寻找,但找不到任何东西。

4

3 回答 3

0

如果您想通过更改列表集成更改列表,最好的选择是使用“p4 交换”命令(我认为仅在命令行上可用)。您可以使用交换命令找出需要从源集成到目标的更改列表(请参阅命令行使用以了解如何执行此操作的各种方法)。

最好的办法是将此命令包装在某个脚本中(通过 python、perl 或其他),然后调用交换命令,然后对于交换返回的每个更改列表,您可以运行集成,运行冒烟测试,然后重复.

请注意,仍然不支持交换命令(从版本 2010.2 开始)。根据您的使用情况、分支的复杂性和项目的大小,您的使用里程可能会有所不同,但对于我们的(大型)项目来说,它运行得非常好。

希望这可以帮助。

于 2011-09-26T20:53:59.523 回答
0

2011.1 版本将正式支持“p4 交换”。

如第一个答案所示,您可以使用“交换”来获取需要合并的变更列表的列表。然后您可以单独整合和解决每个问题,并在最后一次提交。

于 2011-09-27T14:14:11.657 回答
0

这是一个 perl 脚本,它可以帮助您将更改列表从一个分支集成到另一个分支,只需更新下面的分支规范。一个接一个地传递更改列表作为参数。这会做你需要的。

#!/usr/local/bin/perl
my $chnum=$ARGV[0];
die("\nIntegration aborted to avoid including currently open files in the default change!\n") 
    if system ("p4 opened 2>&1 | findstr /c:\"default change\" > NUL: 2>&1") == 0 ;
print "integrating change $chnum\n";
open(FIL,"p4 change -o $chnum|");
while (<FIL>) {
$originator = $1 if /^User:\s*(\w*)/;
last if /^Description:/;
}
$originator = ' by ' . $originator if $originator;
while (<FIL>) {
$description .= $_;
}
print "Description:\n$description\n";
close(FIL);
system ("p4 integ -b <BranchSpec> \@$chnum,\@$chnum");
system ("p4 resolve -as");
system ("p4 resolve -am");
system ("p4 resolve");
open (FIL1,"p4 change -o|");
open (FIL2,"|p4 change -i");
while (<FIL1>) {
if (/<enter description here>/) {
    print FIL2 "    Integration: Change $chnum$originator <From Branch> to <To Branch>:\n";
    print FIL2 $description;
} else {
    print FIL2 $_;
}
}
close (FIL1);
close (FIL2);
print "Finished integrating change $chnum\n";
于 2012-02-17T08:58:52.680 回答