web-dev-qa-db-ja.com

hg forgetとhg removeの違いは何ですか?

Mercurialに、リポジトリの現在の状態からいくつかのファイルを削除してほしい。ただし、以前の履歴にファイルが存在するようにします。

forgetremoveはどのように違いますか?

311
Paul Nathan

hg forget」は、「hg remove -Af」の短縮形です。 「hg remove」ヘルプから:

...および-Afを使用すると、作業ディレクトリからファイルを削除せずに、次のリビジョンからファイルを削除できます。

一番下の行:「remove」はディスク上の作業コピーからファイルを削除し(-Afを使用しない限り)、「forget」は削除しません。

341
Ry4an Brase

配置する最良の方法は、hg forgetidenticalからhg removeexceptyour作業コピーにファイルを残します。ファイルは追跡されていないファイルとして残され、オプションで.hgignoreのパターンで無視できるようになりました。

言い換えれば、私があなたからプルするときにhg forgetまたはhg removeを使用した場合、私は伝えることができませんです。 willhg forgetを実行したファイルは、そのチェンジセットに更新すると削除されます。その代わりにhg removeを使用したかのように。

41
Martin Geisler

ドキュメントから、明らかにどちらかのコマンドを使用してファイルをプロジェクト履歴に保持できます。作業ディレクトリからファイルも削除されるため、削除するように見えます。

http://hgbook.red-bean.com/read/ のMercurialブックから:

ファイルを削除しても、その履歴には影響しません。ファイルを削除しても2つの効果しかないことを理解することが重要です。作業ディレクトリからファイルの現在のバージョンを削除します。次のコミット時から、Mercurialがファイルの変更を追跡するのを停止します。ファイルを削除しても、ファイルの履歴は一切変更されません。

マニュアルページhg(1)は、これについて忘れていると述べています。

次のコミット後にそれらがもはや追跡されないように、指定されたファイルをマークします。これは、プロジェクト履歴全体からではなく、現在のブランチからのみファイルを削除し、作業ディレクトリからは削除しません。

そして、これは削除について:

指定されたファイルをリポジトリから削除するようにスケジュールします。これは、プロジェクト履歴全体からではなく、現在のブランチからのみファイルを削除します。

26
Jason Catena

「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を使用する例があります。

3
gm2008

ファイルを追跡できるかどうかは、hg addを使用してファイルを追跡し、hg removeまたはhgを使用して追跡を解除することを忘れます。フラグなしでhg removeを使用すると、ファイルが削除され、追跡が解除されます。hg forgetは、削除せずに単に追跡解除されます。

2
Tao