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