I am about to tell you some stuff about Mercurial that will save you a lot of frustration. This page is cynical and survival-oriented. But I still claim Mercurial is a lot better than CVS. —jorendorff 16:06, 12 May 2008 (PDT)
心構え
Mercurial は CVS ではありません。 コマンドが違います。 コンセプトも違います。
この銃には弾丸が装填されています。 あなた自身の足を撃つかもしれません。あなたの作業を無駄にするかもしれません。このツールはあなたを守ろうとしますが、それでもそれは起きてしまいます。よくある失敗が 2 つあります: (a) よく知らずにコマンドを実行する; (b) 作業ディレクトリの状態を正しく理解せずに hg commit
または hg qrefresh
を実行する。その結果、コミットしたくなかった変更や壊れたマージ等を誤ってコミットしてしまいます。大抵、これらは何かが間違っていても、すぐには明らかになりません。
備えあれば憂い無し。それらを行ってはいけません。よく知らずにコマンドを実行してはいけません。hg help
と仲良くなりましょう。差分を取ることや思慮なしにコミットしてはいけません。"遊び気分" になって、遊び相手があなた自身のコミット前の作業だという事実に注意を払わない、ということはやめましょう。
Mercurial を使っても空は飛べません。 (Mercurial is not magic dust.) Mercurial は柔軟でパワフル、そして楽しいです。CVS では試せなかったことが試せます。しかし、もちろん、すべてが良いアイデアになることはありません。(例えば、私たちはパッチのキューを共有しようとしましたが、うまくいきませんでした。)
トラブルを避けるには
Mercurial 1.1 以降を使用してください。 (hg version
で確認。)
自分がなすべきことを学んでください。 リポジトリの状態を確認するには読み取り専用のコマンド (hg status
, hg head
, hg parents
, hg log
, hg diff
など) を使用してください。これは欠かせないスキルです。
マージプログラムを設定し、それを扱えるようになってください。今すぐに (DO IT NOW)。 そうしなければ、あなたのリポジトリはある時点で台なしになってしまうでしょう。
時々、CVS はあなたのファイル内の衝突マーカーを取り除きます。Mercurial は取り除きません。代わりに、(kdiff3
のような) マージプログラムを使用して、今すぐ衝突を修正することが望まれます。
これはエラーになる傾向があります。デフォルトでは、Mercurial はあなたのシステムで見つかる最初のマージプログラムを使用します。ほとんどのマージプログラムは正しく使うのが少々難しいでしょう。Mercurial は壊れたマージを検知して拒否することを上手くやってはくれません。そのため、ウィンドウを閉じるだけで、意識せず自分自身を悪い状況に追いやってしまいます。経験のある人は、悪いマージによる不可解な hg の動作を理由に挙げて、多くの時間が費やされ価値ある作業を含んでいる hg ツリー全体を見放すことで知られています。
マージが失敗したら、Mercurial が失敗したことを知っているか確かめてください。 最初にコツをつかんだ時のマージはよく失敗します。このようなメッセージが表示されます:
0 files updated, 0 files merged, 0 files removed, 1 files unresolved There are unresolved merges, you can redo the full merge using: hg update -C 2 hg merge 1
これはマージの最中に解決されなかった衝突があることを意味しています。これが何であり、どう修正すべきか分からないときは、hg update -C
コマンドを使用して、あなたがマージを放棄したことを Mercurial に伝えてください。
これを行わないと、Mercurial は知ることができないため、次のコミット時に変更セットをマージしてしまいます。これはまずいです。結果的に一連の作業を誤って破壊したようにしか見えません。しかし、実際には、損害を元に戻すことができます。
hg parents
が 2 つの親を表示すれば、あなたはマージしています。
Mercurial Queues を使用する場合は作業のバックアップを保存してください。 hg qrefresh
は古いパッチを新しいもので破壊的に置き換えます! パッチのために別のバックアップレポジトリを作成するには hg qinit -c
を使用し、定期的に hg qcommit -m backup
を実行してください。
誰かが pull する可能性のあるレポジトリでは Mercurial Queues を使用してはいけません。
復旧する
なんてこった! Mercurial があなたの片腕を切り落としてしまった!
魔法のように修正されるかどうかを手当たり次第に試さないでください。 健康な片腕がまだあるうちに、失いそうなものを覚えておき、チェーンソーを置いてください。
IRC で助けを求めてください。 Mozilla IRC の#developers や #hg、または freenode の #mercurial で訊ねてください。