English ▾ Themen ▾ Neueste Version ▾ gitignore zuletzt aktualisiert in 2.52.0

NAME

gitignore - Gibt absichtlich nicht verfolgte Dateien an, die ignoriert werden sollen

SYNOPSIS

$XDG_CONFIG_HOME/git/ignore, $GIT_DIR/info/exclude, .gitignore

BESCHREIBUNG

Eine gitignore-Datei gibt absichtlich nicht verfolgte Dateien an, die Git ignorieren soll. Bereits von Git verfolgte Dateien sind nicht betroffen; siehe HINWEISE unten für Details.

Jede Zeile in einer gitignore-Datei gibt ein Muster an. Bei der Entscheidung, ob ein Pfad ignoriert werden soll, prüft Git normalerweise gitignore-Muster aus mehreren Quellen, wobei die folgende Reihenfolge der Priorität gilt, von der höchsten zur niedrigsten (innerhalb einer Prioritätsstufe entscheidet das zuletzt übereinstimmende Muster über das Ergebnis)

  • Muster, die von der Befehlszeile für die Befehle gelesen werden, die sie unterstützen.

  • Muster, die aus einer .gitignore-Datei im selben Verzeichnis wie der Pfad oder in einem beliebigen übergeordneten Verzeichnis (bis zur obersten Ebene des Arbeitsbaums) gelesen werden, wobei Muster in den höherrangigen Dateien durch solche in niedrigerrangigen Dateien überschrieben werden, bis hinunter zum Verzeichnis, das die Datei enthält. Diese Muster stimmen relativ zum Speicherort der .gitignore-Datei überein. Ein Projekt enthält normalerweise solche .gitignore-Dateien in seinem Repository, die Muster für Dateien enthalten, die als Teil des Projekt-Builds generiert wurden.

  • Muster, die aus $GIT_DIR/info/exclude gelesen werden.

  • Muster, die aus der Datei gelesen werden, die durch die Konfigurationsvariable core.excludesFile angegeben ist.

Welche Datei für ein Muster verwendet wird, hängt davon ab, wie das Muster verwendet werden soll.

  • Muster, die versioniert und über Klone an andere Repositories verteilt werden sollen (d. h. Dateien, die alle Entwickler ignorieren möchten), sollten in eine .gitignore-Datei geschrieben werden.

  • Muster, die für ein bestimmtes Repository spezifisch sind, aber nicht mit anderen verwandten Repositories geteilt werden müssen (z. B. Hilfsdateien, die sich im Repository befinden, aber für den Workflow eines einzelnen Benutzers spezifisch sind), sollten in die Datei $GIT_DIR/info/exclude geschrieben werden.

  • Muster, die ein Benutzer Git in allen Situationen ignorieren lassen möchte (z. B. Sicherungs- oder temporäre Dateien, die vom bevorzugten Editor des Benutzers generiert werden), werden im Allgemeinen in eine Datei geschrieben, die durch core.excludesFile in der ~/.gitconfig des Benutzers angegeben ist. Ihr Standardwert ist $XDG_CONFIG_HOME/git/ignore. Wenn $XDG_CONFIG_HOME entweder nicht gesetzt oder leer ist, wird stattdessen $HOME/.config/git/ignore verwendet.

Die zugrunde liegenden Git-Plumbing-Tools wie git ls-files und git read-tree lesen gitignore-Muster, die über Befehlszeilenoptionen oder aus durch Befehlszeilenoptionen angegebenen Dateien spezifiziert werden. Höherrangige Git-Tools wie git status und git add verwenden Muster aus den oben genannten Quellen.

