2

私のリポジトリの履歴は次のようになります。

A -- B -- C (branch "foo")
      \
       -- D (branch "bar")

2 つのブランチはどちらも「出荷」ブランチであり、共通のバックエンドに対して本質的に異なるフロントエンドです。

以前はすべてのコードが 1 つの分岐にあり、fooまたはbar機能がコンパイラ スイッチによってオンまたはオフにされていましたが、それぞれを個別に操作しやすくするために分岐しました。

問題は、共通の「バックエンド」ファイル自体がおそらく別のブランチである必要があることです-そして、私はしばしばそれらの共通ファイルで作業したいだけです。私がこれらのブランチを作成した方法のために、歴史は少し台無しになっています: ブランチbarの過去には、 からの機能がありましたfoo

現在、私は単純に 1 つのブランチにhg transplant変更を加えてから、同じ変更を別のブランチにコピーしています。

代わりに、次のように変更できるようにしたいと思います。

       __ C __ D'   (branch "foo")
      /      /
A -- B -- D         (branch "backend")
      \      \
       -- E -- D''  (branch "bar")

つまり、ブランチで作業してからbackend、各配送ブランチ (fooおよびbar) で を使用しますhg merge backend

現在の状況から私が説明している状況に移行するための最良の方法は何ですか? 私が考えることができる唯一の方法は次のとおりです。

  1. fooすべての機能を削除しbar、そのブランチに名前を付けbackendます。

  2. 古い枝を削除しfooます。bar

  3. foo機能を手動で追加しbackend、そのブランチfooに名前を付けbarます。

より良い方法はありますか?

また、これは正しいことですか?

4

2 に答える 2

1

ブランチにはいくつのチェンジセットがありfooますbarか?バックエンド(移植された)チェンジセットはフロントエンドチェンジセットから分離されていますか?

チェンジセットが多くなく、クリーンである場合は、次のようにすることができます。

       C -- 1 -- 2 -- D -- 3   (branch "foo")
      /      
A -- B ----------- C" -- D"   (branch "backend")
      \      
       C' -- 4 ------ D' --- 5   (branch "bar")

(ここで、A、B、C、Dはバックエンド関連、1、2、3はfoo関連、4、5はバー関連です。)

—つまり、backendとの最新の共通祖先に基づいてブランチを作成fooし、barそこにすべてのバックエンド関連のチェンジセットを移植します。backendこの時点から、どちらのブランチにもマージできるようになります。

于 2012-05-18T21:03:29.097 に答える
0

次のように、1つのリポジトリ内の複数のブランチではなく、複数のリポジトリに分割することを選択しました。

  1. bar支店を閉めました。

  2. 元のリポジトリを新しいリポジトリに複製しましたbackend

  3. foo関連するコードをすべて削除しました。

  4. これらの変更をメインリポジトリにプルし、すぐにバックアウトしました(fooコードは残ります)。これが私のfooリポジトリになりました。

  5. backendリポジトリを新しいリポジトリに複製しましたbar

  6. bar閉じたブランチからすべてのファイルをコピーしてbarリポジトリに貼り付けました。

これにより、の履歴が保持されfoo、履歴の継続性が失われましたbar(ただし、必要に応じて、すべての履歴がまだ存在します)。そして今、両方foobarはリポジトリの変更を加えたクローンであり、backendまさに私が望んでいたものです。

于 2012-05-27T23:43:04.677 に答える