menu
書いてる野郎
orebike@gmail.com
つまり歴史改変の前準備のqimport
操作
パッチ化したい始点(パッチ化したいりビジョンの中でも一番古いリビジョン)を
右クリック→Midify history→import to MQ
でその始点から先端までのリビジョンがMQパッチ化される
つまりqfold
の操作。
まず統合のベースとなるパッチを当てた状態にしておく。その状態でその次パッチ(統合したいパッチ)を右クリックしてfolding
を選ぶ
ブランチの設定→「現行ブランチを閉じる」を選択してコミットするとcloseされる
TortoiseHgはrebase拡張に対応しているのでグラフ上のリビジョン右クリックのModify Historyからrebaseを選べば、右クリックした対象から先が現在ブランチの先頭にrebaseされる。
当然拡張はONにしてね。
衝突してるから解決してよ的なメッセージがでるのでそこのresolvedをクリック
Unresolved Conflictの欄にぶつかっているファイルが表示されているのでわかる
tool resolveを押すとマージツールが立ち上がって・・・
という3つの状態が表示されていると思う。ここでワークの状態を見るとわかるがこの3つに対応したファイルが自動的に生成されている
前2つを参照しつつ正しいソースになるように3つ目を修正する。保存して終了すると。Resolved Conflictの欄に入る
同時に生成された3つのファイルの1個が消えて、ワーク上のオリジナルファイルがorigという拡張子のファイルとして残る
全部のファイルをResolved Conflictに入れたらclose
衝突が解決されているのであとはマージできる
必要ないならばorigのファイルを手で消す。
ソースコードをいじっているとついつい目についてしまって、余計なコメントや空白を削除してしまったりして、 本来の修正目的ではない部分も触ってしまうことが多々ある。
Gitにはステージという概念があってそこにファイルの一部分だけを上げてコミットという能動的な動きができるが、 TortoiseHgではshelveの延長のような概念で引き算的に部分コミットが可能になる。
shelveは普通ファイル単位に行うが、ファイルの一部に対してもshelveできる。 shelveのダイアログを開き、対象のファイルを選択、下部の枠の中に親との差分が表示される。 差分の部分の脇に「-」が表示されているのでこいつをクリックして「+」に変えてshelve対象であることにする。
そして上部の「>」アイコン(move selected chunks)をクリックするとshelve対象にした部分だけパッチ化されてshelve領域に格納される。 そしてワーク上のファイルからはパッチ化された部分が取り除かれる。
これでうまくコミットしたくない部分を除去すると部分コミットが可能になる。
コミットが終わったらunshelveする。これも手順は同じ。ファイルを選択してunshelveすればパッチを一気に復元することができるみたいだ。
このshelve対象の塊(ファイルの一部)のことをhunkと呼ぶが、これはdiffが勝手に判断して区切ってしまうので好きな単位にできない。 Gitならばhunkをsplitできるのだが、Hgでは現状できないらしい。残念。