2

TeamCity Visual Stuioプラグインに「Mercurialのリモート実行(パーソナルビルド)」機能を追加するというアイデアをいじっています。

v6.5以降、TeamCityは「リモート実行ブランチトリガー」をサポートします。TeamCityのトリガーに一致する名前付きブランチがプッシュされると、TeamCityはそのブランチのパーソナルビルドを実行します。

アイデアは、現在のブランチ(たとえばdefault)から現在の発信チェンジセットを取得し、それらをと呼ばれる一時的な名前付きブランチに移動することremote-runです。次に、これがCIにプッシュされるため、パーソナルビルドがトリガーされ、パーソナルビルドが成功すると、変更が元のブランチに戻され、remote-runブランチが削除されます。

これに関していくつか質問があります:

  1. それも意味がありますか?
  2. これにはどの拡張子を使用する必要がありますか?MqExtensionは必要なすべてを実行すると思いますが、代替手段はありますか?
  3. リモート実行中にユーザーが追加の変更をコミットするとどうなりますか?「一時的なブランチ」のチェンジセットはどのように元のブランチにマージされますか?

私が現在ターゲットにしているシナリオは次のとおりです。デフォルトのブランチで作業しているときに、ユーザーは3つの新しいリビジョンを追加します。次に、これらの変更をTeamCityの個人用ビルドとして実行したいと考えていますが、特別な名前のブランチにこれらのリビジョンをコミットするのを忘れていました。代わりに、私のアドインはそれらの送信変更を受け取り、名前付きブランチに配置します。パーソナルビルドが成功すると、それらの変更は元の(デフォルトの)ブランチに戻され、リモートリポジトリにプッシュされます。

このようなもの:

[default] A---B---C---D

BCおよびDが新しいリビジョンであると仮定して、ツールに次のことを実行させます。

[default] A
           \
            [remote-run] B---C---D

そして、それが完了したら、元の状態に戻します。つまり、次のようになります。

[default] A---B---C---D

編集:私はMqを使用して変更を別のブランチに移動することができましたが、これは非常に簡単でした。残念ながら、この変更を元に戻す方法がわかりません:)

これが理にかなっていることを願っています!

4

2 に答える 2

2

ビルドが成功したら、TeamCity で VCS ルートにタグを付けることができます。別のブランチを使わずに、成功した各ビルドをデフォルトでタグ付けする方が理にかなっているのではないでしょうか?

あなたの使命の背後にある動機についてはよくわかりませんが、具体的にどのようなワークフローから恩恵を受けたいですか?

項目 3 に関しては、自動マージがデフォルトに戻ることを保証する方法はありません。マージの競合がある場合、「個人用ビルド」のビルド構成に入れるコマンド スクリプトは、特に「CI」ではなく、安定した状態に戻すために手を握る必要があります。

申し訳ありませんが、最初のパスではこれ以上お手伝いできません。

于 2011-11-17T01:40:24.533 に答える
1

それがまさに「hg rebase」コマンドの目的です。あなたの場合、使用

hg rebase -s B -d A --detach

必ず最新バージョン (最新の夜のビルド) を使用してください。最近、この特定の状況に影響を与える可能性のあるバグが修正されました。また、これを機能させるには、「rebase」拡張機能を有効にする必要があります。~/.hgrc (または mercurial.ini) ファイルに次の行があることを確認してください:

[extensions]
rebase = 

EDIT:反対の質問(ローカルブランチを削除する方法)に答えたようです。新しい名前付きブランチを作成し、それに B、C、D リビジョンをインポートするには、次の一連のコマンドが必要です。

hg qimport -r tip:B       #Revisions B,C,D will be imported into mq
                          #(here B is revision id of the "B" commit)
hg qpop --all             #Unapply all patches
hg branch remote-run      #Create a new branch
hg qpush --all            #Push patches into the new branch
hg qfinish -a             #Transform applied patches to regular commits
于 2011-11-22T09:35:27.447 に答える