2016-08-25 10 views
0

コミットM1-M2-M3を持つ既存のGit追跡モジュール(M)を想定します。サブモジュールでコミットを一時的にスキップします

私は、アプリケーション(A)のGitリポジトリをコミットA1-A2-A3としています。リポジトリにはサブモジュール(git submodule add URL DIRECTORY)としてMが含まれていますが、Mでは最新ではありません。代わりに、古いコミットM1(subproject commit 187cac115b5f4fdeb39c25c79e882d30ee9624be)を使用します。

私の問題はこれです:私はコミットM3の内容を使いたいですが、しばらくの間はコミットM2を使用してはいけません。この制限は最終的には終わりますが、現時点では克服できません。では、私の選択肢は何ですか?

Mはサブモジュールではなく、Aの分岐ではありませんでした場合、それは簡単だろう:A3に

  1. Cherry-pick M3、A4を形成します。
  2. M2の制限が満たされたら、M3をA4にマージします。

サブモジュールではわかりません。私が考えることができる唯一の "直接"の解決策は、以下のステップを伴います。

  1. M1にブランチBを作成します。
  2. Cherry-pick M3をBに変換し、M4を形成する。
  3. BをM3に結合し、M5を形成する。
  4. Mをそのリポジトリにプッシュします。
  5. では、Mを更新します。
  6. では、チェックアウトM4。
  7. M2の制限が満たされると、M5をチェックアウトします。

しかし、これは(変更がMに余分な複雑さが、何も持っていないとして)彼が行うには本当の理由を持っていない非常に多く、それらを受け入れるためにMの所有者の意欲に依存しているMの変化を伴います。私はMにそれほど強要する必要のない解決策を好むだろう。

  1. がM3で分岐Bを作成します。

    多分間接的な解決策は、あります。

  2. Reverse-commit M2をBに変換し、M4を形成する。
  3. Mをそのリポジトリにプッシュします。 Aにおいて
  4. 、A、チェックアウトM4
  5. M2上の制約が通過する、チェックアウトM3においてM.
  6. を更新します。

これはMの方がはるかに侵襲性が低く、良好です。しかし、ブランチBは永遠にアンマウントされてしまいました。私は非常に悪い状況だと考えています(私は、「TODOリスト」のようなブランチのリストを使用しています)。

この状況を処理する最も良い方法は何ですか?

ありがとうございました。

答えて

1

不要になったブランチを削除して、ブランチの統合を回避できます。

M5は基本的に付加価値のないマージであるため、私はあなたの最初の解決策が見つからないでしょう。あなたのバージョン履歴を汚染します。私はどうなるのか

は次のとおりです。

  1. がM1で分岐Bを作成します。
  2. M4を形成するチェリーピックM3をBに入れる。
  3. Bをリポジトリにプッシュする
  4. では、チェックアウトM4。
  5. M2の制限が合格すると、M4にold_somethingというタグを付け、タグを押し、ブランチBを削除します(リモートリポジトリからも削除します)。

この方法で、他の男のレポとの相互作用のみを使用すると、新しい(一時的な)ブランチを作成することであり、彼はその後、タグ(なしマージされていない枝が、タグが残っていないこと。本当の差が、しかし、あなたはToDoリストのためにマージされていない枝を使用している場合、これはあなたの問題を解決します)

実は、私はサブモジュールとの状況はA.の支店を持つよりも優れているあなたは今、不要なマージを持っていることによって、あなたのバージョン履歴を汚染されることはありませんと言うでしょう。

+0

これは素晴らしい考えです。私はブランチにタグをつけて削除することができないことを認識しませんでしたが、それは私のニーズによく合います。 – pepak

関連する問題