Mercurial .hgignore Негативный Lookahead - PullRequest
10 голосов
/ 11 февраля 2010

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

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

Файлы:

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

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

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

^(?!keepers/).+$

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

^(?!keepers).+$

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

Странно, если я изменю это на:

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

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

Буду признателен за любой совет.

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

1 Ответ

7 голосов
/ 11 февраля 2010

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

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

или (менее компактно, но проще для понимания):

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