1

私は 2 つの Mercurial リポジトリを持ってgenericおりspecific、これは最初のリポジトリのクローンです。

$ hg glog -R generic 
@  changeset:   0:d516ded3bf0a
   summary:     generic project commit

$ hg glog -R specific 
@  changeset:   3:5f7b2efea94b
|  summary:     added another specific project change
o  changeset:   2:e2ad52001bcf
|  summary:     added generic project change (backport)
o  changeset:   1:a4220a2c7a80
|  summary:     added specific project change
o  changeset:   0:d516ded3bf0a
   summary:     generic project commit

specificここで、変更セット 2 をにバックポートしたいと思いgenericます。変更セット 1 と 3 は追加したくありません。cs 2 (cherry-pick) だけを追加します。移植移植の2つの選択肢があるようです。specific移植は、パッチを別のリポジトリ (私の場合は からへ)から移動できるため、問題ありませんがgeneric、マージ機能が制限されています。一方、グラフトはよりスマートなマージを提供しますが、別のレポからのグラフトはサポートしていません (同じブランチ間のみ)。

目標は、変更セット 2 のみを に追加するspecificことgenericです。これが私が成功せずに進めた方法です。

$ cd specific
$ hg up 0 # the common ancestor
$ hg branch backport-cs2
$ hg graft 2

$ hg glog
@  changeset:   4:1405acc4a121
|  branch:      backport-cs2
|  tag:         tip
|  parent:      0:d516ded3bf0a
|  summary:     added generic project change (backport)
|
| o  changeset:   3:5f7b2efea94b
| |  summary:     added another specific project change
| |
| o  changeset:   2:e2ad52001bcf
| |  summary:     added generic project change (backport)
| |
| o  changeset:   1:a4220a2c7a80
|/   summary:     added specific project change
|
o  changeset:   0:d516ded3bf0a
   summary:     generic project commit

ここまでは順調ですね。backport-cs2最後のステップは、 のブランチをspecificデフォルト ブランチにプルすることですgeneric

$ cd ../generic
$ hg pull -b backport-cs2 ../specific
$ hg glog 
o  changeset:   1:1405acc4a121
|  branch:      backport-cs2
|  tag:         tip
|  summary:     added generic project change (backport)
|
@  changeset:   0:d516ded3bf0a
   summary:     generic project commit

これで、generic必要な変更セットがありますが、デフォルトで使用したいのですが、新しいブランチにあります。それを行う方法について何か提案はありますか?バックポートへのより良いアプローチのアイデアも高く評価されます。

4

1 に答える 1