Jak mogę zignorować wszystko w folderze w Mercurial

149

Szukam wyrażenia dla pliku .hgignore, aby zignorować wszystkie pliki poniżej określonego folderu.

np: chciałbym zignorować wszystkie pliki i foldery poniżej kosza

Właściwie każda rada na temat formowania wyrażeń byłaby świetna

Xian
źródło

Odpowiedzi:

173

Na przemian:

syntax: glob
bin/**
Ry4an Brase
źródło
myślę, że to jest dużo łatwiejsze :)
Xian
PhiLho, myślę, że to również odfiltrowałoby pliki o nazwie bin
Peter Gibson
1
Ta odpowiedź oraz ta dokumentacja pomogły mi: selenic.com/mercurial/hgignore.5.html
CenterOrbit
7
bin bin/ bin/* bin/**- Wszyscy robią to samo z glob, tj. Ignorują wszystkie katalogi i podkatalogi o nazwie bin, ale nie wszystkie nazwy plików bin.txt lub bin1. Jaki jest sens asterix?
użytkownik
Podoba mi się to jako przejrzystość, ale z pewnością używam re
``
53

Przeprowadziłem kilka eksperymentów i odkryłem, że składnia wyrażeń regularnych w systemie Windows dotyczy ścieżki zaczynającej się od bieżącego repozytorium, z ukośnikami odwrotnymi przekształconymi w ukośniki.

Więc jeśli twoje repozytorium znajduje się na przykład w E: \ Dev, hg statuszastosuje wzorce do foo / bar / file1.c i tym podobne. Do tej ścieżki mają zastosowanie kotwice.

Więc:

  • Glob ma zastosowanie do elementów ścieżki i jest zakorzeniony w częściach elementów
  • foo pasuje do dowolnego folderu (lub pliku) o nazwie foo (nie do „foobar” ani „barfoo”)
  • * foo * pasuje do dowolnego folderu lub pliku z „foo” w nazwie
  • foo / bar * dopasowuje wszystkie pliki w folderze „foo” zaczynające się od „bar”


  • Regex rozróżnia wielkość liter, nie jest zakotwiczony
  • Oczywiście znaki specjalne z odwrotnym ukośnikiem regex, takie jak. (kropka)
  • / pasuje do separatora ścieżki w systemie Windows. \ nie pasuje do tego separatora ...
  • foo dopasowuje wszystkie pliki i foldery zawierające „foo”
  • foo / dopasowuje tylko foldery kończące się na „foo”
  • / foo / dopasowuje folder „foo” gdzieś w ścieżce
  • / foo / bar / dopasowuje folder „bar” w folderze „foo” gdzieś w ścieżce
  • ^ foo dopasowuje plik lub folder zaczynający się od foo w katalogu głównym repozytorium
  • foo $ dopasowuje plik kończący się na foo

Mam nadzieję, że to pomoże, uważam, że strona HGIGNORE (5) jest trochę zwięzła.

PhiLho
źródło
Mam wzorzec „[Dd] ebug * /” w użyciu i dziwne jest to, że filtruje on również pliki takie jak „debug.txt”
Mehrdad Mirreza
9

Oba będą również odfiltrowywać wywołany katalog cabin, który może nie być tym, czego chcesz. Jeśli filtrujesz najwyższy poziom, możesz użyć:

^/bin/

W przypadku binkatalogów poniżej katalogu głównego możesz pominąć ^. Nie ma potrzeby określania składni, domyślnym jest regexp.

Derek Slager
źródło
4
To niczego nie zignoruje. Daszek mówi tylko rzeczy w katalogu głównym repozytorium, ale wiodący ukośnik przechwytuje tylko katalogi, a nie w katalogu głównym repozytorium.
Ry4an Brase
2

Nieważne, rozumiem

syntax: regexp
bin\\*

wyrażenia są zgodne ze standardową składnią wyrażeń regularnych Perla.

Xian
źródło
2
Rzeczywiście, a twoje wyrażenie oznacza „plik lub folder kończący się na bin, po którym następuje 0 lub więcej ukośników odwrotnych” ... Więc to działa, ponieważ ukośnik odwrotny jest unieważniany przez *, ale dotyczy wszystkiego, co ma w środku „bin”. W systemie Windows hg przed dopasowaniem zastępuje \ przez /.
PhiLho
2

składnia: glob bin / **

Ta odpowiedź jest pokazana powyżej, jednak chciałbym również dodać, że * i ** są obsługiwane inaczej. ** jest rekurencyjne, * nie.

Zobacz wzorce Hg

balrob
źródło
-2

ignorować pliki .class

syntax: regexp
?\.class
user2427
źródło