Игнорировать все файлы, кроме одного или нескольких файлов определенного типа в Mercurial? - PullRequest
3 голосов
/ 10 ноября 2011

Идентичный вопрос к gitignore: игнорировать все файлы в иерархии папок, кроме одного конкретного типа файла , но для Mercurial.

Я хочу .hgignore игнорировать все файлы, кроме одного или нескольких файлов изопределенный тип файла, например, позволяет отслеживать только файлы типа *.java и *.class в текущем каталоге, а также в подкаталогах.

Например, в следующем каталоге:

A.java
a.txt
a.png
A.class
B/C.java
B/G/H/h.png
B/C.class
D/E/F.java

Я хочу, чтобы были включены только следующие файлы (включая структуру каталогов):

A.java
A.class
B/C.java
B/C.class
D/E/F.java

(не имеет значения, будет ли создан каталог, содержащий h.png)или нет.)

Я пытался применить и изменить те же принципы, которые упоминались в вопросе выше (но вместо этого для Mercurial), а также пытался применить принципы из вопроса Как я могу игнорироватьвсе каталоги, кроме одного, использующего .hgignore? , безуспешно.

РЕДАКТИРОВАТЬ: я пробовал следующее с вышеупомянутым деревом каталогов выше

$ hg stat
? A.class
? A.java
? B/C.class
? B/C.java
? B/G/H/h.png
? D/E/F.java
? a.png
? a.txt
$ hg add -I "**.{class, java}"
adding A.class
adding A.java
adding B/C.class
adding B/C.java
adding D/E/F.java

, который дал мне желаемый результат.Как создать .hgignore или файл конфигурации, который применяет -I "**.{class, java}" для каждого add или commit (и аналогичных запросов)?

Ответы [ 2 ]

3 голосов
/ 28 октября 2012

Попробуйте:

syntax: regexp
.*\.(?!java$|class$)

или еще лучше:

syntax: regexp
.*\.(?!java$|.*\.java$|class$|.*\.class$)

, что также будет соответствовать странным вещам, таким как "a..java" или "a.java.java".

РЕДАКТИРОВАТЬ: Вот пересмотренное решение, включающее советы Сорена и некоторые дополнительные настройки с моей стороны.Я надеюсь, что ложные срабатывания, например, то, что что-то вроде «ajava» или «java» не было проигнорировано, теперь исправлены.

syntax: regexp
\.(?!java$|class$)[^.]+$
(?<!\.)java$
(?<!\.)class$
0 голосов
/ 10 ноября 2011

Если игнорируемые шаблоны являются исчисляемыми, почему бы не использовать список шаблонов глобуса?В вашем случае для игнорирования повсюду в репо-дереве всех * .class и * .java (если я правильно понимаю задачу) .hgrc будет

syntax: glob

**.class
**.java

Если вы хотите игнорировать все файлы с большим количеством (иливозможные неизвестные вообще) расширения, за исключением некоторых, которые вы можете попробовать использовать наборы файлов (hg help filesets) в определении файлов.Игнорирование всех расширений, кроме * .png для вашего случая, будет чем-то.как (TBT!)

"set:not **.png"
...