Hgリポジトリに2つのブランチがある場合、チェンジセットの他のすべてのファイルをマージせずに、1つのファイルのみを別のブランチにマージするにはどうすればよいですか?
チェンジセット全体ではなく、特定のファイルのみをマージすることは可能ですか?
警告:@Martin_Geislerによって推奨されているような「ダミーマージ」は、後で2つのブランチの真のマージを実行したい場合に、実際に混乱させる可能性があります。ダミーマージが記録され、ダミーマージを行ったブランチにマージすると言います。変更は表示されません。または、他のブランチにマージした場合、その他のブランチでの変更は元に戻されます。
ファイル全体をあるブランチから別のブランチにコピーするだけの場合は、次のようにするだけです。
hg update -r to-branch
hg revert -r from-branch file
hg ci -m 'copied single file from from-branch to to-branch
そのファイルのさまざまな部分を選択する場合は、"hg record"
は便利です。
私は自分のホームディレクトリ.hgignoreでこれを実行しました。
両方のブランチが保持したいファイルに変更を加えた場合、汚いトリックは、おそらく/おそらくさらに別のブランチで、hg mergeを使用して2つのブランチのマージを作成し、それをチェックインしてから、単一のファイルをコピーすることです。マージとto-branchの間:
hg update -r to-branch
branch merge-branch
hg merge -r from-branch
hg ci -m 'temp merge to be discarded"
hg update -r to-branch
hg revert -r merge-branch single-file
hg ci -m 'merged single-file from from-branch to to-branch"
hg strip merge-branch
言及する価値があります:「ブランチ間で単一のファイルをコピーする」(またはリビジョン間、またはリビジョンからマージまで、または....)方法は「hgrevert」です。つまり.
hg update -r Where-you-want-to-copy-to
hg revert -r Where-you-want-to-copy-from file-you-want-to-copy
...
hg ci
どういうわけか、私と私の同僚の何人かは、これを見つけます[〜#〜]非常に[〜#〜]混乱します。 "revert" == "copy" ...いくつかの使用パターンには意味がありますが、すべてではありません。
いいえ。 Mercurialはチェンジセットベースで動作します。
ただし、「 ダミーマージ 」を実行して、ブランチの1つからの着信変更を無視することができます。コミットする前に、選択したファイルを任意の状態に戻すことができます。
% HGMERGE=internal:local hg merge # keep my files
% hg revert --rev other-branch a.txt # update a.txt to other branch
% hg commit -m 'Dummy merge to pick a.txt from other-branch.'
多分それはあなたを少し助けるでしょう。
vimdiff
のような外部ツールを使用して、マージする2つのファイルを比較し、それらをマージします。これの利点は、ファイルの一部を選択的に編集できることです。例えば:
hg update -r branch-merging-to
hg extdiff -p vimdiff -r branch-merging-from file-I-am-merging
これを行うには、.hgrcで外部ツールを有効にする必要があります。これは、次の行を追加することを意味します。
[extensions]
hgext.extdiff =