Mercurial.hgignore Negative Lookahead

Используя Mercurial, мне нужно игнорировать все файлы, кроме тех, которые находятся в определенном каталоге под названием "хранители".

На первый взгляд, это казалось простым использованием Regex и Negative Lookahead; однако, хотя я могу проверить свое регулярное выражение в Regex Buddy и других инструментах, в TortoiseHg, он не работает должным образом.

Файлы:

  • барахло \junk.txt
  • барахло\текст
  • Хранители\тест\тест
  • Хранители\тест\test2\hi.txt
  • keepersblah.txt

Нельзя игнорировать только два файла под хранителями.

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

^(?!keepers/).+$

К сожалению, это приводит к игнорированию всех файлов. Если я изменю его на:

^(?!keepers).+$

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

Необычно, если я изменю его на это:

^(?!keepers/).+\..+$

Он будет правильно соответствовать папке, но он не будет игнорировать файлы, которые не находятся в папке хранителей, если у них нет расширения.

Любые советы будут оценены.

удаление мертвой ссылки ImageShack

Ответ 1

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

^(?!keepers(?:/|$))

или (менее компактный, но более простой для понимания):

^(?!keepers/|keepers$)