LT概要「GitとMercurialのリポジトリ構造の違いと歴史改変について」SCMBootCamp in Tokyo
SCMBootCamp in Tokyo 開催しました。KPT公開。 - うさぎ組にて手ぶらLTをしたので資料はないが、内容を軽くまとめておく。
GitとMercurialの比較
Git | Mercurial | |
リポジトリ | commit objectのグラフと、branchのHEAD,tagなどの参照で出来ている。 | commit objectのグラフだけで出来ている。 |
歴史改変サポート | デフォルトであり。 | デフォルトではなし。extensionが必要。 |
歴史改変 | 新しいcommit objectグラフを作成し、参照を古いHEADから新しいHEADに移す。表面上要らない歴史の削除として使われるresetはHEADの移動のみを行う。 | 新しいcommit objectグラフを作成し、古いcommit objectグラフをリポジトリから除去する。要らない歴史の削除として使われるstrip(MQExtension)は対象のcommit objectグラフをリポジトリから除去する。 |
改変前の歴史の参照方法 | reflogを使えばGCされる前のcommit objectは作成時昇順で全部見える。「今の私にはね、過去と未来の全てが見えるの。かつてあった宇宙も、いつかあり得るかもしれない宇宙も、みんな」 | 基本的に見ることは出来ない。 |
改変失敗時の復旧 | reflogを見て改変前にHEADだったcommit objectをreset --hardすれば良い。 | bundle backup等があれば失敗した改変後commit objectグラフをstripで除去後、import出来る。 |
Mercurialで歴史改変するためのextension
MqExtension - Mercurial
TransplantExtension - Mercurial
RebaseExtension - Mercurial
CollapseExtension - Mercurial
HisteditExtension - Mercurial