.gitignore
Beschreibung
In der Arbeitskopie sind die Dateien für Git als eine der folgenden sichtbar: verfolgt, nicht verfolgt und ignoriert.
Ignorierte Dateien sind Dateien, die Git angewiesen wurde zu ignorieren. Dazu gehören häufig Build-Artefakte, Protokolle, Betriebssystem-Metadaten und IDE-Konfigurationen. Wenn Sie möchten, dass diese Dateien committet werden, müssen sie zuerst aus dem Repository-Quellcode abgeleitet werden. Einige Beispiele für von Git ignorierte Dateien sind unten aufgeführt:
- Dateien, die zur Laufzeit generiert werden (zum Beispiel .log, .lock),
- Versteckte Systemdateien (.DS_Store, Thumbs.db),
- Kompilierter Code (.o, .class) und so weiter.

Git-Ignoriermuster
Git-Ignorierdateien befinden sich in einer Datei namens .gitignore. Sie werden von Hand bearbeitet und committet, da es keinen git ignore-Befehl gibt. Git-Ignorierdateien enthalten Muster, die mit Dateinamen abgeglichen werden, mithilfe derer Sie entscheiden, ob jede Datei ignoriert werden soll oder nicht. Diese Muster werden mit Hilfe mehrerer Symbole erstellt:
| Pattern | Explanation |
|---|---|
| **/logs | Double asterisks are used to match directories anywhere in the repository |
| **/logs/debug.log | Double asterisks are used to match files based on their name and the name of their parent directory. |
| *.log | An asterisk matches zero or more characters. |
| *.log !important.log | Exclamation mark negates pattern. A file will not be ignored if it matches a negating pattern defined later. |
| *.log !important/*.log trace.* | A later pattern can re-ignore a file that was previously un-ignored, provided it matches the same file. |
| /debug.log | The slash matches files only in the repository root. |
| debug.log | By default, patterns match files in any directory. |
| debug?.log | The question mark matches just one character. |
| debug[0-9].log | Square brackets are used to match a single character from a particular range. |
| debug[01].log | Square brackets match a single character from the particular set. |
| debug[!01].log | The exclamation mark is used to match any character except one from the particular set. |
| debug[a-z].log | Ranges can be numeric or alphabetic. |
| logs | The pattern will match both files and the contents of directories with that name if it isn’t used with a slash. |
| logs/ | Using a slash points out that the pattern is a directory. The whole content of any directory with its files and subdirectories in the repository which matches that name will be ignored by Git. |
| logs/**/debug.log | A double asterisk matches zero or more directories. |
| logs/*day/debug.log | Asterisks can be used in directory names too. |
Hier ist ein Beispiel mit einem dieser Muster:
.gitignore patterns
debug0.log
debug1.log
#but not
debug10.logGemeinsame .gitignore-Dateien im Repository
Sie können mehrere .gitignore-Dateien in verschiedenen Verzeichnissen im Repository definieren. Jedes der Muster wird relativ zu dem Verzeichnis getestet, das diese Datei enthält. Der einfachste Weg ist jedoch, eine einzelne .gitignore-Datei im Stammverzeichnis des Repositorys zu definieren.
Da Ihre .gitignore-Datei eingecheckt wird, ist sie in Ihrem Repository versioniert wie andere Dateien und wird mit Ihrem Team geteilt, wenn Sie pushen. Sie sollten in .gitignore nur Muster aufnehmen, von denen andere Benutzer des Repositorys profitieren.
Persönliche Regeln für Git-Ignorierung
Persönliche Ignoriermuster können auch für ein bestimmtes Repository in einer speziellen Datei unter .git/info/exclude definiert werden. Das ist ein geeigneter Ort, um Muster aufzunehmen, die nur für Sie nützlich sind, da diese weder versioniert noch mit Ihrem Repository verteilt werden.
Globale Git-Ignorierregeln
Sie können die Git-Eigenschaft core.excludesFile definieren, um zusätzlich globale Git-Ignoriermuster für alle Repositorys auf Ihrem lokalen System anzugeben. Diese Datei wird von Ihnen selbst erstellt. Sie können Ihre globale .gitignore-Datei in Ihrem Home-Verzeichnis ablegen, damit Sie sie leicht finden. Sobald Sie die Datei erstellt haben, konfigurieren Sie ihren Speicherort mit dem Befehl git config, etwa so:
global gitignore rules
touch ~/.gitignore
git config --global core.excludesFile ~/.gitignoreIgnorieren einer zuvor committeten Datei
Um eine Datei zu ignorieren, die zuvor committet wurde, sollte sie aus dem Repository gelöscht werden. Danach sollten Sie eine .gitignore-Regel dafür hinzufügen. Mit der Option --cached von git rm wird die Datei aus dem Repo gelöscht, bleibt aber als ignorierte Datei im Arbeitsverzeichnis erhalten. Wenn Sie sie jedoch auch aus dem Arbeitsverzeichnis löschen möchten, lassen Sie die Option --cached einfach weg.
.gitignore commited files
echo debug.log >> .gitignore
git rm --cached debug.log
#rm 'debug.log'
git commit -m "Start ignoring debug.log"Eine ignorierte Datei committen
Die ignorierte Datei kann mit der Kombination der Option -f (oder --force) zusammen mit git add ins Repository committet werden. Wählen Sie diesen Weg jedoch, wenn Sie ein allgemeines Muster wie *.log haben, aber eine bestimmte Datei committen möchten:
commiting ignored files
cat .gitignore
# *.log
git add -f debug.log
git commit -m "Force adding debug.log"Andernfalls ist der einfachste Weg, eine Ausnahme von der allgemeinen Regel festzulegen:
commit ignored files
echo '!debug.log' >> .gitignore
cat .gitignore
#*.log
#!debug.log
git add debug.log
git commit -m "Adding debug.log"Eine ignorierte Datei stashen
Der Befehl git stash nimmt sowohl nicht committete gestagte als auch nicht gestagte Änderungen, speichert sie für die spätere Verwendung und gibt sie dann in Ihre Arbeitskopie zurück. Standardmäßig ignoriert er ignorierte Dateien und stasht nur die von Git verfolgten Änderungen. Die Option --all bewirkt jedoch, dass dieser Befehl Änderungen an ignorierten und nicht verfolgten Dateien stasht.
Debugging von .gitignore-Dateien
Bei komplizierten .gitignore-Mustern oder solchen, die sich über mehrere .gitignore-Dateien erstrecken, kann es schwierig sein herauszufinden, warum eine bestimmte Datei ignoriert wird. Der Befehl git check-ignore mit der Option -v (oder --verbose) bestimmt, welches Muster dazu führt, dass eine bestimmte Datei ignoriert wird:
git check ignored files
git check-ignore -v debug.log
#.gitignore:3:*.log debug.logHier ist die Ausgabe:
git check-ignore
<file containing the pattern> : <line number of the pattern> : <pattern> <file name>Practice
Welche Aussagen beschreiben die Funktionen und Regeln von `.gitignore`-Dateien in Git korrekt?