マージ中、Mercurialは未解決のファイルの.origファイルを残します。ただし、手動で問題を解決してファイルに正しいマークを付けても、.origファイルは削除されません。コマンドによって自動的に削除できますか?
私はMacで作業しているので、次のようなものを使用できます。
find . -iname '*.orig' -exec rm '{}' ';'
そしてエイリアスか何かですが、私はhg cleanupのようなものを使いたいです...
更新:
しばらく前から Purge extension はMercurialにバンドルされており、この問題をうまく解決しています。
個人的には
$ rm **/*.orig
.orig
ファイルに飽きたら。これは、shopt -s globstar
を実行した後、ZshおよびBash 4で機能します。
ただし、別のシェルを使用する場合、または組み込みのソリューションが必要な場合は、 purge extension (リンク更新2016-08-25)が気になるでしょう。それはあなたがすべての追跡されていないファイルを削除することを可能にします
$ hg purge
あなたはすべての追跡されずに無視されたファイルを削除することができます
$ hg purge --all
hg purge
を使用する利点は、ファイルを削除した後に空になるディレクトリもクリーンアップされることです。 rm
コマンドラインは、空のディレクトリをそのまま残します。
ところで。 find
ユーティリティにはアクション-delete
したがって、次のようにのみ入力できます。
find <path-to-files> -name '*.orig' -delete
.origファイルを削除したいだけで、Windowsコンピューターを使用している場合は、次のようにするとうまくいきます。
D:\workspace>hg purge -I **/*.orig --all
これにより、末尾が.origの追跡されていないファイルはすべて削除されますが、他の回答のようにother追跡されていないファイルは削除されません。
これを実行する前に、--print
フラグも含まれます。
以下は、作業コピー階層全体から.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;'
私はこの回答 before を投稿しました。しかし、これはこの答えの正しい場所です。
このバッチファイルは自分で作成しました。
IF "%1%" == "d" (
del /s *.orig
del /s *.rej
) ELSE (
del /s /p *.rej
del /s /p *.orig
)
ヘルプ:このコンテンツをorig.batとして保存します
orig d
確認なしですべての拒否と元のファイルを一度に削除しますorig
を実行して、確認付きでファイルを削除します[安全メカニズム]これがお役に立てば幸いです。
私は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 ;
pdateフック を使用する必要があります
update:これは、作業ディレクトリの更新またはmergeが完了した後に実行されます
私は個人的にリポジトリのルートから以下を使用します:
hg purge -p -I **/*.orig | xargs rm -f
インクルードする特定のファイルタイプを除外できるため、「hg purge」または「hg purge --all」を使用するよりも少し優れています。
説明のために:
これは余分なファイルを自動的に削除する方法ではありませんが、手動で実行するのに十分簡単です。
hg st
はunknownまたは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など)からのスワップファイルをクリーンアップできます。
Linuxでクリーンアップに使用するコマンドにより、findを使用して新たに検索する必要がなくなります。
これらはMercurialプロジェクトのルートディレクトリから実行する必要があります
hg status | grep ".orig" | cut -d ' ' -f 2- | xargs rm -f
または、不明なファイルをすべて消去したい場合。
hg status | cut -d ' ' -f 2- | xargs rm -f