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

#regex #mercurial #hgignore

#регулярное выражение #mercurial #hgignore

Вопрос:

Вот моя структура файлов / папок:

Code/.hg

Code/.hgignore

Code/CASH/readme.txt

Code/CASH/bin/FTI/abc.dll

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

Вот мой файл .hgignore, который не работает:

 syntax: regexp
CASH/(?!bin/FTI/).*
  

В результате игнорируется все, что находится в папке CASH, включая /bin/abc.dll файл, который я бы не хотел игнорировать.

Есть идеи?

Ответ №1:

Это не совсем тот ответ, который вы ищете, но причина, по которой Mercurial не имеет приличного синтаксиса для «всего, кроме» в файлах .hgignore (регулярные выражения с нулевой шириной не были запланированы), заключается в том, что hg add переопределяет .hgignore .

У вас может быть .hgignore файл, содержащий только это:

 ^CASH/
  

а затем выполните однократное hg add CASH/bin/FTI/** и вы будете отслеживать все будущие изменения во всех файлах, которые уже существуют в этом каталоге.

Конечно, если новый двоичный файл отображается в CASH / bin / FTI, вам нужно не забыть добавить его, но изменения в уже добавленных файлах не потребуют каких-либо дополнительных действий. Если двоичные файлы с новыми именами не являются обычным явлением, это более распространенная настройка.

Ответ №2:

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

 syntax: regexp
CASH/(?!bin)
CASH/bin/(?!FTI)