.gitignore schließt Dateien im Verzeichnis aus, jedoch nicht bestimmte Verzeichnisse

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

Das scheint nicht zu funktionieren. Wenn ich das Projekt klone, gibt es keinen "application/cache"Ordner oder "application/cache/folder"Ordner usw.

Ich möchte, wenn Dateien in den Cache-Ordnern nicht zwischengespeichert werden, sondern in Ordnern, damit die Ordnerberechtigungen übertragen werden und vorhanden sind.

Matthew
quelle

Antworten:

220

Git verfolgt keine Ordner, sondern nur Dateien. Wenn Sie also alles in einem Ordner ignorieren, hat Git nichts zu verfolgen. Sie können eine hinzufügen .gitignoreDatei in jedes Verzeichnis ( application/cache, application/cache/folder, application/cache/folder/onemorefolder/) mit folgendem Inhalt:

*
!.gitignore

Dann können Sie diese Verzeichnisse hinzufügen, und nur die .gitignoreDatei in jedem Verzeichnis wird hinzugefügt. Dies bedeutet jedoch, dass die Verzeichnisse jetzt nachverfolgt werden (dh beim Klonen erstellt werden).

Mipadi
quelle
7
Die für diesen Zweck verwendeten Gitignore-Dateien können leer sein.
Kevpie
2
Sie können leer sein, wenn die Ordner von einer oberen .gitignoreDatei ignoriert werden . In diesem Fall ist es genau meine Antwort.
KingCrunch
4
Sinnvoller und einfacher ist es, eine Datei mit dem Namen .gitkeep zu verwenden, dann müssen Sie nichts in die .gitignore-Datei einfügen.
Igel
3
@kevpie Es gibt andere Dateien im Ordner und er möchte nicht, dass sie verfolgt werden. Wenn die .gitignore-Datei leer ist, werden diese Dateien anscheinend verfolgt.
Maliayas
mit dem gleichen Zweck benutze ich .gitkeepstatt .gitignore. es macht mehr Sinn für mich
Éderson T. Szlachta
22

Git verfolgt keine leeren Verzeichnisse. Fügen Sie einfach einige leere Platzhalterdateien in die Ordner ein, die Sie festschreiben möchten.

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

Tun Sie dies auch mit jedem "leeren" Ordner. Später können Sie diese Dateien ignorieren. Sie sind nur vorhanden, um sicherzustellen, dass git diese Verzeichnisse beim Klonen erstellt. Die Einträge in verhindern, dass .gitignoreandere Dateien in den Ordnern nachverfolgt werden (es sei denn, Sie erzwingen dies mit git add -f;)).

KingCrunch
quelle
16

Es gibt noch einen anderen, vielleicht saubereren Weg, dies zu tun. Anstatt Sub-Gitignore-Dateien in den Ordnern zu haben, die Sie behalten möchten. Sie können dies wie folgt in den Stammverzeichnis .gitignore einfügen:

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

Erstellen Sie jetzt einfach leere Gitkeep-Dateien und schreiben Sie sie in die oben aufgeführten Verzeichnisse. Der Ordner wird dann mit diesen Gitkeep-Dateien verfolgt, aber keiner der Inhalte wird verfolgt.

Joel Duckworth
quelle
2
oder einfach nur !*.gitkeep:)
Éderson T. Szlachta
Die Frage war, wie man den Inhalt der Ordner ignoriert, aber die Ordner selbst behält. Ich glaube also, dass meine Antwort steht und nur! *. Gitkeep wird den Inhalt der Ordner nicht ignorieren.
Joel Duckworth
3

Sie können eine .gitignore-Datei in jede Datei einfügen (wie Mipadi sagte) oder so etwas in Ihrer .gitingnore-Stammdatei erstellen

/assets/*/
/assets/*.*

es funktioniert gut für mich

Claude Janz
quelle
Dies funktioniert jedoch nur, wenn das Repo Dateierweiterungen verwendet. So etwas root/LICENSE-FILEwird nicht ausgeschlossen.
Brett Zamir
2

Visual Studio mochte die akzeptierte Antwort nicht. Ich musste vor dem * eine neue Zeile hinzufügen, damit es funktioniert.

# Ignore all files in this folder.
*
!.gitignore
Stephen
quelle