2010-02-11 16 views
10

Używając Mercurial, muszę zignorować wszystkie pliki z wyjątkiem tych w określonym katalogu zwanym "keepers".Mercurial .hgignore Negatywne odrzucenie

W obliczu rzeczy, wydawało się to łatwe przy użyciu Regex i Negative Lookahead; jednak, mimo że jestem w stanie zweryfikować moje wyrażenie regularne w Regex Buddy i innych narzędziach, w TortoiseHg, to nie działa zgodnie z oczekiwaniami.

Pliki:

  • śmieci \ junk.txt
  • śmieci \ tekst
  • hodowców \ test \ test
  • hodowców \ test \ test2 \ hi.txt
  • keepersblah.txt

Tylko dwa pliki pod trzymaczami nie powinny być ignorowane.

Oto regex Mam nadzieję, że działa:

^(?!keepers/).+$ 

Niestety, powoduje to wszystkie pliki, które mają być ignorowane. Jeśli zmienię to na:

^(?!keepers).+$ 

działa zgodnie z oczekiwaniami. Oznacza to, że ignoruje pliki/foldery, które nie zaczynają się od przechowujących. Ale chcę ignorować pliki, które zaczynają się od opiekunów.

Bizarrely, jeśli zmienię go w ten sposób:

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

będzie prawidłowo dopasować folder, ale nie będzie ignorować pliki, które nie są w posiadaczami folder, jeśli nie mają one rozszerzenie.

Każda rada byłaby doceniona.

usuwając martwy link ImageShack

Odpowiedz

7

Problem z pierwszym wyrazem jest to, że regex jest również testowane na „strażników” się. Sprawa ta może być dodany dodatkowy warunek:

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

lub (mniej zwarta, ale prostsze do zrozumienia):

^(?!keepers/|keepers$) 
+0

Próbowałem też '^ (?! hodowców \ b)', ale że nie udało się z "keepers.txt" – eswald

+0

Genialny! Dziękuję bardzo, obie działały idealnie. Waliłem w głowę przez godzinę :) –

+2

W przypadku asercji z wyprzedzeniem nie ma potrzeby grup przechwytujących, ponieważ i tak nie są przechwytywane: '^ (?! keepers (/ | $)). * – Tomalak

Powiązane problemy