Как я могу игнорировать все в папке в Mercurial

149

Я ищу выражение для файла .hgignore, чтобы игнорировать все файлы в указанной папке.

Например: я хотел бы игнорировать все файлы и папки ниже bin

На самом деле любой совет о том, как формируются выражения, был бы отличным

Xian
источник

Ответы:

173

С другой стороны:

syntax: glob
bin/**
Ry4an Brase
источник
это намного проще, я думаю :)
Сиань
PhiLho, я думаю, что это также отфильтровывает файлы с именем bin
Peter Gibson
1
Этот ответ, плюс эта документация помогла мне: selenic.com/mercurial/hgignore.5.html
CenterOrbit
7
bin bin/ bin/* bin/**- Все делают то же самое с glob, то есть игнорируют все каталоги и подкаталоги с именем bin, но не имя файла bin.txt или bin1. Какой смысл астерикса?
пользователь
Мне нравится это как ясность, но, конечно, используйте 'bin', если вы усвоили правила re
глобуса
53

Я провел несколько экспериментов и обнаружил, что синтаксис регулярных выражений в Windows применяется к пути, начинающемуся с текущего репозитория, с обратными слешами, преобразованными в косые черты.

Так что, если ваш репозиторий находится в E: \ Dev, например, hg statusпримените шаблоны к foo / bar / file1.c и тому подобное. Якоря применяются к этому пути.

Так:

  • Глоб применяется к элементам пути и имеет корни в элементах
  • foo соответствует любой папке (или файлу) с именем foo (не "foobar" и не "barfoo")
  • * foo * соответствует любой папке или файлу с именем "foo"
  • foo / bar * соответствует всем файлам в папке "foo", начиная с "bar"


  • Regex чувствителен к регистру, а не привязан
  • Конечно, обратные косые черты регулярные выражения, такие как. (Точка)
  • / соответствует \ путь разделителя в Windows. \ не соответствует этому разделителю ...
  • foo сопоставляет все файлы и папки с «foo» внутри
  • foo / соответствует только папкам, оканчивающимся на "foo"
  • / foo / соответствует папке "foo" где-то в пути
  • / foo / bar / соответствует папке "bar" в папке "foo" где-то в пути
  • ^ foo соответствует файлу или папке, начиная с foo в корне хранилища
  • foo $ соответствует файлу, оканчивающемуся на foo

Я надеюсь, что это поможет, я нашел страницу HGIGNORE (5) немного лаконичной.

PhiLho
источник
У меня есть шаблон '' [Dd] ebug * / '', и странная вещь в том, что он также фильтрует файлы типа '' debug.txt ''
Mehrdad Mirreza
9

Оба из них также отфильтруют каталог с именем cabin, который может быть не тем, что вы хотите. Если вы фильтруете верхний уровень, вы можете использовать:

^/bin/

Для binкаталогов ниже вашего корня, вы можете опустить ^. Нет необходимости указывать синтаксис, по умолчанию используется регулярное выражение.

Дерек Слагер
источник
4
Это не будет ничего игнорировать. Каретка говорит только о вещах в корне репо, но главный слеш ловит только директории, а не корень репо.
Ry4an Brase
2

Неважно, я понял

syntax: regexp
bin\\*

выражения следуют стандартному синтаксису регулярных выражений perl.

Xian
источник
2
Действительно, и ваше выражение означает «файл или папка, оканчивающиеся на bin и сопровождаемые 0 или более обратными слешами» ... Так что это работает, потому что обратная косая черта аннулируется *, но она применяет что-либо с «bin» внутри. В Windows hg заменяет \ на / перед соответствием.
PhiLho
2

Синтаксис: glob bin / **

Этот ответ показан выше, однако я также хотел бы добавить, что * и ** обрабатываются по-разному. ** рекурсивно, * нет.

Смотрите Hg Patterns

balrob
источник
-2

игнорировать файлы .class

syntax: regexp
?\.class
user2427
источник