Eine .gitignore-Datei ist eine Textdatei in Ihrem Git-Repository, die Git anweist, bestimmte Dateien und Ordner, die nicht in Ihr Master-Repository hochgeladen werden sollen, nicht zu verfolgen. Sie hat viele Verwendungsmöglichkeiten und Sie müssen sie fast immer konfigurieren, wenn Sie ein neues Repository einrichten.
Was ist der Sinn von .gitignore?
In den meisten Projekten gibt es einen Unterschied zwischen Code/Konfiguration und den aus diesem Code oder dieser Konfiguration generierten Dateien. Letzteres ist normalerweise nicht nützlich und kann im Allgemeinen ignoriert werden.
Normalerweise möchten Sie nur, dass der Code und die Konfiguration über Git verfolgt werden. Dies liegt daran, dass die generierten Dateien flüchtig sind und Sie sie, wenn Sie sie löschen, einfach erneut generieren können. Es hat oft keinen Sinn, sie hochzuladen, da sie die Dinge nur verkomplizieren und unnötige Zusammenführungskonflikte verursachen.
Dies ist eine weit gefasste Definition, also schauen wir uns ein Beispiel an. In Node JS-Projekten gibt es einen Ordner namens
das alle externen Pakete enthält, die Ihr Code ausführen muss. Sie können dieses Verzeichnis löschen und es komplett neu erstellen, indem Sie
, das die
Konfiguration zum Suchen nach Paketen.
Was ist also der Sinn der
Ordner in Git? Es gibt eigentlich keinen, da dies komplizierter ist, Probleme verursachen kann und in vielen Fällen sogar die Größe des Git-Repos drastisch erhöhen kann.
Wenn Sie das gesamte Verzeichnis ignorieren, können alle Ihre Mitarbeiter dennoch eine eigene lokale Kopie aus dem
Datei. Stattdessen nur
sollten in Git verfolgt werden. Die meisten Dinge, die hinzugefügt werden, .gitignore folgen diesem Muster. Erstellen Sie Artefakte, wie ein
Ordner, werden nicht festgeschrieben, da sie ein direktes Ergebnis des Codes selbst sind.
Weitere Dinge können der Einfachheit halber hinzugefügt werden .gitignore . MacOS generiert Systemdateien namens
, die Sie jederzeit ignorieren können. Vielleicht speichern Sie API-Schlüssel in
die Sie nicht in der Quellcodeverwaltung verfolgen möchten, können Sie diese ebenfalls hinzufügen. Caches, Protokolle und andere Ausgaben können normalerweise ignoriert werden.
Verwenden von .gitignore
Sie müssen eine Datei mit dem Namen .gitignore, ohne Erweiterungen, im Stammverzeichnis Ihres Projekts erstellen, in dem Ihr
Verzeichnis befindet. Sie können dies von Ihrem Dateibrowser aus oder von der Befehlszeile mit einem beliebigen CLI-Texteditor tun:
Sie können dies auf viele Arten konfigurieren, aber die wichtigsten Tools, die Ihnen zur Verfügung stehen, sind:
- * Platzhalter, die mit jedem Text übereinstimmen und für die Übereinstimmung mit jedem Verzeichnis oder jeder Datei unabhängig von der Erweiterung verwendet werden können.
- !, das als eine Art Whitelist fungiert, die eine zuvor ausgeschlossene Datei negiert. Der Haupthaken dabei ist, dass es die Datei nur dann auf die Whitelist setzt, wenn sie direkt ausgeschlossen wurde, und nicht für Dateien in Verzeichnissen funktioniert, die vollständig ausgeschlossen wurden.
- **, das alles rekursiv in Verzeichnissen abgleicht. Beispielsweise **/*.json wird jede JSON-Datei unabhängig von ihrem Speicherort abgeglichen und src/** jede Datei im Ordner rekursiv abgeglichen. Dies ist nützlich, wenn Sie das gesamte Verzeichnis auf eine Whitelist setzen und nicht ignorieren möchten.
Beispielsweise könnte ein Node JS Gitignore wie folgt aussehen:
Das Whitelisting von Dateien !kann für viele Konfigurationen sehr nützlich sein. In einem meiner Projekte hatte ich beispielsweise ein Tool namens , steamcmd das Abhängigkeiten für Spieleserver von Steam herunterlädt. Dieses Tool ist in einer einzigen portablen ausführbaren Datei verpackt, produziert aber eine Menge Müll, den ich nicht in Git verfolgen möchte.
Die Lösung bestand darin, alles im Ordner zu ignorieren, aber die ausführbare Datei auf die Whitelist zu setzen. Dies funktioniert für jede portierbar ausführbare Datei, die sich auf diese Weise erweitert oder anderweitig unnötigen Müll im Verzeichnis erzeugt.
gitignore verwendet zum Abgleichen von Zeichenfolgen auch einige andere Unix- Globbing- Muster, z. B. ein Fragezeichen zum Abgleichen eines einzelnen Zeichens oder [a-z] zum Abgleichen von Zeichensätzen.
Sie können auch mehrere .gitignore Dateien schreiben, die mit Dateien relativ zueinander übereinstimmen können. Dies ist nicht wirklich nützlich, da Sie die Regeln einfach in die Stammdatei aufnehmen können, was leichter zu verfolgen ist, aber es könnte in einigen Fällen bei Codewiederholungen helfen. Die Problemumgehung besteht jedoch darin, Zeichensätze zu verwenden, um mehrere Verzeichnisse abzugleichen. Zum Beispiel das Abgleichen von Verzeichnissen in Groß- und Kleinschreibung mit einem Satz:
Wenn Sie Probleme mit Ihrer Konfiguration haben .gitignore , können Sie diese mit dem check-ignore Git-Befehl debuggen:
Global .gitignore
Git hat auch eine globale Einstellung für .gitignore, die aber in den meisten Fällen nicht wirklich verwendet werden sollte. Dies liegt daran, dass die globale Einstellung .gitignore auf Ihrem Computer nicht für Ihre Kollegen gilt, sondern nur für Commits, die mit Ihrer Git-Instanz vorgenommen wurden.
Wenn Sie es trotzdem festlegen möchten, können Sie dies mit dem folgenden Befehl tun Dark Mode:
Erzwingen des Commits oder Stashing ignorierter Dateien
Das Erzwingen eines Commits ist im Allgemeinen keine gute Idee. Sie sollten wahrscheinlich eine Whitelist für diese bestimmte Datei hinzufügen, da Aktualisierungen dieser Datei nach dem Committing nicht mehr verfolgt werden. Wenn Sie jedoch manuell etwas committen möchten, können Sie es git add mit dem –force folgenden Parameter ausführen:
Auf ähnliche Weise git stash können auch lokale Änderungen an ignorierten Dateien zwischengespeichert werden, was tatsächlich nützlich sein kann, da es sich nicht auf das Remote-Repository auswirkt: