web-dev-qa-db-ja.com

Mercurialブランチを別々のリポジトリからマージする

別のリポジトリのブランチを現在のブランチにマージする方法を理解しようとしています。

私は以下を持っています:

PJT1-デフォルトのブランチとfoodogが含まれています

PJT2-ブランチのデフォルトが含まれています

pJT2から、私は次のことを行います。

$ hg fetch -y ../PJT1 -r foodog -m "this is a test"

ここで、PJT2を見ると、正しいファイルと変更が表示されています。ただし、私はhg branches、私は以下を得ます:

[someone@myhome pjt2]$ hg branches
foodog                         1:c1e14fde816b
default                        0:7b1adb938f71 (inactive)

およびhg branchは次のことを明らかにします。

[someone@myhome pjt2]$ hg branch
foodog

PJT1のfoodogブランチからPJT2のdefaultブランチにコンテンツを取得するにはどうすればよいですか?

30
Paul

マージする必要がありますが、ブランチfoodogの変更は常にfoodogに反映されることに注意してください。ブランチは消えることはありませんが、非表示にすることができます。このコマンドのシーケンスは、あなたが求めているものに到達するのと同じくらい近いです:

cd PJT2
hg update default # just in case you were somewhere else
hg pull ../PJT1 -r foodog  # that gets you foodog
hg merge foodog  # that merges the changes into default
hg commit # commit the merge
hg update foodog # go to the most recent change in foodog (note: it is not a 'head')
hg commit --close-branch

マージ後、hg branchesは、ヘッドがあるブランチのみを表示するhg branches --activeを実行しない限り、foodogを表示します。 commit --close-branchを実行しないと、hg branches --closedを実行しない限り、foodogは表示されません。

Mercurialのブランチが完全になくなることはないため(設計機能)、release-1.0stableのような生涯にわたるもののためにのみ予約されることがよくあります。バグや機能などの一時的な取り組みについては、代わりにブックマークを使用することを検討してください。 2つの優れた比較を以下に示します。 http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-Mercurial

55
Ry4an Brase

rebase 拡張子を使用することもできます。次のようになります。

hg fetch -y ../PJT1 -r foodog -m "this is a test"
hg rebase --source <sRev> --dest <dRev>

リベースアクションは、変更セットsRevおよびすべての子孫を切り離し、変更のグループを変更セットdRevに適用します。デフォルトでは、変更はデフォルトのブランチに適用されます。したがって、あなたの場合、sRevはブランチの最初のチェンジセットfoodogであり、dRevdefaultチェンジセットですあなたはそれらを適用したいです。

最後に、これをオーバーライドしてソースブランチ名を保持する場合は、リベースオプション--keepbranchesを使用できます。あなたの質問は、これがまさにあなたがしたくないことであることを示していますが、それでも注意する必要があります。

0
dls