Featured image of post Warum verfolgt Git keine leeren Ordner? Was sind .gitkeep und .gitignore?

Warum verfolgt Git keine leeren Ordner? Was sind .gitkeep und .gitignore?

Tauchen Sie tief ein, warum Git leere Ordner ignoriert und wie Sie .gitkeep und .gitignore richtig verwenden, um die Projektverzeichnisstruktur zu verwalten. Inklusive praktischer Beispiele und Best Practices.

Einfach ausgedrückt ist .gitkeep eine konventionelle Dummy-Datei. Ihre Existenz dient nur einem einzigen Zweck: Git zu zwingen, einen Ordner zu verfolgen, der eigentlich leer sein sollte.

Warum wird es benötigt?

Die Designlogik von Git ist “Dateiänderungen verfolgen”, nicht “Ordner verfolgen”. Wenn Ihr Projekt einen leeren Ordner enthält, wird Git ihn vollständig ignorieren und nicht auf GitHub oder Ihren Server hochladen.

Dies führt zu einem Problem: Manchmal benötigt Ihr Code ein bestimmtes Verzeichnis, um ausgeführt zu werden, aber Sie möchten keine Testdaten oder temporären Dateien hochladen. Wenn das Verzeichnis nicht existiert, könnte das Programm abstürzen.

Diese Ordner sind normalerweise:

  • logs/: Für Protokolldateien
  • uploads/: Von Benutzern hochgeladene Dateien
  • tmp/: Temporäre Dateien
  • cache/: Cache-Daten

Diese Verzeichnisse werden zur Laufzeit benötigt, ihr Inhalt sollte nicht committet werden, aber der Ordner selbst muss existieren.

Wie es funktioniert

Um Git “auszutricksen”, damit es diesen Ordner behält, platzieren wir eine versteckte Datei ohne wirkliche Funktion darin, damit Git denkt: “Oh! Hier ist etwas, das muss ich aufzeichnen.”

Praktische Analogie:

Stellen Sie sich vor, Sie bauen ein Haus (schreiben ein Projekt):

Datei Beschreibung
.gitignore Wie ein “Nicht wegwerfen”-Etikett, das der Reinigungskraft (Git) mitteilt, welche Dinge (wie abgelaufene Lebensmittel, Altpapier) absolut nicht in das neue Haus gebracht werden dürfen.
.gitkeep Wie eine “Platzhalter-Box”. Das neue Haus ist noch nicht eingerichtet, aber Sie müssen Platz für den Abstellraum reservieren, also stellen Sie eine Kiste dorthin, um den Umzugshelfern mitzuteilen, dass dieser Bereich Teil des Hauses ist und nicht abgerissen werden soll.

Wie benutzt man es?

  1. Erstellen Sie eine Datei namens .gitkeep im leeren Ordner.
  2. Der Dateiinhalt kann leer sein, oder Sie können “Keep this directory” schreiben.
  3. Führen Sie git add und commit für diese Datei aus.

Vergleich .gitkeep vs .gitignore

Merkmal .gitkeep .gitignore
Offizieller Status Inoffiziell (Nur eine Community-Konvention) Offiziell (Integrierte Git-Funktion)
Hauptfunktion Einen Ordner behalten, verhindern, dass er von Git vergessen wird Dateien ausschließen, verhindern, dass sie von Git verfolgt werden
Häufige Szenarien Leere Log-Ordner, Cache-Ordner Passwortdateien, node_modules, temporäre Dateien

Praktischer Rat: Querdenken

Obwohl .gitkeep häufig verwendet wird, ist es eigentlich kein offizieller Teil von Git. Tatsächlich könnten Sie README.md oder .placeholder verwenden, um denselben Effekt zu erzielen. Aber warum bevorzugen alle .gitkeep? Weil es selbsterklärend ist: “Diese Datei tut nichts anderes, als Git davon abzuhalten, diesen Ordner zu löschen.”

Wenn Sie etwas professioneller wirken möchten, gibt es einen kreativeren Ansatz, der funktionaler ist als nur die Verwendung von .gitkeep:

Platzieren Sie eine .gitignore im leeren Ordner mit folgendem Inhalt:

# Alles in diesem Verzeichnis ignorieren
*
# Aber ignoriere mich nicht (diese .gitignore Datei selbst)
!.gitignore

Dies stellt sicher, dass Sie den Ordner behalten, während sichergestellt wird, dass Mülldateien darin niemals versehentlich committet werden. Dies ist die wahre “idiotensichere” (Foolproof) Methode.

Fazit

  • .gitkeep ist ein menschlicher Kompromiss an die Designlogik von Git.
  • Es ist keine offizielle Spezifikation, hat sich aber zum De-facto-Standard für Entwickler entwickelt.
  • Was wirklich wichtig ist, ist zu verstehen, wie .gitignore funktioniert; .gitkeep ist nur ein kleines Werkzeug, um Git zu helfen, leere Ordner zu “verstehen”.

Reference

All rights reserved,未經允許不得隨意轉載
Erstellt mit Hugo
Theme Stack gestaltet von Jimmy