Mercurialの作業ディレクトリからすべての追跡されていないファイルを削除するにはどうすればよいですか?


207

追跡されていないすべてのファイルを作業ディレクトリから削除することはできますか?一連のファイルを作業ディレクトリに追加し、「hg add」を介してそれらを追加せず、これらの新しいファイルを完全に削除したいとしますか?

私はWindowsを使用していますが、PowerShellを使用しているため、ここで組み合わせたソリューションも可能です。

回答:


286

purgeというMercurial拡張機能を追加します。Mercurialから配布されています。

この拡張機能は、「purge」コマンドを「hg」に追加して、Mercurialが認識していないファイルを削除します。つまり、追跡されていないファイル。だからあなたのコマンドは、

hg purge

追加するのを忘れたファイルを誤って削除するのを防ぐために、デフォルトでは有効になっていません。

この拡張機能をインストールするには、これをMercurial設定ファイル(UNIXでは.hgrc、WindowsではMercurial.ini)に追加します。

[extensions]
purge = 

この拡張機能を一時的に有効にするには、次を使用できます

hg purge --config extensions.purge= 

26
hg purge --all追跡されず無視されたファイルをすべて削除します。これは、ソース内ビルドのクリーンアップに役立ちます
tacaswell

22
extを一時的に有効にするために使用できますhg purge --config extensions.purge=
Pykler

121

パージなしの適切な方法は次のとおりです。

hg st -un0 | xargs -0 rm

1
@simplyharshはこの方法の方が優れていますか、それとも拡張機能を追加するよりも作業が少ないと感じましたか?
Yaakov Kuperman

3
@YaakovKuperman拡張機能を追加することは、このコマンドよりも作業が少ないと思います(一度有効にする)。パージ拡張機能は2週間に1回しか必要ないため、有効にしません。また、ばかげたことを言うが、このコマンドを入力することは、「パージ」のような何かを行う前に、もう一度考える十分な時間を与えてくれる。
12

2
@simplyharsh、それは理にかなっていますが、私がまったく同じようにパージする理由は2つあります。まず、hg purge --printを実行して、パージを実行する前に、何が削除されるのかを確認できます。次に、この方法でこれを行う場合、レポが機能するためには、そのルートにいる必要があります。
Yaakov Kuperman 2012

1
@javawizard:これは、HGの動作を再考させた素晴らしいものです。ただし、rm -rf *を含むドットファイルとドッ​​トディレクトリをスキップするため、機能します.hg/。同様に、他のdotfile(たとえば.evil-settings)も存続し、パージの方が優れています。
dirkjot 2014年

2
'hg st -u'と 'hg purge'の結果には動作の違いがあることに注意してください。'hg st -u'は追跡されていない空のディレクトリを検出しませんが、 'hg purge'はそれらを検出(および削除)します。それはあなたにとって重要かもしれませんし、そうでないかもしれません。
マイケルケント

19

ありがとう!これはPowershellでも私にとってうまくいきました:

hg st -un | rm

2
xargsはpowershellでは機能しません-これは、箱から出して「ウィンドウズフレンドリー」な唯一の回答です
Nikos Athanasiou

同意... xargsがpowershellで機能しない2番目...パージは依然として実行可能なオプションです
beauXjames '28年

私のために働いた:)
Naveen Kumar V

4
rm $(hg st -u)

... -uは「追跡されていない」を表し、別の状態を選択することもできます。


4

使用できます

hg purge --all

無視され追跡されていないファイルをすべて削除する

(いくつかの回答で説明されているように、最初にパージ拡張をインストールする必要があります)




2

パージを使用したくない場合:

rm $(hg st | grep ^? | awk '{print $2}')

0

* nixシステムを使用しているとすると、次のように実行できます。

rm `hg st | awk '/\?/ {print $2}'`

Mercurialリポジトリのルートから。

私は同じことを達成するための標準的な水銀コマンドを知りませんが、これを行うためのコマンドラインオプションは他にもたくさんあると思います。「より良い」解決策があると私は確信しており、他の提案を聞きたいと思います。

このコマンドは十分にテストされていなかったため、注意して使用してください。

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