.gitignore alle .DS_Store-Dateien in jedem Ordner und Unterordner
560
Ich habe .DS_Store zur .gitignore-Datei hinzugefügt, aber es scheint, dass .DS_Store nur im Stammverzeichnis ignoriert wird, nicht in jedem Ordner und Unterordner.
Wie genau haben Sie es zu .gitignore hinzugefügt? Es sollte in allen Verzeichnissen funktionieren (funktioniert für mich).
Thilo
Es funktioniert auch für mich. Ich habe auch versucht, wenn es am Ende der Datei ist, wenn Sie eine (plattformspezifische) Newline haben müssen, aber das hat nichts daran geändert, dass .DS_Store-Verzeichnisse in einem Teil der Hierarchie immer noch ignoriert wurden.
Enorl76
Die Frage, wie ich sie verstehe, war: Wie man alle Vorkommen von .DS_Store in allen Unterverzeichnissen einfach ignoriert, ohne dies manuell in jedem Unterverzeichnis zu tun. Ich hatte das gleiche Problem. Die folgende Antwort zeigt, wie es gelöst werden kann (die letzten beiden Absätze).
Petrsyn
Antworten:
647
Ich denke, das Problem, das Sie haben, ist, dass Sie in einem früheren Commit versehentlich .DS_Store-Dateien zum Repository hinzugefügt haben. Sobald eine Datei in Ihrem Repository verfolgt wurde, wird sie natürlich auch dann weiter verfolgt, wenn sie mit einem Eintrag in einer entsprechenden Gitignore-Datei übereinstimmt.
Sie müssen die .DS_Store-Dateien, die Ihrem Repository hinzugefügt wurden, manuell entfernen. Sie können verwenden git rm --cached .DS_Store. Einmal entfernt, sollte Git es ignorieren. Sie sollten nur die folgende Zeile in Ihrer Root-Gitignore-Datei benötigen : .DS_Store. Vergiss die Zeit nicht!
git rm --cached .DS_Storewird nur .DS_Storeaus dem aktuellen Verzeichnis entfernt. Sie können find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatchdamit alle .DS_Storesaus dem Repository entfernen .
Filztipp: Da Sie wahrscheinlich nie .DS_Store-Dateien einschließen möchten, erstellen Sie eine globale Regel. Erstellen Sie zunächst irgendwo eine globale .gitignore-Datei, z echo .DS_Store >> ~/.gitignore_global. Sagen Sie git nun, dass es für alle Repositorys verwendet werden soll : git config --global core.excludesfile ~/.gitignore_global.
Die letzten beiden Absätze beantworten diese Frage. Vielen Dank.
Petrsyn
70
´´git rm --cached .DS_Store´´ entfernt nur einen .DS_Store aus dem aktuellen Verzeichnis. Benutze ´´find. -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch´´, um alle .DS_Stores aus dem Repo zu entfernen
auco
4
Eine Liste anderer häufig zu ignorierender Dateien könnte nützlich sein
Geotheory
14
Schlechte Idee, globale Regel IMO zu verwenden: Der Versuch, globale Konfigurationen über mehrere Benutzer / Maschinen hinweg zu verwalten, funktioniert nie - Sie möchten, dass die Regeln für Ihr Repo im Repo selbst gelten. Stimmen Sie dem zu
Yarin
15
Ich stimme dir nicht zu. (Auch wenn ich Ihren Kommentar positiv bewertet habe, da ich ihn für aufschlussreich halte.) Wenn wir global arbeiten, muss dies jeder Mac-Benutzer tun, aber nur einmal. Wenn wir das Repository breit machen, müssen wir das für jedes Repository tun. Ich weiß nichts über dich, aber ich mache die ganze Zeit neue Repos. Wenn man es global macht, löst man das Problem ein für alle Mal.
Edward Newell
356
Fügen Sie **/.DS_Storein .gitignorefür das Unterverzeichnis
Es scheint, dass das Hinzufügen -ferforderlich ist, wenn Sie offene Dateien in den relavent Ordnern haben:find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Mehmet Kaplan
158
Wenn .DS_Store Ihrem Git-Repository nie hinzugefügt wurde, fügen Sie es einfach Ihrer .gitignore-Datei hinzu.
Wenn Sie keine haben, erstellen Sie eine Datei mit dem Namen
.gitignore
Im Stammverzeichnis Ihrer App und einfach schreiben
**/.DS_Store
Drin. Dadurch kann sich die .DS_Store-Datei niemals in Ihr Git einschleichen.
Aber wenn es schon da ist, schreiben Sie in Ihr Terminal:
Fügen Sie nun .DS_Store zu Ihrer .gitignore-Datei hinzu und schreiben Sie die beiden letzten Codeteile erneut fest und pushen Sie sie (git commit ..., git push ...).
@MilanG Es ist ein Schlüsselwort, das im Grunde "Suche in diesem Verzeichnis und allen Unterverzeichnissen" bedeutet.
lachie_h
1
Ich bin mir nicht sicher, ob dies eine perfekte Erklärung dafür ist, wofür das doppelte Sternchen steht. Es ist eine Wildcard. Könnte *oder **hängt davon ab, was Sie erreichen möchten. Auf diese Weise können Sie der Shell mitteilen, wie sie in Verzeichnissen navigieren soll. Diese Stackoverflow-Antwort erklärt es vollständig stackoverflow.com/a/28199633/4092170
Sie können das --cachedFlag auch zur Antwort von auco hinzufügen , um lokale .DS_store-Dateien zu verwalten, wie Edward Newell in seiner ursprünglichen Antwort erwähnt hat. Der geänderte Befehl sieht folgendermaßen aus: find . -name .DS_Store -print0 | xargs -0 git rm --cached --ignore-unmatch..cheers und danke!
Antworten:
Ich denke, das Problem, das Sie haben, ist, dass Sie in einem früheren Commit versehentlich .DS_Store-Dateien zum Repository hinzugefügt haben. Sobald eine Datei in Ihrem Repository verfolgt wurde, wird sie natürlich auch dann weiter verfolgt, wenn sie mit einem Eintrag in einer entsprechenden Gitignore-Datei übereinstimmt.
Sie müssen die .DS_Store-Dateien, die Ihrem Repository hinzugefügt wurden, manuell entfernen. Sie können verwenden
git rm --cached .DS_Store
. Einmal entfernt, sollte Git es ignorieren. Sie sollten nur die folgende Zeile in Ihrer Root-Gitignore-Datei benötigen :.DS_Store
. Vergiss die Zeit nicht!git rm --cached .DS_Store
wird nur.DS_Store
aus dem aktuellen Verzeichnis entfernt. Sie könnenfind . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
damit alle.DS_Stores
aus dem Repository entfernen .Filztipp: Da Sie wahrscheinlich nie .DS_Store-Dateien einschließen möchten, erstellen Sie eine globale Regel. Erstellen Sie zunächst irgendwo eine globale .gitignore-Datei, z
echo .DS_Store >> ~/.gitignore_global
. Sagen Sie git nun, dass es für alle Repositorys verwendet werden soll :git config --global core.excludesfile ~/.gitignore_global
.Diese Seite hat mir geholfen, Ihre Frage zu beantworten: https://help.github.com/articles/ignoring-files
quelle
Fügen Sie
**/.DS_Store
in.gitignore
für das UnterverzeichnisWenn
.DS_Store
bereits festgelegt:So ignorieren Sie sie in allen Repositorys: (manchmal heißt es
._.DS_Store
)quelle
git rm --cached your_file
zuerst verwendenfind . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
, von: stackoverflow.com/questions/18393498/…-f
erforderlich ist, wenn Sie offene Dateien in den relavent Ordnern haben:find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Wenn .DS_Store Ihrem Git-Repository nie hinzugefügt wurde, fügen Sie es einfach Ihrer .gitignore-Datei hinzu.
Wenn Sie keine haben, erstellen Sie eine Datei mit dem Namen
Im Stammverzeichnis Ihrer App und einfach schreiben
Drin. Dadurch kann sich die .DS_Store-Datei niemals in Ihr Git einschleichen.
Aber wenn es schon da ist, schreiben Sie in Ihr Terminal:
Übernehmen Sie dann die Änderungen und übertragen Sie sie, um den .DS_Store von Ihrem Remote-Repo zu entfernen:
Fügen Sie nun .DS_Store zu Ihrer .gitignore-Datei hinzu und schreiben Sie die beiden letzten Codeteile erneut fest und pushen Sie sie (git commit ..., git push ...).
quelle
*
oder**
hängt davon ab, was Sie erreichen möchten. Auf diese Weise können Sie der Shell mitteilen, wie sie in Verzeichnissen navigieren soll. Diese Stackoverflow-Antwort erklärt es vollständig stackoverflow.com/a/28199633/4092170Ihre .gitignore- Datei sollte folgendermaßen aussehen:
Solange Sie keinen Schrägstrich einfügen, wird dieser in allen Verzeichnissen mit dem Dateinamen abgeglichen. (von hier )
quelle
git rm --cached path/to/file/here
Schritt 1, löschen Sie alle
*.DS_store
Dateien. Man kann rennenAber sei
rm -f
dir bewusst, dass das ein bisschen gefährlich sein kann, wenn du einen Tippfehler hast! Schritt zwei: hinzufügenzu .gitignore. Das hat bei mir funktioniert!
quelle
Fügen Sie
*.DS_Store
Ihrer .gitignore-Datei hinzu. Das funktioniert bei mir perfektquelle
Sie können das
--cached
Flag auch zur Antwort von auco hinzufügen , um lokale .DS_store-Dateien zu verwalten, wie Edward Newell in seiner ursprünglichen Antwort erwähnt hat. Der geänderte Befehl sieht folgendermaßen aus:find . -name .DS_Store -print0 | xargs -0 git rm --cached --ignore-unmatch
..cheers und danke!quelle
Schritt: 1) Entfernen Sie die vorhandenen Dateien mit diesem Befehl
finden . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Schritt: 2) Fügen Sie .DS_Store in Ihre .gitignore-Datei ein
Schritt: 3) Übernehmen Sie Ihre Änderungen in .gitignore git. Fügen Sie .gitignore git commit -m "entfernt .DS_Store" hinzu.
quelle
$ git rm ./*.DS_Store
- Entfernen Sie alle .DS_Store aus Git$ echo \.DS_Store >> .gitignore
- Ignoriere .DS_Store in ZukunftCommit & Push
quelle