Ответ 1
У вас почти правильный ответ в комментариях от gavinb, но матч был немного шире. Однако ключевая концепция игнорирования после лица была предоставлена RogerPage, снова в комментарии (что, когда все предпочитают комментарии к ответам?).
Посмотрите на эти девять файлов:
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 вы делаете:
\..*
Вы игнорируете восемь из этих девяти файлов:
$ 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
который более широк, чем вы сказали. Он игнорирует что-либо с точкой в любом месте.
Чтобы игнорировать все файлы и директории (не то, что вы сказали, но то, что вам кажется), начиная с точки, вы используете этот шаблон regexp:
(^|/)\.
в котором говорится, что вещь перед буквальной точкой должна быть началом строки (^
) или косой чертой.
$ hg stat -i
I .hgignore
I .startwithdot/.filestartwithdot
I .startwithdot/file.with.dots
I .startwithdot/filewithoutdots
I dir.with.dots/.filestartwithdot
I dirwithoutdots/.filestartwithdot
Это поймало только файлы или каталоги, начинающиеся с точки.
Однако другая ключевая концепция, которая возникла, заключалась в том, что .hgignore не имеет эффекта после добавления файла. Это предотвратит добавление с помощью wild card, но вы всегда можете переопределить .hgignore с явным hg add
. и после того, как файлы были добавлены, hgignore больше не проконсультируется.
Это действительно удобно, потому что вы можете игнорировать широко (ex: .*\.jar
), а затем добавлять исключения, которые вы хотите вручную, без необходимости futz с вашим файлом hgignore. Однако в этом случае это означает, что вам нужно hg rm
файлы, которые вы уже добавили случайно, и tonfa показал, как это сделать (пока в ваших файлах нет пробелов).
В конце это похоже на то, что вы хотите в файле .hgignore:
(^|/)\._
и что вам нужно удалить те, которые вы уже добавили:
find . -type f -name "._*" -print0 |xargs -0 hg rm