「ナルホドー! 使って分かった Mercurial と Bitbucket の便利さ」に書いたような事情でMercurialを使っています。分散バージョン管理について理解も納得もしないままに、とりあえず使い始めて、「おー、便利だ」と思ったわけです。その後も理屈は分からないまま、その場で必要な機能だけツマミ食い的に利用。コマンドリファレンスを見たこともありません。
と、こんな状況だと、常識的なことさえ知らないままでツマラナイ苦労をするものです。今まで僕は、既にMercurial管理下に入ってしまったファイル -- 例として Docs/JunkMemo.txt を、バージョン管理の対象外にする方法を知らなくて、次のようにしてました(Windowsコマンドラインを使います)。
- copy Docs\JunkMemo.txt Docs\tmp.txt …← 待避用コピーを作成
- hg remove Docs\JunkMemo.txt …← Mercurialで削除
- hg commit --message "JunkMemo.txt removed" …← 削除をリポジトリに反映
- ren Docs\tmp.txt JunkMemo.txt …← 待避コピーを元のファイル名にする
いかにもバカバカしい手順なんだけど、「まー、いいや」みたいな。
実際には、次のようにすればいいんです。
- hg remove --after Docs\JunkMemo.txt
- hg commit --message "JunkMemo.txt removed"
--after オプションだけだと何もしないときは:
- hg remove --after --force Docs\JunkMemo.txt
- hg commit --message "JunkMemo.txt removed"
--force を付けても --after の作用でほんとに消えることはないので大丈夫です。
さて、そもそも、JunkMemo.txtのようなファイルが登録されてしまう事情は次のようなことでしょう。
> hg add Docs
adding Docs\JsonAPI.wiki
adding Docs\JunkMemo.txt
adding Docs\CatyCommand.wiki
この直後なら、hg revert で追加登録を取り消せます。
> hg status Docs
A Docs\JsonAPI.wiki
A Docs\JunkMemo.txt
A Docs\CatyCommand.wiki> hg revert Docs\JunkMemo.txt
> hg status Docs
A Docs\JsonAPI.wiki
A Docs\CatyCommand.wiki
? Docs\JunkMemo.txt
コミットしてしまうと hg revert は効きませんが、hg rollback で直前のコミットは取り消せます。
> hg status Docs
A Docs\JsonAPI.wiki
A Docs\JunkMemo.txt
A Docs\CatyCommand.wiki> hg commit --message "files added"
> hg status Docs
> hg rollback
rolling back last transaction> hg status Docs
A Docs\JsonAPI.wiki
A Docs\JunkMemo.txt
A Docs\CatyCommand.wiki>
ツマミ食い利用でも、これくらいは知ってないとね ^^;