2010-05-12 8 views
59

Próbuję użyć pliku .gitignore z negowanymi wzorami (linie zaczynające się od!), Ale nie działa tak, jak oczekuję.Jak działają negowane wzorce w .gitignore?

Jako minimalny przykład, mam folllowing strukturę katalogów:

C:/gittest 
-- .gitignore 
-- aaa/ 
    -- bbb/ 
    -- file.txt 
    -- ccc/ 
    -- otherfile.txt 

w moim pliku gitignore, mam to:

aaa/ 
!aaa/ccc/ 

Moje zrozumienie (na podstawie this doc page) jest to, że plik aaa/ccc/otherfile.txt nie powinien być ignorowany, ale w rzeczywistości git ignoruje wszystko pod aaa.

Czy nie rozumiem tego zdania: "Opcjonalny prefiks !, który neguje wzór, każdy pasujący plik wykluczony przez poprzedni wzór zostanie ponownie dołączony."?

BTW, jest to w systemie Windows z programem msysgit 1.7.0.2.

Odpowiedz

104

myślę, że to, co rzeczywiście chcesz zrobić to:

aaa/* 
!aaa/ccc 

Mówisz to „nie wyglądają w aaa”, więc nawet nie analizuje ścieżkę aaa/ccc. Jeśli używasz wieloznaczny, to nadal odczytuje zawartość aaa, następnie każdy wpis odpowiada wieloznaczny i jest ignorowany, chyba aaa/ccc który dostaje umieścić widok.

+2

które nie działało dla mnie ... – iconoclast

+2

@iconoclast: Wtedy prawdopodobnie robisz coś innego. Zadaj kolejne pytanie (z pełnymi informacjami), jeśli potrzebujesz pomocy. – Cascabel

+0

To też nie działa dla mnie: /apps/* !/Apps/myApps/FluidTest/bin/ –

10

Jeśli chcesz wykluczyć wszystko aaa, ale to aaa/ccc wszystko pod nią, należy użyć:

aaa/* 
!aaa/ccc 
!aaa/ccc/* 

pierwsza linia mówi git ignorować everthing pod aaa, drugi mówi mu, aby nie ignorować folder aaa/ccc które faktycznie „umożliwia” trzecia linia, która następnie informuje go, aby nie ignorować wszystko poniżej aaa/ccc.

+1

Trzecia linia nie robi dla mnie żadnej różnicy. –

+1

Aby móc umieścić wszystko w dowolnym podkatalogu 'aaa/ccc' na jakimkolwiek poziomie, dla mnie zadziałało'! Aaa/ccc/** 'zamiast'! Aaa/ccc/* ' – boclodoa

1

Jeśli ktoś nadal nie widzi nowych niezignorowanych przedmiotów w urządzeniu git status, który przed uruchomieniem musi podać git update-index, może pomóc w zobaczeniu zmian (przynajmniej w wersji 1.9.x gitbasha).