12

さて、最近、SVNからMercurialに変換しました。
通常はTortoiseHGを使用しています。

1つのリポジトリに、すべてのプロジェクト、C ++ / .NET/ASPがあります。約100のプロジェクトがあり、すべて共通のライブラリプロジェクトを使用しています。

したがって、プロジェクトごとに複数のリポジトリを作成するのは非常に難しい作業です。

これでdefaultブランチができました。としましょうbranchA
私は作業していてBranchA、それにuberの変更を追加しています。また、共通のライブラリを変更します。たとえば、拡張メソッドを変更します。

branchAこれをコミットしたいのですがdefault、どうすればいいですか?

ただし、からのすべての変更をにマージしたくないし、からの他のすべての変更branchAをにマージしdefaultたくないdefault

うまくいけば、これは十分な情報です!

4

5 に答える 5

23

少し最新の状態に保つために、Mercurialにチェリーピッキングを実装するgraftコマンドがあります。

このコマンドは、Mercurialのマージロジックを使用して、履歴グラフのブランチをマージせずに、他のブランチから個々の変更をコピーします。これは、「バックポート」または「チェリーピッキング」と呼ばれることもあります。デフォルトでは、graftはソースチェンジセットからユーザー、日付、説明をコピーします。

于 2012-06-23T12:22:33.230 に答える
11

この問題を回避する方法があります。ベースラインリビジョン(通常は最後のリリースのタグまたはその他の安定したポイント)とは別の機能ブランチですべての変更を行うことができますS

そうすれば、変更Xは独自のブランチになり、不要なチェンジセットを導入することなく、他のブランチとマージできます(マージM1と)。M2

-----S--o----o---M1----o---> default
     |          /
     |---------X   feature or bugfix
     |          \
     \--o---o----M2----o-----> BranchA 

これには通常のhg merge操作のみが必要です。パッチ、移植またはMQの必要はありません。

于 2011-01-15T13:39:45.030 に答える
5

共通コードを独自のリポジトリに分割する場合は、サブリポジトリを使用して各プロジェクトに含めることができます。

ちなみに、特にプロジェクトが非常に多い場合は、プロジェクトごとに個別のリポジトリを用意することをお勧めします。

于 2010-04-08T09:55:08.713 に答える
3

欲しいのはマージではなく、チェリーピックです。https://www.mercurial-scm.org/wiki/TransplantExtensionを使用でき ますが、そこに記載されている問題に注意してください。

于 2010-04-07T22:12:11.220 に答える
-1

あなたは「チェリーピッキング」または「部分的なマージ」を行っていると説明していますが、これは現在Mercurialでは不可能です。いくつかのオプションがあります。

  • 共通コードを独自のリポジトリに分離します。
  • 共通コードに加えた変更の差分を生成し、それをdefaultブランチに適用します。
于 2010-04-07T21:51:45.960 に答える