2013-05-21 17 views
8

Mam następującą strukturę folderu:gitignore wyjątek nie działa

public 
    media 
     catalog 
      product 
      category 
     private 
     tmp 
     var 
     test 

Chcę gitignore wszystko w katalogu media wyjątkiem catalog/category i private

Moja gitignore próbuję to:

public/media/* 
!public/media/catalog/category/ 
!public/media/private 

Ale to nie działa. Żadne nowe pliki dodane do katalogów category lubnie są dostępne do dodania.

Mógłbym po prostu git dodać siły, ale chciałbym to zrobić poprzez gitignore jeśli to możliwe

+0

Zobacz następujące pytanie, które jest bardzo podobne: http://stackoverflow.com/questions/7001126/git-ignore-all-except-subfolder – greydet

Odpowiedz

7

To zazwyczaj najprostsza umieścić tylko .gitignore na poziomie, gdzie zaczyna się liczyć. (To również pomaga, jeśli kiedykolwiek podzielić repozytorium lub przenieść katalogi dookoła). W tym przypadku trzeba ignorować wszystko oprócz catalog i private w folderze public/media więc w public/media/.gitignore put:

/* 
!/catalog/ 
!/private/ 

aw public/media/catalog/.gitignore put:

/* 
!/category/ 

To ważne (i powodem, że zasady te nie pracują), aby nie ignorować samego katalogu public/media/catalog, gdyż w przeciwnym razie wszystko w nim będą ignorowane, nawet jeśli nie chcą ignorować konkretną część swoich zawartość.

Oczywiście, można połączyć to w jedną ignorować na poziomie public/media jeśli chcesz:

/* 
!/catalog/ 
!/private/ 
/catalog/* 
!/catalog/category/ 
+0

OK to działa. Właściwie to jest trochę bolesne, ponieważ miałem 1 fajny gitignore, ale teraz mam 3. Ale działa dziękuję –

+0

@MartyWallace: Możesz mieć pojedyncze ".gitignore", jeśli wolisz (w mojej odpowiedzi liczyłem tylko 2) Po prostu uważam, że wzory stają się bardziej złożone. –

2

Rozwiązanie z jednej .gitignore na poziomie korzenia

Próbowano użyć jednego .gitignore plik na poziomie katalogu głównego repozytorium. Podobnie jak ty, zwykle także centralizuję wszystkie ignorowania, aby zachować porządek. W tym przypadku jest to jednak trudne, ponieważ "nie można ponownie dołączyć pliku, jeśli katalog nadrzędny tego pliku jest wykluczony" [source].

Moja brzydki rozwiązanie tego ograniczenia, które również zbadać w moich powiązanych odpowiedzi here i here: re obejmują wszystkie katalogi nadrzędne wzdłuż ścieżki przed ponownym tym żądany plik, zachowując inne pliki w tych katalogach nadrzędnych przez ponownie je wykluczać.

Z tym, twoi .gitignore wzory byłoby:

public/media/** 
!public/media/private 
!public/media/catalog/ 

public/media/catalog/** 
!public/media/catalog/category/