Как сделать подвижным, игнорируют все скрытые файлы?

Я очень не хочу видеть почти каждый каталог в своем списке хранилищ каждый файл дважды, однажды с точкой перед ним и однажды без. Я пытался добавить .* в мой .hgignore файл, но это не имеет никакого эффекта. Действительно ли это - неправильный синтаксис, и что еще более важно, действительно ли это - плохая идея попробовать это во-первых?Спасибо.

12
задан alexandrul 20 May 2010 в 05:22
поделиться

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

что шире, чем вы сказали, что хотели. Он игнорирует все, что содержит точку где угодно .

Чтобы игнорировать все файлы и директории (не то, что вы сказали, а то, что вам кажется), начинающиеся с точки, вы используете этот шаблон регулярного выражения:

(^|/)\.

, который говорит, что вещь перед буквальной точкой должно быть началом строки ( ^ ) или косой чертой.

$ 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 не действует после добавления файла. Это предотвратит добавление по шаблону, но вы всегда можете переопределить .hgignore с явным hg add . и после добавления файлов к hgignore больше не обращаются.

Это действительно очень удобно, потому что вы можете игнорировать в целом (например: . * \. Jar ), а затем добавлять исключения, которые вы действительно хотите, вручную без необходимости работать с вашим файлом hgignore. Однако в данном случае это означает, что вам нужно hg rm файлы, которые вы уже добавили случайно, и tonfa показала, как это сделать (при условии, что в именах файлов нет пробелов).

В конце концов, это похоже на то, что вы хотите в своем.Файл hgignore:

(^|/)\._

, и вам нужно удалить те, которые вы уже добавили:

find . -type f -name "._*" -print0 |xargs -0 hg rm
18
ответ дан 2 December 2019 в 19:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: