使用Perforce,我试图自动化从dev分支到主分支的集成。我有分支映射设置,我知道我可以自动整合整个分支的更改。我想知道是否有一种方法可以整合分支,但是按顺序一次做一个变更列表?
例如,今天我们有3位开发人员向我们的dev分支提交更改,其中包含Changelist#的1,2和3.有没有办法进行p4集成-b branchname,但是它为每个分支做了单独的集成changelis,从1开始?这样,如果出现问题,我可以退出某些变更清单吗?或者,更好的是,如果我可以告诉它只集成需要集成的EARLIEST变更列表,那么我可以集成变更列表1,对构建进行冒烟测试,然后集成变更列表2等。
我的一位同事提到使用乔布斯,但据我所知,工作只允许我发布有关错误等的信息,但不允许我实际自动运行集成。
很抱歉,如果答案很明显,我对Perforce仍然相对较新。我在网上环顾四周但找不到任何东西。
答案 0 :(得分:0)
如果您想按更改列表集成更改列表,最好的办法是使用'p4 interchanges'命令(仅在我认为的命令行中可用)。您可以使用interchanges命令找出需要从源到目标集成的更改列表(有关如何执行此操作的各种方法,请参阅命令行用法)。
最好的办法是将此命令包装在某些脚本中(通过python,perl或其他),并调用interchanges命令,然后对于每个交换返回的更改列表,您可以运行集成,运行您的冒烟测试,然后重复。
请注意,仍然不支持interchanges命令(从版本2010.2开始)。根据您的使用情况,分支机构的复杂程度和项目规模,您的使用里程可能会有所不同,但对于我们(大型)项目,它的运行情况非常好。
希望这有帮助。
答案 1 :(得分:0)
'p4 interchanges'将在2011.1版本中正式支持。
如第一个答案所示,您可以使用“交换”来获取更改列表的列表 需要合并的。然后,您可以单独集成和解决每个,并提交 最后一次全部。
答案 2 :(得分: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";