TortoiseHG+hgsubversionでmerge trackingを使ってsvnのbranchをmergeする
前説
前回エントリは単純なmergeの例だったので、
svnリポジトリのbranchのmergeをMercurial上でやるメリットがそれほど大きくない。
Mercurialを使ってバージョン管理をする場合以下のようなやり方をすることが多い。
3のmergeでconflictがあまり発生しないのは、2.3でどのようにmergeしたか、
conflictをどのように解消したかをリポジトリが覚えていてくれるからで、
これをmerge trackingという。
- branch作成
- 繰り返し
- branchで作業
- defaultに変更発生(他branchからのmerge等)
- default→branchに逆方向merge
- branch→defaultにmerge
今回の話は、merge tracking機能がない1.4以前のsvnでもmerge tracking機能を活用して、
mergeを行う方法についての話。
やり方
以前default→branchの逆方向mergeを以前行なったリポジトリについて、
merge tracking機能を生かしてmergeする。
前回エントリを見ながら見ると分かりやすいと思うが、
rev213がmerge revisionで、rev214がrevertして作りsvn側にpushされたmerge revisionの双子の兄弟。
黄いのbranchから黒いdefaultにmergeするとして、
branch分岐直後のrev206〜branch先端のrev253の1本の線の中には、default→branchの逆方向mergeのmerge情報はない。
そこで、rev213のmerge情報を持たせてやるため、rev213とrev253をmergeしてしまう。
内容としてはrev253から変えてはいけないので、rev253がlocalになるようにした上で、
「Discard all changes from merge target (other) revision」にチェックを入れてmergeする。
すると、default→branchの逆方向mergeのmerge情報を持ち、svnリポジトリ上のbranchと同内容の先端が出来上がる。
これをdefaultにmergeしてやればよい。
ここから先にやることは前回エントリと一緒。
最終的にこのようなツリーが出来上がる。
256がsvn側に反映されたmerge結果。