hg transplantの基本的な使い方を覚えた。
~/.hgrcか.hg/hgrcにこれ↓をいれると使えるようになる。
[extensions] transplant=
transplantした結果は.hg/transplant/transplantsに記録されるようだ。ただhg cloneしたときに引き継がれないので注意が必要か。このへんが基本機能のmergeと扱いが違うところ。CVSではcherry pickが基本だったのでユーザがどこをマージしたのかを覚えておかなければならなかったが、hgではグラフ構造でマージ関係を覚えるのでマージがとてもわかりやすくなった一方で、特定の変更だけをとりこむことができなくなり、拡張機能として hg transplat が用意されている、とおもう。
以下ためしてみたときのログ。画像は https://bitbucket.org/koie/hg-dot/ で作成した。
% hg init repo % cd repo % echo "11111" >file % hg commit -A -m initial file % echo "22222" >>file % hg commit -m second file % echo "33333" >>file % hg commit -m third file % hg glog --style compact @ 2[tip] 4c711a087ccd 2010-12-28 13:39 +0900 koie | third | o 1 2a9a9bbae480 2010-12-28 13:39 +0900 koie | second | o 0 7c68bdadd780 2010-12-28 13:38 +0900 koie initial % hg up 1 1 files updated, 0 files merged, 0 files removed, 0 files unresolved % echo "XXXXX" >>file % hg commit -m hack file created new head % hg glog --style compact @ 3[tip]:1 f983fc95151f 2010-12-28 13:41 +0900 koie | hack | | o 2 4c711a087ccd 2010-12-28 13:39 +0900 koie |/ third | o 1 2a9a9bbae480 2010-12-28 13:39 +0900 koie | second | o 0 7c68bdadd780 2010-12-28 13:38 +0900 koie initial
% echo "YYYYY" >>file % hg commit -m hack2 file % hg glog --style compact @ 4[tip] c80cf7c8095d 2010-12-28 13:43 +0900 koie | hack2 | o 3:1 f983fc95151f 2010-12-28 13:41 +0900 koie | hack | | o 2 4c711a087ccd 2010-12-28 13:39 +0900 koie |/ third | o 1 2a9a9bbae480 2010-12-28 13:39 +0900 koie | second | o 0 7c68bdadd780 2010-12-28 13:38 +0900 koie initial
% cat -n file 1 11111 2 22222 3 XXXXX 4 YYYYY % hg up 2 1 files updated, 0 files merged, 0 files removed, 0 files unresolved % cat -n file 1 11111 2 22222 3 33333 % hg transplant 4 applying c80cf7c8095d patching file file Hunk #1 FAILED at 0 1 out of 1 hunks FAILED -- saving rejects to file file.rej patch failed to apply abort: fix up the merge and run hg transplant --continue % cat file.rej --- file +++ file @@ -1,3 +1,4 @@ 11111 22222 XXXXX +YYYYY % cat -n file.rej 1 --- file 2 +++ file 3 @@ -1,3 +1,4 @@ 4 11111 5 22222 6 XXXXX 7 +YYYYY % cat -n file 1 11111 2 22222 3 33333 % (EDIT) % cat -n file 1 11111 2 22222 3 33333 4 YYYYY % hg transplant --continue c80cf7c8095d transplanted as 22e2895df1d2 % hg glog --style compact @ 5[tip]:2 22e2895df1d2 2010-12-28 13:43 +0900 koie | hack2 | | o 4 c80cf7c8095d 2010-12-28 13:43 +0900 koie | | hack2 | | | o 3:1 f983fc95151f 2010-12-28 13:41 +0900 koie | | hack | | o | 2 4c711a087ccd 2010-12-28 13:39 +0900 koie |/ third | o 1 2a9a9bbae480 2010-12-28 13:39 +0900 koie | second | o 0 7c68bdadd780 2010-12-28 13:38 +0900 koie initial %