.gitignore wyklucza pliki w katalogu, ale nie w niektórych katalogach

98
application/cache/*
application/cache/folder/*
application/cache/folder/onemorefolder/*

To nie wydaje się działać. Kiedy klonuję projekt, nie ma "application/cache"folderu ani "application/cache/folder"folderu itp.

Chciałbym, aby pliki w folderach pamięci podręcznej nie były buforowane, ale foldery były, aby uprawnienia do folderów zostały przeniesione i istniały.

Mateusz
źródło

Odpowiedzi:

220

Git nie śledzi folderów, tylko pliki, więc jeśli zignorujesz wszystko w folderze, Git nie będzie miał nic do śledzenia. Można dodać .gitignoreplik do każdego katalogu ( application/cache, application/cache/folder, application/cache/folder/onemorefolder/) o następującej treści:

*
!.gitignore

Następnie możesz dodać te katalogi i tylko .gitignoreplik w każdym katalogu zostanie dodany - ale oznacza to, że katalogi będą teraz śledzone (tj. Tworzone podczas klonowania).

mipadi
źródło
7
Pliki .gitignore używane do tego celu mogą być puste.
kevpie,
2
Mogą być puste, jeśli foldery są ignorowane przez górny .gitignoreplik. W tym przypadku jest to dokładna moja odpowiedź.
KingCrunch
4
bardziej sensowne i prostsze jest użycie pliku o nazwie .gitkeep, wtedy nie musisz niczego umieszczać w pliku .gitignore.
Jeż
3
@kevpie W folderze są inne pliki i nie chce, aby były śledzone. Jeśli plik .gitignore jest pusty, te pliki będą najwyraźniej śledzone.
maliayas
w tym samym celu używam .gitkeepzamiast .gitignore. to ma dla mnie więcej sensu
Éderson T. Szlachta 13.07.16
22

Git nie śledzi pustych katalogów. Po prostu dodaj kilka pustych plików zastępczych w folderach, które chcesz zatwierdzić.

touch application/cache/.keep
git add -f application/cache/.keep

Zrób to również dla każdego „pustego” folderu. Później możesz zignorować te pliki, tak naprawdę istnieją tylko po to, aby upewnić się, że git utworzy te katalogi na klonie. Wpisy w zabezpieczają .gitignoreinne pliki w folderach przed śledzeniem (chyba że wymusisz to git add -f;)).

KingCrunch
źródło
16

Jest na to inny, być może czystszy sposób. Zamiast mieć pliki sub .gitignore w folderach, które chcesz zachować. Możesz umieścić to w katalogu głównym .gitignore w następujący sposób:

application/cache/*
application/cache/folder/*
application/cache/folder/onemorefolder/*
!*.gitkeep

Teraz po prostu utwórz i zatwierdź puste pliki .gitkeep do katalogów wymienionych powyżej. Folder będzie następnie śledzony za pomocą tych plików .gitkeep, ale żadna zawartość nie będzie śledzona.

Joel Duckworth
źródło
2
lub po prostu !*.gitkeep:)
Éderson T. Szlachta 13.07.16
Pytanie brzmiało, jak zignorować zawartość folderów, ale zachować same foldery. Więc uważam, że moja odpowiedź jest aktualna i samo posiadanie! *. Gitkeep nie zignoruje zawartości folderów.
Joel Duckworth
3

możesz umieścić plik .gitignore w każdym z nich (tak jak powiedział mipadi) lub zrobić coś takiego w swoim głównym pliku .gitingnore

/assets/*/
/assets/*.*

to działa dobrze dla mnie

Claude Janz
źródło
Działa to, ale tylko wtedy, gdy repozytorium używa rozszerzeń plików. Coś takiego root/LICENSE-FILEnie zostanie wykluczone.
Brett Zamir
2

Visual Studio nie spodobała się zaakceptowana odpowiedź. Musiałem dodać nową linię przed *, aby to działało.

# Ignore all files in this folder.
*
!.gitignore
Stephen
źródło