Я ненавижу видеть почти каждый каталог в моем списке репозитория каждый файл дважды, один раз с точкой перед ним и один раз без нее. Я попытался добавить .*
в свой .hgignore файл, но он не имеет никакого эффекта. Это неправильный синтаксис, и что еще более важно, это плохая идея попробовать это в первую очередь? Спасибо.
Как заставить mercurial игнорировать все скрытые файлы?
Ответ 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
Ответ 2
Я использую это в своем .hgignore
:
syntax: regexp
# dotfiles
(?<![^/])\.
Что читается: периоды, которым не предшествует нечто иное, кроме косой черты.
Решение Ry4an тоже хорошо, я тоже использовал его. Не уверен, что более эффективно.