MUSTERFORMAT

  • Eine leere Zeile passt zu keinen Dateien, daher kann sie als Trennzeichen zur besseren Lesbarkeit dienen.

  • Eine Zeile, die mit # beginnt, dient als Kommentar. Setzen Sie einen Schrägstrich ("\") vor den ersten Hash für Muster, die mit einem Hash beginnen.

  • Nachgestellte Leerzeichen werden ignoriert, es sei denn, sie werden mit einem Schrägstrich ("\") in Anführungszeichen gesetzt.

  • Ein optionales Präfix "!", das das Muster negiert; jede übereinstimmende Datei, die von einem vorherigen Muster ausgeschlossen wurde, wird wieder eingeschlossen. Es ist nicht möglich, eine Datei wieder einzuschließen, wenn ein Elternverzeichnis dieser Datei ausgeschlossen ist. Git listet aus Performance-Gründen keine ausgeschlossenen Verzeichnisse auf, daher haben Muster auf enthaltene Dateien keine Wirkung, unabhängig davon, wo sie definiert sind. Setzen Sie einen Schrägstrich ("\") vor das erste "!" für Muster, die mit einem wörtlichen "!" beginnen, z. B. "\!important!.txt".

  • Der Schrägstrich "/" wird als Verzeichnistrenner verwendet. Trennzeichen können am Anfang, in der Mitte oder am Ende des .gitignore-Suchmusters vorkommen.

  • Wenn sich am Anfang oder in der Mitte (oder beidem) des Musters ein Trennzeichen befindet, dann ist das Muster relativ zur Verzeichnisebene der jeweiligen .gitignore-Datei selbst. Andernfalls kann das Muster auch auf jeder Ebene unterhalb der .gitignore-Ebene passen.

  • Wenn sich am Ende des Musters ein Trennzeichen befindet, passt das Muster nur zu Verzeichnissen, andernfalls kann das Muster sowohl zu Dateien als auch zu Verzeichnissen passen.

  • Zum Beispiel passt das Muster doc/frotz/ zum Verzeichnis doc/frotz, aber nicht zum Verzeichnis a/doc/frotz; frotz/ passt jedoch zu frotz und a/frotz, was ein Verzeichnis ist (alle Pfade sind relativ zur .gitignore-Datei).

  • Ein Sternchen "*" passt zu allem außer einem Schrägstrich. Das Zeichen "?" passt zu jedem einzelnen Zeichen außer "/". Die Bereichsschreibweise, z. B. [a-zA-Z], kann verwendet werden, um eines der Zeichen in einem Bereich abzugleichen. Siehe fnmatch(3) und das FNM_PATHNAME-Flag für eine detailliertere Beschreibung.

  • Ein Schrägstrich ("\") kann verwendet werden, um jedes Zeichen zu escapen. Z. B. passt "\*" zu einem wörtlichen Sternchen (und "\a" passt zu "a", auch wenn hier keine Maskierung erforderlich ist). Wie bei fnmatch(3) ist ein Schrägstrich am Ende eines Musters ein ungültiges Muster, das nie passt.

Zwei aufeinanderfolgende Sternchen ("**") in Mustern, die gegen vollständige Pfadnamen abgeglichen werden, können eine besondere Bedeutung haben

  • Ein führendes "**" gefolgt von einem Schrägstrich bedeutet "in allen Verzeichnissen abgleichen". Zum Beispiel passt "**/foo" zur Datei oder zum Verzeichnis "foo" überall, genauso wie das Muster "foo". "**/foo/bar" passt zur Datei oder zum Verzeichnis "bar" überall, das sich direkt unter dem Verzeichnis "foo" befindet.

  • Ein nachgestelltes "/**" passt zu allem darunter. Zum Beispiel passt "abc/**" zu allen Dateien innerhalb des Verzeichnisses "abc", relativ zum Speicherort der .gitignore-Datei, mit unendlicher Tiefe.

  • Ein Schrägstrich gefolgt von zwei aufeinanderfolgenden Sternchen und dann einem Schrägstrich passt zu null oder mehr Verzeichnissen. Zum Beispiel passt "a/**/b" zu "a/b", "a/x/b", "a/x/y/b" und so weiter.

  • Andere aufeinanderfolgende Sternchen werden als reguläre Sternchen betrachtet und passen gemäß den vorherigen Regeln.

KONFIGURATION

Die optionale Konfigurationsvariable core.excludesFile gibt einen Pfad zu einer Datei an, die Muster von Dateinamen enthält, die ausgeschlossen werden sollen, ähnlich wie $GIT_DIR/info/exclude. Muster in der Ausschlussdatei werden zusätzlich zu denen in $GIT_DIR/info/exclude verwendet.

ANMERKUNGEN

Der Zweck von gitignore-Dateien ist es sicherzustellen, dass bestimmte von Git nicht verfolgte Dateien nicht verfolgt bleiben.

Um die Verfolgung einer derzeit verfolgten Datei zu beenden, verwenden Sie git rm --cached, um die Datei aus dem Index zu entfernen. Der Dateiname kann dann der .gitignore-Datei hinzugefügt werden, um zu verhindern, dass die Datei in späteren Commits wieder eingeführt wird.

Git folgt keinen symbolischen Links, wenn es auf eine .gitignore-Datei im Arbeitsbaum zugreift. Dies hält das Verhalten konsistent, wenn auf die Datei aus dem Index oder einem Baum im Vergleich zum Dateisystem zugegriffen wird.

BEISPIELE

  • Das Muster hello.* passt zu jeder Datei oder jedem Verzeichnis, dessen Name mit hello. beginnt. Wenn man dies nur auf das Verzeichnis und nicht auf seine Unterverzeichnisse beschränken möchte, kann man dem Muster einen Schrägstrich voranstellen, d. h. /hello.*; das Muster passt nun zu hello.txt, hello.c, aber nicht zu a/hello.java.

  • Das Muster foo/ passt zu einem Verzeichnis foo und Pfaden darunter, passt aber nicht zu einer regulären Datei oder einem symbolischen Link foo (dies ist konsistent mit der Art und Weise, wie Pfadangaben im Allgemeinen in Git funktionieren)

  • Die Muster doc/frotz und /doc/frotz haben in jeder .gitignore-Datei dieselbe Wirkung. Mit anderen Worten, ein führender Schrägstrich ist nicht relevant, wenn bereits ein mittlerer Schrägstrich im Muster vorhanden ist.

  • Das Muster foo/* passt zu foo/test.json (einer regulären Datei), foo/bar (einem Verzeichnis), passt aber nicht zu foo/bar/hello.c (einer regulären Datei), da der Stern im Muster nicht zu bar/hello.c passt, das einen Schrägstrich enthält.

    $ git status
    [...]
    # Untracked files:
    [...]
    #       Documentation/foo.html
    #       Documentation/gitignore.html
    #       file.o
    #       lib.a
    #       src/internal.o
    [...]
    $ cat .git/info/exclude
    # ignore objects and archives, anywhere in the tree.
    *.[oa]
    $ cat Documentation/.gitignore
    # ignore generated html files,
    *.html
    # except foo.html which is maintained by hand
    !foo.html
    $ git status
    [...]
    # Untracked files:
    [...]
    #       Documentation/foo.html
    [...]

Ein weiteres Beispiel

    $ cat .gitignore
    vmlinux*
    $ ls arch/foo/kernel/vm*
    arch/foo/kernel/vmlinux.lds.S
    $ echo '!/vmlinux*' >arch/foo/kernel/.gitignore

Die zweite .gitignore verhindert, dass Git arch/foo/kernel/vmlinux.lds.S ignoriert.

Beispiel zum Ausschließen von allem außer einem bestimmten Verzeichnis foo/bar (beachten Sie das /* - ohne den Schrägstrich würde der Wildcard auch alles innerhalb von foo/bar ausschließen)

    $ cat .gitignore
    # exclude everything except directory foo/bar
    /*
    !/foo
    /foo/*
    !/foo/bar

GIT

Teil der git[1] Suite