Zum Inhalt springen

.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.

.gitignore

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:

PatternExplanation
**/logsDouble asterisks are used to match directories anywhere in the repository
**/logs/debug.logDouble asterisks are used to match files based on their name and the name of their parent directory.
*.logAn asterisk matches zero or more characters.
*.log !important.logExclamation 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.logThe slash matches files only in the repository root.
debug.logBy default, patterns match files in any directory.
debug?.logThe question mark matches just one character.
debug[0-9].logSquare brackets are used to match a single character from a particular range.
debug[01].logSquare brackets match a single character from the particular set.
debug[!01].logThe exclamation mark is used to match any character except one from the particular set.
debug[a-z].logRanges can be numeric or alphabetic.
logsThe 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.logA double asterisk matches zero or more directories.
logs/*day/debug.logAsterisks can be used in directory names too.

Hier ist ein Beispiel mit einem dieser Muster:

.gitignore patterns

bash
debug0.log
debug1.log
#but not
debug10.log

Gemeinsame .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

bash
touch ~/.gitignore
git config --global core.excludesFile ~/.gitignore

Ignorieren 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

bash
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

bash
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

bash
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

bash
git check-ignore -v debug.log
#.gitignore:3:*.log debug.log

Hier ist die Ausgabe:

git check-ignore

bash
<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?

Finden Sie das nützlich?

Dual-run-Vorschau — vergleichen Sie mit den Symfony-Routen live.