hgignore: помогает игнорировать все файлы, кроме определенных - PullRequest
43 голосов
/ 03 октября 2009

Мне нужен файл .hgdontignore :-), чтобы включить определенные файлы и исключить все остальное в каталоге. По сути, я хочу включить только файлы .jar в определенный каталог и больше ничего. Как я могу это сделать? Я не настолько квалифицирован в синтаксисе регулярных выражений. Или я могу сделать это с помощью синтаксиса glob? (Я предпочитаю это для удобства чтения)

В качестве примера, скажем, я хочу исключить все файлы в foo/bar/, кроме foo/bar/*.jar.

Ответы [ 2 ]

42 голосов
/ 04 октября 2009

Хороший ответ от Михаила, но другой вариант - просто исключить:

foo/bar/**

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

37 голосов
/ 03 октября 2009

Для этого вам нужно использовать это регулярное выражение:

foo/bar/.+?\.(?!jar).+

Объяснение

Вы говорите, что игнорировать, поэтому это выражение ищет то, что вы не хотите.

  1. Вы ищете любой файл, имя которого (включая относительный каталог) включает (foo / bar /)
  2. Затем вы ищите любые символы, предшествующие точке (. +? \. == соответствуют одному или нескольким символам любого времени, пока вы не достигнете символа точки)
  3. Затем убедитесь, что у него нет окончания "jar" (?! Jar) (это называется отрицательным взглядом вперед
  4. Наконец вы берете окончание, которое у него есть (. +)

Регулярные выражения легко испортить, поэтому я настоятельно рекомендую вам воспользоваться инструментом, подобным Regex Buddy , который поможет вам построить их. Это сломает регулярное выражение в простой английский, который действительно помогает.

EDIT

Привет Джейсон С , вы меня поймали, он пропускает эти файлы.

Это исправленное регулярное выражение будет работать для каждого приведенного вами примера:

foo/bar/(?!.*\.jar$).+

Находит:

  • Foo / бар / baz.txt
  • Foo / бар / Baz
  • Foo / бар / баночка
  • Foo / бар / baz.jar.txt
  • Foo / бар / baz.jar.
  • Foo / бар / Baz.
  • Foo / бар / baz.txt.

но не находит

  • Foo / бар / baz.jar

Новое объяснение

Это говорит, что ищите файлы в "foo / bar /", затем не сопоставляйте, если есть ноль или более символов, за которыми следует ".jar", а затем больше нет символов ($ означает конец строки), затем, если это не так, сопоставьте любые следующие символы.

...