Was ist eine .gitignore-Datei und wie wird sie konfiguriert?

0
313

Eine .gitignore-Datei ist eine Textdatei, die in Ihrem Git-Repository abgelegt wird und die erzählt git, um bestimmte Dateien und Ordner nicht zu verfolgen, die nicht in Ihr Master-Repository hochgeladen werden sollen. Es hat viele Verwendungsmöglichkeiten und Sie müssen es fast immer konfigurieren, wenn Sie ein neues Repository einrichten.

Was&#8217 ;s Der Sinn von .gitignore?

In den meisten Projekten gibt es einen Unterschied zwischen Code/Konfiguration und generierten Dateien aus diesem Code oder dieser Konfiguration. 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 kurzlebig sind und wenn Sie sie löschen, können Sie sie einfach erneut generieren. Es macht oft keinen Sinn, sie hochzuladen, da sie die Dinge einfach 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 node_modules, der alle externen Pakete enthält, die Ihr Code zum Ausführen benötigt. Sie können dieses Verzeichnis löschen und vollständig neu erstellen, indem Sie npm install ausführen, das die package.json-Konfiguration verwendet, um nach Paketen zu suchen.

Was bringt es also, den Ordner node_modules in Git zu haben? Es gibt wirklich keine, da sie komplizierter ist, Probleme verursachen und in vielen Fällen die Größe des Git-Repositorys sogar drastisch erhöhen kann.

Werbung

Wenn Sie Ignorieren Sie das gesamte Verzeichnis, alle Ihre Kollegen können weiterhin ihre eigene lokale Kopie aus der Datei package.json erstellen. Stattdessen sollte nur package.json in Git nachverfolgt werden. Die meisten Dinge, die zu .gitignore hinzugefügt werden, folgen diesem Muster. Build-Artefakte wie ein ./bin/ Ordner werden nicht festgeschrieben, da sie ein direktes Ergebnis des Codes selbst sind.

Der Einfachheit halber können auch andere Dinge zu .gitignore hinzugefügt werden. MacOS generiert Systemdateien namens .DS_store, die Sie immer ignorieren können. Vielleicht speichern Sie API-Schlüssel in .env/, die nicht in der Quellcodeverwaltung verfolgt werden sollen, Sie können diese auch hinzufügen. Caches, Protokolle und andere Ausgaben können normalerweise ignoriert werden.

Verwenden von .gitignore

Sie müssen im Stammverzeichnis Ihres Projekts, in dem sich Ihr .git-Verzeichnis befindet, eine Datei namens .gitignore ohne Erweiterungen erstellen. Sie können dies über Ihren Dateibrowser oder über die Befehlszeile mit einem beliebigen CLI-Texteditor tun:

nano .gitignore

Sie können dies auf viele Arten konfigurieren, aber die wichtigsten Tools, die Sie haben, sind:

  • * Platzhalter, die mit jedem Text übereinstimmen und verwendet werden können stimmen mit jedem Verzeichnis oder jeder Datei unabhängig von der Erweiterung überein.
  • !, die als eine Art Whitelist funktioniert, die eine zuvor ausgeschlossene Datei negiert. Der Hauptfang dabei ist, dass die Datei nur dann auf die weiße Liste gesetzt wird, wenn sie direkt ausgeschlossen wurde, und funktioniert nicht für Dateien in Verzeichnissen, die vollständig ausgeschlossen wurden.
  • **, was alles rekursiv in Verzeichnisse abgleicht. **/*.json entspricht beispielsweise jeder JSON-Datei, unabhängig davon, wo sie sich befindet, und src/** entspricht rekursiv jeder Datei im Ordner. Dies ist nützlich, wenn Sie auf die Whitelist setzen und nicht das gesamte Verzeichnis ignorieren möchten.

Ein Node JS gitignore könnte beispielsweise wie folgt aussehen:

node_modules/build/npm-debug.log .env .env.test .env.production .DS_Store .npm .eslintcache logs/*.log npm-debug.log*

Whitelisting-Dateien mit ! 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 Spielserver von Steam herunterlädt. Dieses Tool ist in einer einzigen tragbaren ausführbaren Datei verpackt, produziert jedoch eine Menge Müll, den ich nicht in Git verfolgen möchte.

Werbung

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 portabel ausführbare Datei, die so erweitert wird oder anderweitig unnötigen Müll im Verzeichnis erzeugt.

Project/steamcmd/** !Project/steamcmd/steamcmd.exe

gitignore verwendet auch einige andere Unix-Globing-Muster für übereinstimmende Zeichenfolgen, z. B. ein Fragezeichen für die Übereinstimmung mit einem einzelnen Zeichen oder [az] für Zeichensätze.

Sie können auch mehrere .gitignore-Dateien schreiben, die Dateien relativ zu sich selbst abgleichen können. Dies ist nicht wirklich nützlich, da Sie die Regeln einfach in die Root-Datei aufnehmen können, was einfacher zu verfolgen ist, aber in einigen Fällen bei der Codewiederholung helfen kann. Die Problemumgehung besteht jedoch darin, Zeichensätze zu verwenden, um mehrere Verzeichnisse abzugleichen. Zum Beispiel, um Verzeichnisse in Groß- und Kleinbuchstaben mit einem Satz abzugleichen:

# Build-Ergebnisse [Dd]ebug/[Dd]ebugPublic/[Rr]elease/[Rr]eleases/

Wenn Sie Probleme haben Mit Ihrer .gitignore-Konfiguration können Sie sie mit dem Git-Befehl check-ignore debuggen:

git check-ignore -v testfile.json

Global .gitignore

Git hat auch eine globale Einstellung für .gitignore, aber es sollte nicht’ t wirklich in den meisten Fällen verwendet werden. Dies liegt daran, dass die globale .gitignore auf Ihrem Computer nicht für Ihre Kollegen gilt, sondern nur für Commits, die mit Ihrer Instanz von Git vorgenommen wurden.

Wenn Sie sie trotzdem festlegen möchten, können Sie dies tun also mit dem folgenden Befehl:

git config –global core.excludesfile ~/.globalignore

Force Commiting or Stashing ignorierter Dateien

Erzwingen von Commit ist im Allgemeinen eine schlechte Idee — Sie sollten wahrscheinlich eine Whitelist für diese bestimmte Datei hinzufügen, da Aktualisierungen dieser Datei nach dem Commit nicht nachverfolgt werden. Wenn Sie jedoch etwas manuell festschreiben möchten, können Sie git add mit dem Parameter –force ausführen:

git add -f debug.log Werbung

In ähnlicher Weise kann git stash auch lokale Änderungen an st ignorierte Dateien, was tatsächlich nützlich sein kann, da es das Remote-Repository nicht beeinflusst:

git stash –all