14

次のような状況があります。

  • Mercurial リポジトリを持つサイト A があり、しばらく開発を続けています。A に 5 回のリビジョンがあったとします。
  • ここで、グラフィカル デザインを除いて、サイト A とほとんど同じであるサイト B を作成する必要があります。そこで、レポを複製し、サイト B を開始しました。B のレポには、A のすべての履歴に加えて、A に戻るべきではない一連の変更セット (主に CSS と画像) が含まれています。これらの変更に 3 回のリビジョンが必要だったとしましょう。
  • 最後に、B に変更を加えましたが、両方のサイトに属しているため、A に戻したいと考えています。これは B のレポのリビジョン 9 です。

問題は、リビジョン 6 ~ 8 を移動せずに、リビジョン 9 を B のレポから A のレポに移動するにはどうすればよいかということです。

  • 通常のプッシュ/プルを試しましたが、すべての変更セットが移動します。
  • バンドルまたはパッチをエクスポートしようとしましたが、親が見つからないため、それらは A でのインポートを拒否します。

DVCS の優れた点の 1 つは、この種のことが簡単にできることだと思いました (「集中化された」VCS の世界では、ブランチとマージで簡単に修正できました。Vault で何度も実行しましたが、非常に簡単です)。 .

ここで何か不足していますか?

注: 「MQ」を調べましたが、これは大きなワームのようで、有効にするだけで通常のコミット サイクルに影響を与えるようです。これは正しいです?

どんな助けや指針も大歓迎です。ありがとうございました!

ダニエル

4

3 に答える 3

11

https://www.mercurial-scm.org/wiki/wiki/TransplantExtension

「移植を使用して一連のチェンジセットをチェリーピックする」を参照してください。

移植では、次のように複数のチェンジセットまたはチェンジセット範囲を管理できます。

hg transplant REV1:REV2 REV3

この例では、作業ディレクトリのリビジョン時にREV1:REV2および追加のチェンジセットREV3で指定されたチェンジセットの範囲を選択します。

理想的には、ブランチでこれを行いますか?

于 2010-09-11T15:43:46.740 に答える
11

コマンドは次のように考えています。

  • hg bundle変更セットのバイナリ バージョンを提供hg unbundleし、受信側でバンドルをまったく同じ変更セットに変換します。

    バンドルとアンバンドルは、変更セットを電子メールなどで転送するためにあり、バイナリ パッチは存在する親変更セットに依存します。

  • hg export変更セットのテキスト表現を提供し、--exactコマンドラインフラグを使用しない限りhg import、このパッチを適用しても受信側でまったく同じ変更セットが作成されません。

    使用しないことの利点は--exact、テキストの競合がない限り、そのようなパッチをどこにでも適用できることです。

  • hg transplanthg exportは、との薄いラッパーhg importです。

于 2010-09-12T11:13:38.500 に答える
1

Mercurialリポジトリの履歴を「折りたたむ」またはスキップしたい場合は、(折りたたむセクションの前の)ベースリビジョンに更新するだけです。その上のすべてを単一のチェンジセットに折りたたむ場合(これはあなたが望むもののようです)、そのブランチの先頭に戻ってこれをコミットします(または必要なファイルだけをコミットします)。これにより、必要なもので新しいチェンジセットが作成されるため、これをサイトAにプッシュできます。不要なものは無視します(無視できない場合は削除します)。

フォールドの上に保持したい複数のチェンジセットがある場合は、リベースする必要があります。リベース拡張機能を有効にして、#9を#5にリベースします。#9の子供がいる場合、これらは一緒に移動します。リベースは、3方向マージ機構を使用してチェンジセットを移行し、成功する可能性が高くなるため、移植よりもリベースの方が適しています(これは同様のことを行います)。移植は多かれ少なかれ単なる輸出入であるため、一般的な歴史を無視します。

于 2011-04-10T12:10:49.550 に答える