すべて破棄して最新リビジョンのクリーンコピーを取得しますか?


159

ビルドプロセスをmercurialを使用するように移動していますが、作業ディレクトリをチップリビジョンの状態に戻したいと考えています。ビルドプロセスを以前に実行すると、一部のファイルが変更され、コミットしたくないファイルが追加されるため、ローカルの変更とリポジトリに追加されていないファイルがあります。

これらすべてを破棄して最新のリビジョンを持つクリーンな作業ディレクトリを取得する最も簡単な方法は何ですか?

現在私はこれをやっています:

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

しかし、もっと簡単な方法があるはずです。

リポジトリの削除、新しいクローンの作成、更新と同等のことをしたいと考えています。しかし、レポは大きすぎて十分に速くありません。


1
「(内容を削除...)」は「revert --all」コマンドまたは実行するステップへのコメントですか?「hg update」は変更されたファイルのみを更新するのでお願いします。更新する前に他のファイルを削除すると、null-revision(hg update 00)に更新してからヒントに戻るまで、それらを元に戻すことはできません。hg revert --allプルして更新する前に、一貫した作業フォルダーの状態に戻すのに十分ではないのはなぜですか?
Lasse V. Karlsen

これは、ビルドソフトウェアで行う別のステップです。(コマンドラインの削除を使用することもできましたが、使用しませんでした。)
ロリー

1
このarchiveコマンドは将来役立つかもしれません。たとえば、を実行するhg archive ../newbuildと、最後にリポジトリのスナップショットがhg updateそこに配置されます。私は通常、毎晩のビルドのためにそれを行うので、レポが乱雑になるリスクはありません。不要になったビルドディレクトリを削除します。
Tim Post

回答:


212

これらの手順、次のように短縮できるはずです。

hg pull
hg update -r MY_BRANCH -C

この-Cフラグは、更新前にすべてのローカル変更を破棄するようにupdateコマンドに指示します。

ただし、これにより、追跡されていないファイルがリポジトリに残る場合があります。あなたもそれらを取り除きたいように聞こえるので、私はそのためにpurge拡張を使います:

hg pull
hg update -r MY_BRANCH -C
hg purge

いずれの場合も、プロセスを変更して「実行できない」という「フルクローン」メソッドに変更する場合を除いて、Mercurialにここで必要なすべてを実行するように要求できる単一のコマンドはありません。


6
おかげで、私が必要としたのは「パージ」でした。アップデート-Cは、追跡されていないファイルを削除しません。
ロリー

4
TortoiseHgを使用してパージすることもできます。ワークベンチの設定で拡張機能をオンにする必要があります(またはmercurial.iniを編集します)。
Dave

18
パージ拡張子が活性化されていない場合、あなたはまた、このようなコマンドを使用することができます: hg --config "extensions.purge=" purge --all
サミュエル・ドリール

5
@ csharptest.net hg purge --allは、ローカル構成も消去したので、頭痛の種になりました。つまり、データベースユーザー/パスワードなどです。:)
VMC

@SamuelDelisleありがとうございます、このスクリプトのこの1回限りのコマンドのためだけに構成変更を行いたくありませんでした。
joonas.fi 2016年

113
hg up -C

これにより、すべての変更が削除され、現在のブランチの最新のヘッドに更新されます。

また、パージ拡張機能をオンにして、バージョン管理されていないすべてのファイルを削除することもできます。


追跡されていないファイルは含まれますか?私が試していた他のコマンドの問題がいくつかありました。今すぐ試してみましょう...
ロリー

7
@ロリー:いいえ、hg purgeバージョン管理されていないファイル用です。
zerkms 2011

10

パージ拡張なしで* nixで追跡されていないものを削除するには、次を使用できます。

hg pull
hg update -r MY_BRANCH -C
hg status -un|xargs rm

どちらを使用しています

update -r --rev REVリビジョン

update -C-コミットされていない変更をクリーンに破棄(バックアップなし)

status -u --unknown不明な(追跡されていない)ファイルのみを表示します

status -n --no-status非表示のステータスプレフィックス


4

簡単な方法を探しているなら、これを試してみるのもいいでしょう。

私自身はすべてのツールのコマンドラインを覚えることがほとんどできないので、UIを使用してそれを行う傾向があります。


1.まず、「コミット」を選択します

コミット

2.次に、無視されたファイルを表示します。コミットされていない変更がある場合は、それらを非表示にします。

無視されたファイルを表示

3.次に、それらをすべて選択し、「バージョン管理外の削除」をクリックします。

それらを削除する

できました。コマンドラインよりも覚えやすい手順です。


よくわかりません(自分でSourceTreeを使用しています)が、これらのスクリーンショットはTortoiseHg Workbenchからのものであるようです。一般的に、UIベースのソリューションが役立つと思いますが、この回答にはより適切なラベル付けが必要です。また、「それらを隠す」というのは、少し漠然と聞こえます。
Jon Coombs 2017

3

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」も可能です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.