Commit 59856de von Karsten Blees (kblees) für Git 1.9/2.0 (Q1 2014) klärt diesen Fall:
gitignore.txt
: Klären der rekursiven Natur der ausgeschlossenen Verzeichnisse
Ein optionaler Präfix "!
", der das Muster negiert; jede übereinstimmende Datei, die durch ein vorheriges Muster ausgeschlossen wurde, wird wieder eingeschlossen.
Es ist nicht möglich, eine Datei wieder einzuschließen, wenn ein übergeordnetes Verzeichnis dieser Datei ausgeschlossen ist. (*
)
(*
: es sei denn, bestimmte Bedingungen sind in git 2.8+ erfüllt, siehe unten)
Git listet ausgeschlossene Verzeichnisse aus Leistungsgründen nicht auf, daher haben Muster für enthaltene Dateien keine Auswirkungen, egal wo sie definiert sind.
Setzen Sie einen Backslash ("\
") vor das erste "!
" für Muster, die mit einem literalen "!
" beginnen, zum Beispiel "\!important!.txt
".
Beispiel zum Ausschließen von allem außer einem bestimmten Verzeichnis foo/bar
(beachten Sie den /*
- ohne den Schrägstrich, würde der Wildcard auch alles innerhalb von foo/bar
ausschließen):
--------------------------------------------------------------
$ cat .gitignore
# schließe alles aus, außer Verzeichnis foo/bar
/*
!/foo
/foo/*
!/foo/bar
--------------------------------------------------------------
In Ihrem Fall:
application/*
!application/**/
application/language/*
!application/language/**/
!application/language/gr/**
Sie müssen zuerst Ordner auf die Whitelist setzen, bevor Sie Dateien innerhalb eines bestimmten Ordners auf die Whitelist setzen können.
Aktualisierung Feb/März 2016:
Beachten Sie, dass mit git 2.9.x/2.10 (Mitte 2016?), es möglicherweise möglich ist, eine Datei wieder einzuschließen, wenn ein übergeordnetes Verzeichnis dieser Datei ausgeschlossen ist wenn im Pfad, der wieder eingeschlossen wird, kein Platzhalter verwendet wird.
Nguyen Thái Ngoc Duy (pclouds
) versucht, diese Funktion hinzuzufügen:
Also mit git 2.9+ hätte dies tatsächlich funktionieren können, wurde aber letztendlich rückgängig gemacht:
application/
!application/language/gr/