Mercurialに、リポジトリの現在の状態からいくつかのファイルを削除してほしい。ただし、以前の履歴にファイルが存在するようにします。
forget
とremove
はどのように違いますか?
「hg forget
」は、「hg remove -Af
」の短縮形です。 「hg remove
」ヘルプから:
...および-Afを使用すると、作業ディレクトリからファイルを削除せずに、次のリビジョンからファイルを削除できます。
一番下の行:「remove
」はディスク上の作業コピーからファイルを削除し(-Af
を使用しない限り)、「forget
」は削除しません。
配置する最良の方法は、hg forget
がidenticalからhg remove
exceptyour作業コピーにファイルを残します。ファイルは追跡されていないファイルとして残され、オプションで.hgignore
のパターンで無視できるようになりました。
言い換えれば、私があなたからプルするときにhg forget
またはhg remove
を使用した場合、私は伝えることができませんです。 willでhg forget
を実行したファイルは、そのチェンジセットに更新すると削除されます。その代わりにhg remove
を使用したかのように。
ドキュメントから、明らかにどちらかのコマンドを使用してファイルをプロジェクト履歴に保持できます。作業ディレクトリからファイルも削除されるため、削除するように見えます。
http://hgbook.red-bean.com/read/ のMercurialブックから:
ファイルを削除しても、その履歴には影響しません。ファイルを削除しても2つの効果しかないことを理解することが重要です。作業ディレクトリからファイルの現在のバージョンを削除します。次のコミット時から、Mercurialがファイルの変更を追跡するのを停止します。ファイルを削除しても、ファイルの履歴は一切変更されません。
マニュアルページhg(1)は、これについて忘れていると述べています。
次のコミット後にそれらがもはや追跡されないように、指定されたファイルをマークします。これは、プロジェクト履歴全体からではなく、現在のブランチからのみファイルを削除し、作業ディレクトリからは削除しません。
そして、これは削除について:
指定されたファイルをリポジトリから削除するようにスケジュールします。これは、プロジェクト履歴全体からではなく、現在のブランチからのみファイルを削除します。
「A」ステータスのファイルに対して"hg remove b"
を使用する場合、つまり、追加されたがコミットされていない場合、Mercurialは応答します。
not removing b: file has been marked for add (use forget to undo)
この応答は、removeとforgetの違いの非常に明確な説明です。
私の理解では、"hg forget"
は追加されたがコミットされていないファイルを元に戻すためのものであり、バージョン管理によって追跡されません。 "hg remove"
はバージョン管理からコミットされたファイルを取り出すためのものです。
この thread には、7種類のステータスのファイルに対してhg remove
を使用する例があります。
ファイルを追跡できるかどうかは、hg addを使用してファイルを追跡し、hg removeまたはhgを使用して追跡を解除することを忘れます。フラグなしでhg removeを使用すると、ファイルが削除され、追跡が解除されます。hg forgetは、削除せずに単に追跡解除されます。