リポジトリ内のほぼすべてのディレクトリが各ファイルを 2 回 (1 回はドットの前に、もう 1 回はドットなしで) リストするのを見るのは嫌いです。.*
.hgignore ファイルに追加しようとしましたが、効果がありません。これは間違った構文ですか?それよりも重要なことに、最初からこれを試すのは悪い考えですか? ありがとう。
2 に答える
あなたはgavinbからのコメントでほぼ正しい答えを持っていますが、一致は少し広すぎました. ただし、顔がRogerPageによって提供された後、無視することについての重要な概念は、コメントで再び説明されました(誰もが回答よりもコメントを好むのはなぜですか?)。
これらの 9 つのファイルを見てみましょう。
dir.with.dots/file.with.dots
dir.with.dots/filewithoutdots
dir.with.dots/.filestartwithdot
dirwithoutdots/file.with.dots
dirwithoutdots/filewithoutdots
dirwithoutdots/.filestartwithdot
.startwithdot/file.with.dots
.startwithdot/filewithoutdots
.startwithdot/.filestartwithdot
hgignore のデフォルトの正規表現モードの場合:
\..*
これらの 9 つのファイルのうち 8 つを無視します。
$ hg stat -i
I .hgignore
I .startwithdot/.filestartwithdot
I .startwithdot/file.with.dots
I .startwithdot/filewithoutdots
I dir.with.dots/.filestartwithdot
I dir.with.dots/file.with.dots
I dir.with.dots/filewithoutdots
I dirwithoutdots/.filestartwithdot
I dirwithoutdots/file.with.dots
これは、あなたが望んでいたよりも広いです。ドットが含まれているものはすべて無視されます。
ドットで始まるすべてのファイルとディレクトリ(あなたが言ったことではなく、あなたが望んでいるように見えるもの)を無視するには、次の正規表現パターンを使用します。
(^|/)\.
これは、リテラルのドットの前にあるものは、行頭 ( ^
) またはスラッシュでなければならないことを示しています。
$ hg stat -i
I .hgignore
I .startwithdot/.filestartwithdot
I .startwithdot/file.with.dots
I .startwithdot/filewithoutdots
I dir.with.dots/.filestartwithdot
I dirwithoutdots/.filestartwithdot
ドットで始まるファイルまたはディレクトリのみをキャッチしました。
ただし、もう 1 つの重要な概念として、ファイルが追加された後は .hgignore は無効になるというものがあります。ワイルドカードによる追加を防ぎますが、明示的な .hgignore でいつでもオーバーライドできますhg add
。ファイルが追加されると、hgignore は参照されなくなります。
これは実際には非常に便利です。なぜなら、大まかに無視して (例: .*\.jar
)、必要な例外を手動で追加できるため、hgignore ファイルをいじる必要がありません。ただし、この場合、誤って既に追加したファイルが必要であることを意味しhg rm
、tonfa がその方法を示しました (ファイル名にスペースが含まれていない場合)。
最終的に、.hgignore ファイルに必要なものは次のようになります。
(^|/)\._
そして、すでに追加したものを削除する必要があること:
find . -type f -name "._*" -print0 |xargs -0 hg rm
私はこれを私の中で使用します.hgignore
:
syntax: regexp
# dotfiles
(?<![^/])\.
読み方: ピリオドの前にスラッシュ以外のものがない。
Ry4an のソリューションも優れています。以前にも使用したことがあります。どちらがより効率的かはわかりません。