Mercurialを使用するためにビルドプロセスを移動し、作業ディレクトリをtipリビジョンの状態に戻したいと考えています。ビルドプロセスの以前の実行では、いくつかのファイルが変更され、コミットしたくないファイルが追加されたため、ローカルの変更とリポジトリに追加されていないファイルがあります。
すべてを破棄し、最新のリビジョンを持つクリーンな作業ディレクトリを取得する最も簡単な方法は何ですか?
現在、私はこれをやっています:
hg revert --all
<build command here to delete the contents of the working directory, except the .hg folder.>
hg pull
hg update -r MY_BRANCH
しかし、もっと簡単な方法があるはずです。
リポジトリを削除し、新しいクローンを作成し、更新するのと同じことをしたいと思います。しかし、レポは大きすぎて十分に高速ではありません。
これらのステップshouldを短くすることができます:
hg pull
hg update -r MY_BRANCH -C
-C
フラグは、更新する前にすべてのローカル変更を破棄するように更新コマンドに指示します。
ただし、これにより、リポジトリに追跡されていないファイルが残る場合があります。あなたもそれらを取り除きたいようですので、私はそのためにpurge
拡張を使用します:
hg pull
hg update -r MY_BRANCH -C
hg purge
いずれにしても、Mercurialに実行を要求できるコマンドは1つもありません。ただし、実行できないと言う「フルクローン」メソッドにプロセスを変更する場合を除きます。
hg up -C
これにより、すべての変更が削除され、現在のブランチの最新のヘッドに更新されます。
また、 purge extension を有効にすると、バージョン管理されていないファイルもすべて削除できます。
パージ拡張機能なしで* nixで追跡されていないものを削除するには、使用できます
hg pull
hg update -r MY_BRANCH -C
hg status -un|xargs rm
どちらを使用しています
update -r --rev REVリビジョン
update -C --cleanコミットされていない変更を破棄(バックアップなし)
status -u --unknown不明な(追跡されない)ファイルのみを表示します
status -n --no-statusステータスプレフィックスを非表示
hg statusはすべての新しいファイルを表示します。そして、あなたはただrmすることができます。
通常、無視され、バージョン管理されていないファイルを削除したいので:
hg status -iu # to show
hg status -iun0 | xargs -r0 rm # to destroy
そして、それに従ってください:
hg update -C -r xxxxx
これにより、すべてのバージョン管理されたファイルがリビジョンxxxxの正しい状態になります。
あなたがこれをしたくないと言うスタックオーバーフローの伝統に従うために、私はこの「核オプション」が私が気にするものを破壊したことをしばしば見つけます。
それを行う正しい方法は、ビルドプロセスで「make clean」オプションを使用することです。また、「make reallyclean」と「make distclean」オプションを使用することもできます。