Alle Originalinhalte werden auf Ukrainisch erstellt. Noch nicht alle Inhalte wurden übersetzt. Einige Beiträge sind möglicherweise nur auf Ukrainisch verfügbar.Mehr erfahren
Wie entfernt man die .DS_Store-Datei aus einem Git-Repository?
In diesem Beitrag werden wir besprechen, wie man .DS_Store zur .gitignore-Datei hinzufügt und bereits hinzugefügte Dateien aus unserem Repository entfernt. Aber zuerst müssen wir klären, was .DS_Store ist, wofür es benötigt wird, warum es in Git gelangt und wie man es entfernt.
Was ist .DS_Store?
.DS_Store (Desktop Services Store) ist eine versteckte Systemdatei, die von macOS erstellt wird, um Informationen über die Anzeige von Ordnern im Finder zu speichern, wie z.B. die Positionen von Symbolen, Fenstergrößen, Hintergrundfarben usw.
Wenn Sie einen Ordner im Finder öffnen und die Position eines Symbols ändern, speichert der Finder die Positionsinformationen in .DS_Store. Standardmäßig ist diese Datei versteckt, kann aber im Terminal angezeigt werden. Selbst wenn im Finder die Anzeige versteckter Dateien aktiviert ist, bleibt .DS_Store für Sie unsichtbar. Lesen Sie mehr über versteckte Dateien in dem vorherigen Beitrag - Was bedeutet der Punkt am Anfang einer Datei (.gitignore, .DS_Store, .bashrc usw.)?
Warum gelangt .DS_Store in Git?
Wenn Sie an einem Projekt auf macOS arbeiten und Git zur Versionskontrolle verwenden, können .DS_Store-Dateien zusammen mit anderen Dateien zufällig in Ihr Repository gelangen. Dies geschieht, weil Git standardmäßig diese Dateien nicht ignoriert und sie versehentlich zum Index hinzugefügt werden können. Betrachten wir ein Beispiel. Ich verwende GitHub Desktop, um mit Git zu arbeiten und klone ein neues Repository auf meinen lokalen Rechner. Das erste, was ich mache, ist, eine Datei test.txt zu erstellen:
Додав test.txt
Beachten Sie, dass Git nur die Änderungen der neuen Datei sieht (ich habe sie mit VSCode erstellt und im Ordner dieses Repos gespeichert). Dies liegt daran, dass der Finder derzeit keine benutzerdefinierten Einstellungen für diese Datei und den Ordner insgesamt hat. Lassen Sie uns den Ordner im Finder öffnen, die Position der Datei (Symbole) im Kachelmodus ändern und sehen, dass eine neue .DS_Store zur Liste der Änderungen in Git hinzugefügt wurde:
Додався .DS_Store
Stellen Sie sich vor, Sie haben einen Commit gemacht, indem Sie .DS_Store zum Repository eines Projekts hinzugefügt haben, an dem viele Menschen arbeiten. Erstens, niemand braucht die Konfigurationen Ihres Finders im Projekt-Repo. Zweitens, diese Dateien vermüllen die Commit-Historie und das Repo insgesamt.
Wie verhindert man, dass .DS_Store zum Repo hinzugefügt wird?
Es ist ganz einfach - ignorieren Sie es. Ich meine, fügen Sie es zur .gitignore-Datei hinzu.
Fügen Sie einfach diese Zeile hinzu:
.DS_Store
Wenn die .gitignore-Datei noch nicht existiert, erstellen Sie sie (mit einem Code-Editor oder über das Terminal).
Über das Terminal kann diese Datei mit touch erstellt werden:
touch .gitignore
Und um den Text '.DS_Store' zur .gitignore-Datei hinzuzufügen, können Sie echo verwenden:
echo .DS_Store >> .gitignore
Створений .gitignore
Nach diesem Schritt versuchen die Leute normalerweise, einen neuen Ordner zu erstellen, eine neue Datei hinzuzufügen und die Position der Datei im Finder zu ändern, um zu überprüfen, ob .DS_Store wirklich ignoriert wird.
Und höchstwahrscheinlich werden neue .DS_Store erscheinen und nicht ignoriert werden. Aber warum?
Warum funktioniert .gitignore nicht und ignoriert .DS_Store?
Führen Sie die folgenden Befehle im Terminal aus, um das gewünschte Ergebnis (Ignorieren von .DS_Store) zu erzielen:
Nach diesem Schritt erhalten wir einen neuen Commit mit entfernten .DS_Store-Dateien, und neue werden ignoriert und nicht zum Dateispeicherindex hinzugefügt.
Коміт з видаленим .DS_Store
Aber lassen Sie uns klären, was wir da im Terminal ausgeführt haben:
Zuerst entfernen Sie alle .DS_Store-Dateien aus dem Dateisystem mit dem Befehl find ... -delete.
Dann entfernen Sie alle Dateien aus dem Git-Index (nicht aus dem Dateisystem) mit dem Befehl git rm --cached.
Fügen Sie alle Dateien erneut zum Index hinzu, um sicherzustellen, dass die .DS_Store-Dateien nicht in den neuen Commit gelangen, da sie jetzt von .gitignore ignoriert werden.
Erstellen Sie einen neuen Commit mit einer Nachricht, die die vorgenommenen Änderungen beschreibt.
Es geht tatsächlich um den Cache. Also haben wir ihn geleert. Natürlich kann man den Cache selektiv für eine Datei leeren:
git rm --cached `.DS_Store`
Aber ich bevorzuge die rekursive Bereinigung des gesamten Caches (das ist der universellere Weg):