Hatte das gleiche Problem wie OP, aber keine der 10 am höchsten bewerteten Antworten hat tatsächlich funktioniert .
Ich habe schließlich Folgendes herausgefunden
Falsche Syntax :
*
!bin/script.sh
Korrekte Syntax :
*
!bin
!bin/script.sh
Erläuterung von gitignore man-Seite :
Ein optionales Präfix "!", das das Muster negiert; jede passende Datei, die durch ein vorheriges Muster ausgeschlossen wurde, wird wieder eingeschlossen. Es ist nicht möglich, eine Datei erneut einzuschließen, wenn ein übergeordnetes Verzeichnis dieser Datei ausgeschlossen ist . Git listet aus Leistungsgründen keine ausgeschlossenen Verzeichnisse auf, so dass alle Muster für enthaltene Dateien keine Auswirkungen haben, unabhängig davon, wo sie definiert sind.
Das bedeutet, dass die obige Aussage "Falsche Syntax" falsch ist, weil bin/script.sh
kann nicht wieder aufgenommen werden als bin/
wird ignoriert. Das ist alles.
Erweitertes Beispiel :
$ Baum .
.
.gitignore
bin
ignore.txt
sub
folder
path
other.sh
script.sh
$ cat .gitignore
*
!.gitignore
!bin
!bin/sub
!bin/sub/folder
!bin/sub/folder/path
!bin/sub/folder/path/script.sh
$ git status --untracked-files --ignored
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
bin/sub/folder/path/script.sh
Ignored files:
(use "git add -f <file>..." to include in what will be committed)
bin/ignore.txt
bin/sub/folder/path/other.sh
nothing added to commit but untracked files present (use "git add" to track)
20 Stimmen
Duplikat von stackoverflow.com/q/9162919/321973 (Ich weiß, dass das neuer ist, aber die Antwort dort ist richtiger). Eigentlich diese Antwort ist wahrscheinlich die beste