Einrichtung und Konfiguration
Projekte holen und erstellen
Grundlegende Snapshots
Branching und Merging
Projekte teilen und aktualisieren
Inspektion und Vergleich
Patching
Debugging
Externe Systeme
Server-Administration
Anleitungen
- gitattributes
- Konventionen der Kommandozeile
- Tägliches Git
- Häufig gestellte Fragen (FAQ)
- Glossar
- Hooks
- gitignore
- gitmodules
- Revisionen
- Submodule
- Tutorial
- Workflows
- Alle Anleitungen...
Administration
Plumbing-Befehle
-
2.52.0
2025-11-17
- 2.42.1 → 2.51.2 keine Änderungen
-
2.42.0
2023-08-21
- 2.41.1 → 2.41.3 keine Änderungen
-
2.41.0
2023-06-01
- 2.34.1 → 2.40.4 keine Änderungen
-
2.34.0
2021-11-15
- 2.33.1 → 2.33.8 keine Änderungen
-
2.33.0
2021-08-16
- 2.32.1 → 2.32.7 keine Änderungen
-
2.32.0
2021-06-06
- 2.22.2 → 2.31.8 keine Änderungen
-
2.22.1
2019-08-11
-
2.22.0
2019-06-07
- 2.20.1 → 2.21.4 keine Änderungen
-
2.20.0
2018-12-09
- 2.19.1 → 2.19.6 keine Änderungen
-
2.19.0
2018-09-10
- 2.17.0 → 2.18.5 keine Änderungen
-
2.16.6
2019-12-06
- 2.10.5 → 2.15.4 keine Änderungen
-
2.9.5
2017-07-30
- 2.5.6 → 2.8.6 keine Änderungen
-
2.4.12
2017-05-05
- 2.3.10 keine Änderungen
- 2.2.3 keine Änderungen
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
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/excludegelesen werden. -
Muster, die aus der Datei gelesen werden, die durch die Konfigurationsvariable
core.excludesFileangegeben 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/excludegeschrieben 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.excludesFilein der~/.gitconfigdes 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 Verzeichnisdoc/frotz, aber nicht zum Verzeichnisa/doc/frotz;frotz/passt jedoch zufrotzunda/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 mithello.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 zuhello.txt,hello.c, aber nicht zua/hello.java. -
Das Muster
foo/passt zu einem Verzeichnisfoound Pfaden darunter, passt aber nicht zu einer regulären Datei oder einem symbolischen Linkfoo(dies ist konsistent mit der Art und Weise, wie Pfadangaben im Allgemeinen in Git funktionieren) -
Die Muster
doc/frotzund/doc/frotzhaben 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 zufoo/test.json(einer regulären Datei),foo/bar(einem Verzeichnis), passt aber nicht zufoo/bar/hello.c(einer regulären Datei), da der Stern im Muster nicht zubar/hello.cpasst, 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