Hg リポジトリに 2 つのブランチがある場合、変更セットの他のすべてのファイルをマージせずに、1 つのファイルのみを別のブランチとマージする方法を教えてください。
変更セット全体ではなく、特定のファイルのみをマージすることはできますか?
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
そのファイルの別の部分を選択したい場合は、 then"hg record"
が便利です。
ホームディレクトリ .hgignore でこれを行いました。
両方のブランチが保持したいファイルに変更を加えた場合、おそらく/おそらくさらに別のブランチで hg merge を使用して2つのブランチのマージを作成し、それをチェックインしてから単一のファイルをコピーするという汚いトリックがありますマージと分岐先の間:
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
言及する価値があります:「ブランチ間で単一のファイルをコピーする」(またはリビジョン、またはリビジョンからマージへ、または...) 方法は「hg revert」です。いえ
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 =