569 Stimmen

Wie kann ich Dateien in einem Verzeichnis in Git ignorieren?

Wie lautet die korrekte Syntax für die .gitignore Datei, um Dateien in einem Verzeichnis zu ignorieren?

Wäre es

config/databases.yml
cache/*
log/*
data/sql/*
lib/filter/base/*
lib/form/base/*
lib/model/map/*
lib/model/om/*

o

/config/databases.yml
/cache/*
/log/*
/data/sql/*
/lib/filter/base/*
/lib/form/base/*
/lib/model/map/*
/lib/model/om/*

?

397voto

Op De Cirkel Punkte 27523

MUSTERFORMAT

  • Eine Leerzeile passt zu keiner Datei und kann daher als Trennzeichen für die Lesbarkeit dienen.

  • Eine Zeile, die mit # dient als Kommentar.

  • Eine optionale Vorsilbe ! was das Muster negiert; jede passende Datei, die durch ein vorheriges Muster ausgeschlossen wurde, wird wieder eingeschlossen. Wenn ein negiertes Muster übereinstimmt, hat dies Vorrang vor Mustern mit niedrigerer Priorität.

  • Wenn das Muster mit einem Schrägstrich endet, wird dieser zum Zweck der folgenden Beschreibung entfernt, aber es würde nur eine Übereinstimmung mit einem Verzeichnis gefunden. Mit anderen Worten, foo/ wird mit einem Verzeichnis foo und darunter liegende Pfade, nicht aber eine reguläre Datei oder einen symbolischen Link foo (dies entspricht der Art und Weise, wie pathspec in Git im Allgemeinen funktioniert).

  • Wenn das Muster keinen Schrägstrich enthält / wird von Git wie ein Shell-Glob-Muster behandelt und auf eine Übereinstimmung mit dem Pfadnamen relativ zum Speicherort der .gitignore Datei (relativ zur obersten Ebene des Arbeitsbaums, wenn es sich nicht um eine .gitignore Datei).

  • Andernfalls behandelt git das Muster wie einen Shell-Glob, der für die Verwendung durch fnmatch(3) mit dem FNM_PATHNAME Flagge: Platzhalter im Muster werden nicht mit einem / im Pfadnamen. Zum Beispiel, Documentation/*.html passt zu Documentation/git.html aber nicht Documentation/ppc/ppc.html o tools/perf/Documentation/perf.html .

  • *Ein führender Schrägstrich entspricht dem Anfang des Pfadnamens. Zum Beispiel, `/.cpasst zucat-file.caber nichtmozilla-sha1/sha1.c` .**

Mehr dazu finden Sie hier

git help gitignore
o
man gitignore

188voto

Luke Hutton Punkte 10227

Es wäre das Erstere. Gehen Sie auch nach Erweiterungen und nicht nach der Ordnerstruktur.

D.h. mein Beispiel C# Entwicklung ignorieren Datei:

#OS junk files
[Tt]humbs.db
*.DS_Store

#Visual Studio files
*.[Oo]bj
*.user
*.aps
*.pch
*.vspscc
*.vssscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.[Cc]ache
*.ilk
*.log
*.lib
*.sbr
*.sdf
ipch/
obj/
[Bb]in
[Dd]ebug*/
[Rr]elease*/
Ankh.NoLoad

#Tooling
_ReSharper*/
*.resharper
[Tt]est[Rr]esult*

#Project files
[Bb]uild/

#Subversion files
.svn

# Office Temp Files
~$*

Update

Ich dachte, ich bringe die Kommentare unten auf den neuesten Stand. Auch wenn ich die Frage des Auftraggebers nicht direkt beantworte, finden Sie im Folgenden weitere Beispiele für .gitignore Syntax.

Gemeinschafts-Wiki (wird ständig aktualisiert):

.gitignore für Visual Studio Projekte und Lösungen

Weitere Beispiele mit konkretem Sprachgebrauch finden Sie hier (dank des Kommentars von Chris McKnight):

https://github.com/github/gitignore

148voto

Cascabel Punkte 449595

Pfade, die Schrägstriche enthalten, gelten als relativ zu dem Verzeichnis, das die .gitignore-Datei enthält - normalerweise die oberste Ebene Ihres Repositorys, obwohl Sie sie auch in Unterverzeichnisse legen können.

Da die Pfade in allen Beispielen, die Sie anführen, Schrägstriche enthalten, sind die beiden Versionen identisch. Das einzige Mal, dass Sie einen führenden Schrägstrich setzen müssen, ist, wenn es ist nicht eine bereits auf dem Weg. Um zum Beispiel foo nur auf der obersten Ebene des Repositorys zu ignorieren, verwenden Sie /foo . Einfach schreiben foo würde alles ignorieren, was irgendwo im Repository foo heißt.

Auch Ihre Platzhalter sind überflüssig. Wenn Sie ein ganzes Verzeichnis ignorieren wollen, benennen Sie es einfach:

lib/model/om

Der einzige Grund für die Verwendung von Platzhaltern ist, dass Sie etwas in dem Verzeichnis später wieder freigeben wollen:

lib/model/om/*      # ignore everything in the directory
!lib/model/om/foo   # except foo

79voto

jørgensen Punkte 9773

Ein führender Schrägstrich zeigt an, dass der ignore-Eintrag nur für das Verzeichnis gelten soll, in dem sich die .gitignore-Datei befindet. Angeben von *.o würde alle .o-Dateien in diesem Verzeichnis und allen Unterverzeichnissen ignorieren, während /*.o würde sie in dieser Richtung einfach ignorieren, während wiederum, /foo/*.o würde sie nur in /foo/*.o ignorieren.

36voto

petrsyn Punkte 4884

Wenn Sie eine .gitignore-Datei auf der obersten Ebene ablegen wollen und sie für alle darunter liegenden Ordner verwenden wollen, verwenden Sie /**/ .

z.B. alle zu ignorieren *.map Dateien in einer /src/main/ Ordner und Unterordner verwenden:

/src/main/**/*.map

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X