.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.

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).


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;)).


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.


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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.