2011-09-26 124 views
3

使用Perforce,我试图自动化从我们的开发分支到主分支的集成。我有分支映射设置,并且我知道我可以自动整合整个分支的变化。我想知道是否有一种方法可以将整个分支整合到一起,但按顺序一次完成一个更改列表?P4V:自动集成更改使用分支映射的更改列表更改列表

例如,今天我们有3个开发人员将更改提交给我们的开发分支,其中包括Changelist#的1,2和3.是否有办法执行p4集成-b branchname,但是是否有单独集成每个changelis,从1开始?那样,如果有问题,我可以退出某些更改列表?或者,更好的是,如果我能告诉它只整合需要整合的最早变更单,那么我可以整合变更单1,冒烟测试构建,然后整合变更单2等。

我的一位同事提到使用乔布斯,但据我了解,就业机会只允许我自动查询有关错误等的信息,但不会让我实际自动运行集成。

很抱歉,如果答案很明显,我对Perforce还是比较陌生的。我环顾四周,但找不到任何东西。

+0

http://stackoverflow.com/questions/5974786/how-to-integrate-every-single-changelist-when-merging-resolving-in-perforce可能会回答你的问题。 –

回答

0

如果您想通过更改列表集成更改列表,最好的方法是使用'p4 interchanges'命令(仅在我认为的命令行上可用)。您可以使用interchanges命令来查明哪些更改列表需要从源代码集成到目标集合(请参阅各种方法的命令行用法,以了解如何执行此操作)。

最好的办法是把这个命令放在一些脚本中(通过python,perl或其他),然后调用交换命令,然后为每个交换返回的变更列表,你可以运行集成,运行烟雾测试,然后重复。

请注意,interchanges命令仍不受支持(截至2010.2版本)。根据您的使用情况,分支机构的复杂程度和项目规模,您的使用里程可能会有所不同,但对于我们的(大型)项目而言,它的运作效果非常好。

希望这会有所帮助。

0

'p4 interchanges'将在2011.1版本中正式支持。

作为第一个答案,您可以使用'interchanges'来获取需要合并的变更列表 。然后您可以单独整合和解决每个问题,并最终一次提交 。

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";