MPS 2020.1 ヘルプ

分岐を伴う移行の使用

分岐を伴うマイグレーションの使用

言語の進化をうまくサポートするために、移行ではクライアントコードを自動的にアップグレードして最新バージョンの言語または複数の言語を使用します。マイグレーションの資料では、MPS でマイグレーションを作成して実行するプロセスについて説明しています。簡単に言うと、言語の変更に準拠するようにモデルを変更するために、言語の作成者は移行を提供できます。MPS はプロジェクトで使用されている言語バージョンを自動的に追跡し、必要な移行を適用するようにエンドユーザーに要求します。

単一のブランチ開発を使用しても驚くことはほとんどありませんが、一般的なチーム設定では、機能とバグ修正のために複数のブランチが必要です。複数のブランチチームでは、異なるブランチで異なるバージョンの言語を使用するような状況には必然的に直面することになります。これは、マージ手順をより困難にします。

無痛マージの主な規則

2 つのブランチを円滑にマージするために、それらのブランチで使用されるすべての言語は同じバージョンでなければなりません。以下は、2 つのブランチで言語バージョンを簡単に同期させることを可能にする簡単なワークフローを説明します。

マージされたブランチのいずれにもマイグレーションは作成されていません

言語バージョンを同期するには、古いブランチの言語を更新して必要な移行を実行するだけです。両方のブランチは同じバージョンの使用言語を持ち、簡単にマージすることができます。

いくつかの移行が作成されました

考えられるすべてのケースは、それらの背後にある同じ考えを持っています。使用される言語のバージョンが異なるブランチを決してマージしないでください。マージする前に、すべてのマイグレーションを両方のブランチに伝搬する必要があります。

1: ブランチの 1 つで 1 つの移行が開発されました

移行を記述するときに行う必要がある唯一の特別なことは、移行自体を含むコミット(C という名前)が存在する必要があることですが、同じコミットでコードを移行しないでください。移行されたファイルは後でコミットできます(たとえば、次のコミット)。
ここでの主なアイデアは、他のブランチに、使用されている言語の異なるバージョンをマージする必要なしに、新しい移行を可能にすることです。

あなたのヒストリーはこのように見えます:

| --- C --- [ ブランチ 1]

------|

| ------------ [ ブランチ 2]

ブランチ b1 と b2 をマージする

  1. b2 を commit C とマージします。これで、b2 に新しい移行ができました。

  2. b2 で移行を実行します

  3. b1 の HEAD と合併する

非常に簡単ですね。

2: ブランチの 1 つでの 2 つ以上の移行

原理は変わりませんが、2 回以上繰り返されるだけです。

| ----- C1 — C2 – [ ブランチ 1]

------|

| ------------ [ ブランチ 2]

  1. b2 を C1 とマージする

  2. b2 で C1 の移行を実行する

  3. C2 とマージ

  4. B2 でマイグレーションを実行する

  5. b1 とマージする

3: ブランチの両方で移行が作成されました

一般に、解決するのが難しいためこの状況を避けることをお勧めします。このシナリオは、すべての移行を 1 つの合意されたブランチ(マスターなど)でのみ作成することで回避できます。

しかし、このような状況に陥った場合は、これを適切に解決する方法があります。

| --- C1 ----- [ ブランチ 1]

------|

| --- C2 ----- [ ブランチ 2]

  1. b2 と C1、b1 と C2 をマージする

  2. b2 で C1 の移行、b1 で C2 の移行を実行します。

  3. ブランチをマージする