Як я можу проігнорувати все під папкою в Mercurial


149

Я шукаю вираз для файлу .hgignore, щоб ігнорувати всі файли під вказаною папкою.

наприклад: Я хотів би ігнорувати всі файли та папки під біном

Насправді будь-яка порада про те, як формуються вирази, була б чудовою

Відповіді:


173

По черзі:

syntax: glob
bin/**

це набагато простіше, я думаю :)
Xian

PhiLho, я думаю, що це також відфільтрує файли з іменем bin
Пітер Гібсон

1
Ця відповідь, плюс ця документація, допомогла мені: selenic.com/mercurial/hgignore.5.html
CenterOrbit

7
bin bin/ bin/* bin/**- Усі роблять те ж саме з glob, тобто ігнорують усі каталоги та підкаталоги з іменем bin, але не будь-яке ім'я файлу bin.txt або bin1. У чому сенс астериксу?
користувач

Мені це подобається як ясність, але, безумовно, використовуйте "бін", якщо ви інтерналізували правила re
глобусу

53

Я зробив кілька експериментів, і я виявив, що синтаксис регулярних виразів у Windows застосовується до шляху, починаючи з поточного сховища, з косою косою рисою, перетвореною на косу рису.

Отже, якщо ваш сховище знаходиться в E: \ Dev, наприклад, hg statusзастосує шаблони проти foo / bar / file1.c тощо. До цього шляху застосовуються якорі.

Так:

  • Glob застосовується до елементів контуру і кореняться до частин елементів
  • foo відповідає будь-якій папці (або файлу) з ім'ям foo (не "foobar" і "barfoo")
  • * foo * відповідає будь-якій папці або файлу з "foo" у назві
  • foo / bar * відповідає всім файлам у папці "foo", починаючи з "bar"


  • Regex відрізняється від регістру, не закріплюється
  • Звичайно, спеціальні символи на зразок зворотної косої риски. (крапка)
  • / match \ separator path у Windows. \ не відповідає цьому розділювачу ...
  • foo відповідає всім файлам і папкам з "foo" всередині
  • foo / відповідає лише папкам, що закінчуються на "foo"
  • / foo / відповідає папці "foo" десь на шляху
  • / foo / bar / відповідає папці "bar" у папці "foo" десь на шляху
  • ^ foo відповідає файлу або папці, починаючи з foo в корені сховища
  • foo $ відповідає файлу, що закінчується foo

Я сподіваюся, що це допоможе, я знайшов сторінку HGIGNORE (5) трохи лаконічною.


У мене є шаблон '' [Dd] ebug * / '' у використанні, і дивна річ полягає в тому, що він також фільтрує файли типу '' debug.txt ''
Мехрдад Мірреза

9

Обидва вони також відфільтрують каталог з назвою cabin, який може бути не тим, що ви хочете. Якщо ви фільтруєте верхній рівень, ви можете використовувати:

^/bin/

Для binкаталогів під вашим коренем ви можете опустити ^. Не потрібно вказувати синтаксис, за замовчуванням regexp є.


4
Це нічого не буде ігнорувати. Карета говорить лише про те, що знаходиться в корені репо, але провідна коса риса ловить лише бруд, а не в корені репо.
Bra4 Ry4an Brase

2

Не зважаючи, я зрозумів

syntax: regexp
bin\\*

вирази відповідають стандартному синтаксису регулярного виразу Perl.


2
Дійсно, і ваш вираз означає "файл чи папку, що закінчується біном та супроводжується 0 або більше косою косою рискою" ... Так це працює, тому що зворотна косої риски зведена нанівець *, але вона застосовує все, що має "бін" всередині. У Windows hg замінює \ на / до відповідності.
PhiLho

2

синтаксис: glob bin / **

Ця відповідь показана вище, проте я також хотів би додати, що * та ** обробляються по-різному. ** рекурсивний, * ні.

Див Hg Patterns


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.