0

私は 2 つの Mercurial リポジトリ C1 と C2 を持っています。これらは両方とも同じ親 P から少し前に派生しましたが、それ以来別々の開発ラインを持っています。さらに、C2 には、迂回後に発生した名前付きブランチ B2 があります。ブランチ B2 のみを C1 にプルしたいのですが、これは hg pull C2 --branch B2 で簡単に実行できます。

現在、B2 は C2 リポジトリのデフォルト ブランチのいくつかのポイントから分岐しています。したがって、ブランチ B2 のみをプルしようとしている場合でも、C2 からのデフォルトの変更セットは C1 にプルされます。(B2チェンジセットの祖先なので理解できます)。

上記のプルの後、C1 のデフォルト ブランチに 2 つのヘッドができます。元のヘッドと、B2 をプルした結果としてプルされたデフォルトの変更セットで構成されるヘッドです。C1 のデフォルト ブランチを変更せずに残します。そうしないと、2 つの頭があり、更新が「クロス ブランチ」であると言われ続け、マージする必要があると言われ続けます。(今後、他の外部リポジトリから新しいデフォルト ブランチを C1 にプルする予定です)。

デフォルトで頭が 2 つにならないようにするにはどうすればよいですか?

4

1 に答える 1

0

問題について考えてみると、このようなものがあると思いますか?

@  4[tip]:1   439255c536ee   2013-01-25 10:42 +0000   rob
|    More changes on original default branch
|
|   o  3   379f384c1d73   2013-01-25 10:41 +0000   rob
|   |   Changes on named branch B2
|  /
| o  2:0   d225da266931   2013-01-25 10:40 +0000   rob
| |    Changes on cloned default
| |
o |  1   7088660d3ba6   2013-01-25 10:41 +0000   rob
|/     Changes on original default branch
|
o  0   a02a921256b3   2013-01-25 10:39 +0000   rob
     Project Start

あなたが説明している問題は、B2ブランチを維持したいが、2つの頭を合わせたくないということですdefault:

$ hg heads default --style=compact
4[tip]:1   439255c536ee   2013-01-25 10:42 +0000   rob
  More changes on original default branch

2:0   d225da266931   2013-01-25 10:40 +0000   rob
  Changes on cloned default

これを「修正」する可能性は 2 つあります。1 つは、単に「複製された」デフォルト ブランチを閉じることです (少なくともリポジトリでは)。

$ hg update 2
$ hg commit -m "Closing cloned default" --close-branch
$ hg heads default --style=compact
4[tip]:1   439255c536ee   2013-01-25 10:42 +0000   rob
  More changes on original default branch

これは、を発行した場合hg update default、あいまいであってはならないことを意味します。これは問題の一部であると思います。

別の方法は、他のデフォルト ブランチから「 null マージ」を実行することです。

$ hg update
$ hg -y merge --tool=internal:fail 2
$ hg revert --all --rev .
$ hg resolve -a -m
$ hg commit -m "Merged cloned default"

これらのアプローチの主な違いは、この--close-branchオプションを使用すると、使用時に追加のヘッドが引き続き表示されることhg heads -cです...これはまだヘッドですが、メタデータに閉じていることを示すフラグが設定されているだけです。閉じたブランチを更新したり、変更をコミットしたりすることもできます。マージを行うと、頭ではなくなるため、頭はまったく表示されません。

これらの方法はどちらも、変更を B2 ブランチにプルできることを意味します。後で同じ問題が発生し、上記を繰り返す必要があります。

それが理にかなっていることを願っています。もちろん、後で別のリポジトリにプッシュする場合は、閉じた/マージされた変更セットもプッシュします。リポジトリを複製し、これらのアプローチをローカルで試して、それが実際に必要かどうかを確認することをお勧めします。

于 2013-01-25T10:58:27.550 に答える