Das mag seltsam erscheinen, aber dies erlaubt uns, Verzeichnisse auf verschiedene Arten abzugleichen: Dateien oder Verzeichnisse irgendwo, Verzeichnisse irgendwo oder Verzeichnisse auf der obersten Ebene. Diese Vielseitigkeit ist sehr nützlich und kann verhindern, dass eine überladene .gitignore
.
(FYI, wenn Sie Git 1.8.2+, können Sie git check-ignore
verwenden debuggen dabei zu helfen.)
Wenn Sie foo
setzen, werden alle Dateien und Verzeichnisse foo
dem Namen übereinstimmen.
Wenn Sie foo/
setzen, wird es nur Verzeichnisse foo
Namen übereinstimmen.
Wenn das Muster mit einem Schrägstrich endet, wird es für den Zweck der folgenden Beschreibung entfernt, aber es würde nur eine Übereinstimmung mit einem Verzeichnis finden. Mit anderen Worten, foo/passt zu einem Verzeichnis foo und den darunter liegenden Pfaden, passt aber nicht zu einer regulären Datei oder einem symbolischen Link foo (dies entspricht der Art und Weise, wie pathspec im Allgemeinen in Git funktioniert).
Wenn Sie *
hinzufügen, wie in foo/*
, als Datei glob (bezogen auf die .gitignore
) behandelt wird.
Andernfalls behandelt Git das Muster als Schale glob geeignet für den Verzehr durch fnmatch (3) mit der FNM_PATHNAME Flag: Platzhalter in dem Muster wird eine nicht überein/in dem Pfadnamen. Beispiel: "Documentation/*. Html" entspricht "Documentation/git.html", nicht aber "Documentation/ppc/ppc.html" oder "tools/perf/Documentation/perf.html".
So für foo/*
, alle Dateien und Verzeichnisse im Verzeichnis auf oberster Ebene Git wird foo
ignorieren. Es wird ignorieren foo/dir
, foo/file.txt
usw. (Technisch gesehen, ist dies nicht foo
selbst ignorieren, aber es wird seine Kinder ignorieren. Da jedoch Git Verzeichnisse nicht verfolgen, ist es die gleiche Wirkung hat.)
FYI, foo/**
würde haben das gleiche Verhalten.
Meine Empfehlung:
Wenn Sie ein Verzeichnis foo
auf der obersten Ebene zu ignorieren, IMO ist es sehr klar, diese Regel zu verwenden:
Ein führender Schrägstrich entspricht die Anfang des Pfadnamens. Beispiel: "/*.c" entspricht "cat-file.c", nicht jedoch "mozilla-sha1/sha1.c".
So können Sie schreiben /foo/
, und es wird das Verzeichnis foo
auf der obersten Ebene, aber nirgendwo sonst ignorieren.
Ich liebte wirklich Ihre frühere Erklärung, die Sie ausarbeiteten: "Der Grund dafür: Dies ermöglicht Benutzern, Verzeichnisse auf drei Arten zu vergleichen: Dateien oder Verzeichnisse überall, Verzeichnisse überall oder Verzeichnisse auf der obersten Ebene." Sehr schöne einfache Beschreibung des Zwecks von allem :) – stackoverflowuser
@stackoverflowuser, ich habe versucht, für die Kürze zu bearbeiten. Ich stecke es wieder rein. Danke :) –