57

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

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

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

エイリアスを付けるか何かですが、hgcleanupのようなものを使用したいと思います...

アップデート:

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

4

12 に答える 12

70

個人的には、

$ rm **/*.orig

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

ただし、別のシェルを使用するか、組み込みのソリューションが必要な場合は、パージ拡張機能が気に入るかもしれません(リンクは 2016-08-25 に更新されました)。これにより、追跡されていないすべてのファイルを削除できます

$ hg purge

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

$ hg purge --all

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

于 2009-07-01T08:19:34.197 に答える
34

ところで。findユーティリティにはアクションがあるため、次の-delete ように入力するだけです。

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

于 2012-11-12T11:18:50.790 に答える
15

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

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

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

--printフラグを入れることで、実行する前にこれをテストできます。

于 2012-11-14T21:35:04.027 に答える
4

以下は、作業コピー階層全体の.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;'
于 2012-03-11T21:15:46.903 に答える
1

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

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

于 2009-07-01T07:31:08.787 に答える
1

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

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

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

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

  1. 実行orig dして、確認なしですべての拒否ファイルと orig ファイルを一度に削除します
  2. 実行origして確認しながらファイルを削除する【安全機構】

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

于 2012-11-23T12:40:20.590 に答える
1

私は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 ;
于 2015-07-09T21:50:10.840 に答える
1

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

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

'hg purge' または 'hg purge --all' だけを使用するよりも、含めたい特定のファイル タイプを除外できるため、少し優れています。

説明のために:

  • -p 引数は、パージするファイルのリストを出力します
  • -I 引数のホワイトリストは、含めるファイルをフィルタリングします
  • 結果のリストは xargs にパイプされ、rm -f コマンドを使用して実行されます。
于 2013-07-11T12:48:46.810 に答える
0

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

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

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

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

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

于 2015-12-01T22:02:50.907 に答える
-1

私は選ばれた答えが好きではありません。プロジェクトのすべてのレベルのすべてが削除されるわけではありません。私はこれを使用します:

for f in `find . | grep .orig$`; do rm "$f"; done

Mac と *nix の両方で動作

于 2012-01-19T20:02:25.637 に答える