今回は "5. Mercurial in daily use" を読みます。
ここまでの各章では、 Mercurial のコマンド・コンセプトに関する詳細の説明でしたが、 この章では日々の利用における概観の説明に主眼を置きつつ、 これまでの説明で漏れていた話題について触れています。
構成管理下に無いファイルに対しては
hg status が '?' を表示するので、
hg add +
hg commit で構成管理対象への追加を行いましょう、
という話。
ディレクトリの指定などによる「暗黙の」ファイル名指定の場合には Mercurial は処理対象ファイル名を一覧表示します。
Mercurial が空のディレクトリを取り扱えない (パッチが空のファイルを扱えないのと似ていますね) ことを補う方法として:
- "." で始まる隠しファイルを使う
- スクリプトで都度生成する
とありますが、 実際空ディレクトリの必要性は、 世間的にはどの程度なんでしょうね?
構成管理対象からの除外は hg remove
で行う、という話。
変更履歴は hg remove によっても削除されませんから、
ある意味「安心して削除」することができます。
手動でファイルを削除してしまった場合:
- 構成管理対象から除外したい:
hg remove --afterにより Mercurial に事後通知- ファイルを元に戻したい:
hg revertで復旧
という対処が可能です。
構成管理対象からの除外が自動化されると、 うっかりミスが増えるからよくないよね、 という話。
新規ファイルの自動登録と不在ファイルの自動削除を行う
hg addremove コマンドと、
コミットでまとめてそれを行う
hg commit -A
が提供されています。
Mercurial はファイルの複製も適切に扱えます。
あるファイルに変更を行ったチェンジセットと、 そのファイルからの複製を行うチェンジセットをマージすると、 元ファイルの変更は複製先に伝播します。
複製先に変更が伝播しないと、 折角の変更が行き場を失って意味がなくなるよね、 という話。
伝播が不要なら、
普通のコマンドで複製して
hg add してね、
という話。
Mercurial は
「ディレクトリの再帰的な複製」も、
「hg copy --after
による事後通知」も可能です。
改名は「複製+元ファイルの削除」 として実装されているので、 実は複製の説明は改名の説明のための伏線でした、 という話。
改名でも元ファイルへの変更が伝播する、という話。
複数の開発者が同じファイルを別な名前に改名した場合、 Mercurial は両方の改名先ファイルを存続させます。
少し前の版の BOS Book では O'Sullivan 氏はこの挙動に対する不満を明記していましたが、 「警告は表示するが、最終的にそれをどう収束させるかは利用者次第」 という挙動になったことで、 最新版ではその部分がバッサリ削除されています。
別なファイルを同じ名前に改名した場合はファイル内容の衝突の解決が必要、 という話。
同じ名前がファイルとディレクトリで衝突した場合は、 最新の Mercurial でも上手く取り扱えないようです。 他の構成管理システムでも(多分)扱えないでしょうから、 特別問題にはならないでしょうけどね。
やり直し・取り消しに関する詳細は、 "9. Finding and fixing your mistakes" で説明されています。
Mercurial の使い方についてはそこそこ知っているつもりでいましたが、 いやぁ、日々是勉強な感じです。
こまかいオプションに関しては、 逆に日常的に使用するコマンドの方が、 一旦使用パターンが確定すると仔細に検証することが無くなるのかもしれません (Emacs 経由だと使えない、というのもあるかもしれませんが)。
"Distributed revision control with Mercurial" 関連エントリの一覧は、BOSBook(Bryan O’Sullivan Book)タグで参照できます。