3

Perforce を使用して、開発ブランチからメイン ブランチへの統合を自動化しようとしています。ブランチ マッピングをセットアップしており、ブランチ全体の変更を自動的に統合できることがわかっています。ブランチ全体で統合する方法があるかどうか疑問に思っていましたが、一度に1つの変更リストを順番に実行しますか?

たとえば、今日、3 人の開発者が変更リスト # の 1、2、および 3 を使用して、開発ブランチに変更を送信しています。p4 integrate -b branchname を実行する方法はありますか? 1? そうすれば、問題が発生した場合に、特定の変更リストだけを取り消すことができますか? または、統合する必要がある最も古い変更リストのみを統合するように指示できれば、変更リスト 1 を統合し、ビルドのスモーク テストを行ってから、変更リスト 2 を統合することができます。

同僚の 1 人がジョブの使用について言及しましたが、私が理解している限りでは、ジョブはバグなどに関する情報を自動化することしかできず、実際に統合を自動的に実行することはできません。

答えが明白な場合は申し訳ありませんが、私はまだPerforceに比較的慣れていません。私はオンラインで見回しましたが、何も見つかりませんでした。

4

3 に答える 3

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 に答える
0

「p4 インターチェンジ」は、2011.1 リリースで正式にサポートされる予定です。

最初の回答が示したように、「インターチェンジ」を使用して、マージする必要がある変更リストのリストを取得できます。その後、それぞれを個別に統合して解決し、最後にまとめて送信できます。

于 2011-09-27T14:14:11.657 に答える
0

チェンジリストごとにチェンジリストを統合したい場合、最善の策は「p4 interchanges」コマンドを使用することです(コマンドラインでのみ使用できると思います)。交換コマンドを使用して、ソースからターゲットに統合する必要がある変更リストを見つけることができます (これを行う方法のさまざまな方法については、コマンド ラインの使用法を参照してください)。

あなたの最善の策は、このコマンドをいくつかのスクリプト (python、perl、またはその他を介して) でラップし、interchanges コマンドを呼び出してから、interchanges が返すすべての変更リストに対して、統合を実行し、スモーク テストを実行してから繰り返すことです。 .

交換コマンドはまだサポートされていないことに注意してください (バージョン 2010.2 の時点)。使用状況、ブランチの複雑さ、およびプロジェクトのサイズに応じて、使用量のマイレージは異なる場合がありますが、私たちの (大規模な) プロジェクトでは、非常にうまく機能しています.

お役に立てれば。

于 2011-09-26T20:53:59.523 に答える