web-dev-qa-db-ja.com

Mercurial作業ツリー内のすべての.origファイルを自動的に削除する方法は?

マージ中、Mercurialは未解決のファイルの.origファイルを残します。ただし、手動で問題を解決してファイルに正しいマークを付けても、.origファイルは削除されません。コマンドによって自動的に削除できますか?

私はMacで作業しているので、次のようなものを使用できます。

find . -iname '*.orig' -exec rm '{}' ';'

そしてエイリアスか何かですが、私はhg cleanupのようなものを使いたいです...

更新:

しばらく前から Purge extension はMercurialにバンドルされており、この問題をうまく解決しています。

54
rkj

個人的には

$ rm **/*.orig

.origファイルに飽きたら。これは、shopt -s globstarを実行した後、ZshおよびBash 4で機能します。

ただし、別のシェルを使用する場合、または組み込みのソリューションが必要な場合は、 purge extension (リンク更新2016-08-25)が気になるでしょう。それはあなたがすべての追跡されていないファイルを削除することを可能にします

$ hg purge

あなたはすべての追跡されずに無視されたファイルを削除することができます

$ hg purge --all

hg purgeを使用する利点は、ファイルを削除した後に空になるディレクトリもクリーンアップされることです。 rmコマンドラインは、空のディレクトリをそのまま残します。

67
Martin Geisler

ところで。 findユーティリティにはアクション-deleteしたがって、次のようにのみ入力できます。

find <path-to-files> -name '*.orig' -delete

31
vectoroc

.origファイルを削除したいだけで、Windowsコンピューターを使用している場合は、次のようにするとうまくいきます。

D:\workspace>hg purge -I **/*.orig --all

これにより、末尾が.origの追跡されていないファイルはすべて削除されますが、他の回答のようにother追跡されていないファイルは削除されません。

これを実行する前に、--printフラグも含まれます。

13
mlissner

以下は、作業コピー階層全体から.origファイルを削除し、スペースを含むパスに対しても機能します。

find . -name *.orig | while read -d $'\n' file; do rm -v "$file"; done;

私は.bash_profileでエイリアスを使用しています:

alias clearorig='echo "Removing .orig files..."; find . -name *.orig | \
while read -d $'\''\n'\'' file; do rm -v "$file"; done;'
4
mccrappy

私はこの回答 before を投稿しました。しかし、これはこの答えの正しい場所です。

このバッチファイルは自分で作成しました。

IF "%1%" == "d" (
    del /s *.orig
    del /s *.rej
 ) ELSE ( 
    del /s /p *.rej
    del /s /p *.orig
 )

ヘルプ:このコンテンツをorig.batとして保存します

  1. 実行orig d確認なしですべての拒否と元のファイルを一度に削除します
  2. origを実行して、確認付きでファイルを削除します[安全メカニズム]

これがお役に立てば幸いです。

1
mahe madhi

私はPowershellで作業していますが、ここで答えが見つかりませんでした:

# NOTE: be in the root of your repository
# fetch all .orig files recursively
$orig = (dir *.orig -recurse) ;

# remove each .orig file
foreach ($item in $orig) { del $($item.FullName) ; }

# afterwards I make sure to remove the references to the .orig files in the repo
# then commit & Push
hg addremove ; 
hg commit -m "remove .orig" ;
hg Push ;
1
sonjz

pdateフック を使用する必要があります

update:これは、作業ディレクトリの更新またはmergeが完了した後に実行されます

1
dfa

私は個人的にリポジトリのルートから以下を使用します:

hg purge -p -I **/*.orig | xargs rm -f

インクルードする特定のファイルタイプを除外できるため、「hg purge」または「hg purge --all」を使用するよりも少し優れています。

説明のために:

  • -p引数は、パージされるファイルのリストを出力します
  • -I引数のホワイトリストは、含めるファイルをフィルタリングします
  • 結果のリストはxargsにパイプされ、rm -fコマンドを使用して実行されます
1
Gary

これは余分なファイルを自動的に削除する方法ではありませんが、手動で実行するのに十分簡単です。

hg stunknownまたはnot trackedファイルを表示できます。この出力をsystem rmコマンドの引数として使用できます。これが私が実行した実際の例です:

$ # SHOW ONLY THE CRUFT
$ hg status --unknown
? config/settings.rb.orig
? lib/helpers.rb.orig
? routes/main.rb.orig

$ # THE CRUFT WITHOUT THE "?" PREFIX
$ hg status --unknown --no-status
config/settings.rb.orig
lib/helpers.rb.orig
routes/main.rb.orig

$ # SAFELY REMOVE ALL CRUFT
$ rm -- `hg st -un`

空のディレクトリが残っている場合は、rm-rおよび-dフラグが役立つことがあります。

ボーナスとして、hg status --ignoredを使用して、無視されたすべての一時ファイルと、エディター(Vimなど)からのスワップファイルをクリーンアップできます。

0
Clint Pachl

Linuxでクリーンアップに使用するコマンドにより、findを使用して新たに検索する必要がなくなります。

これらはMercurialプロジェクトのルートディレクトリから実行する必要があります

hg status | grep ".orig" | cut -d ' ' -f 2- | xargs rm -f

または、不明なファイルをすべて消去したい場合。

hg status | cut -d ' ' -f 2- | xargs rm -f

0
toddles_fp