hgignore: помогите игнорировать все файлы, кроме определенных

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

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

2 ответов


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

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

объяснение

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

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

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

редактировать

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

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

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

Это находит:

  • foo / bar / baz.txt
  • foo / bar / baz
  • foo / bar / jar
  • foo / bar / baz.сосуд.txt
  • foo / bar / baz.сосуд.
  • foo / bar / baz.
  • foo / bar / baz.формат txt.

но не найти

  • foo / bar / baz.Джар

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

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


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

foo/bar/**

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