Wie kann ich diese nervigen Mac OS X- .DS_Store
Dateien aus einem Git-Repository entfernen ?
Wie kann ich diese nervigen Mac OS X- .DS_Store
Dateien aus einem Git-Repository entfernen ?
Antworten:
Entfernen Sie vorhandene Dateien aus dem Repository:
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Fügen Sie die Zeile hinzu
.DS_Store
in die Datei .gitignore
, die sich auf der obersten Ebene Ihres Repositorys befindet (oder erstellt wird, wenn sie noch nicht vorhanden ist). Sie können dies einfach mit diesem Befehl im obersten Verzeichnis tun
echo .DS_Store >> .gitignore
Dann
git add .gitignore
git commit -m '.DS_Store banished!'
-exec
wird git-rm
für jede .DS_Store-Datei einmal gestartet, während xargs
alle Pfade in einer Befehlszeile zusammengefasst werden. Meistens bevorzuge ich es, xargs
weil ich mir keine Sorgen machen muss, vielen Sonderzeichen zu entkommen.
.DS_Store
zu .gitignore
rekursiv Arbeit? Das heißt, wird es auch ignorieren some/level/of/folders/.DS_Store
?
Kombinieren Sie die Antworten von Benzado und Webmat, aktualisieren Sie sie mit git rm
Dateien, die nicht im Repo enthalten sind, und schlagen Sie sie nicht fehl , und machen Sie sie für jeden Benutzer generisch einfügbar :
# remove any existing files from the repo, skipping over ones not in repo
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
# specify a global exclusion list
git config --global core.excludesfile ~/.gitignore
# adding .DS_Store to that list
echo .DS_Store >> ~/.gitignore
~/.gitignore
schmerzhaft ist, eine globale Ausschlussdatei zu haben. Es gibt Dateien, die ich aus meinem Home-Verzeichnis ausschließen möchte und die ich global nicht ignorieren möchte. Ich benutze ~/.gitexcludes
stattdessen über die gleiche Anweisung:core.excludesfile
Die beste Lösung, um dieses Problem zu beheben, besteht darin, diese Dateien von allen Git-Repos auf Ihrem System global zu ignorieren. Dies kann durch Erstellen einer globalen Gitignore-Datei wie folgt erfolgen:
vi ~/.gitignore_global
Hinzufügen von Regeln zum Ignorieren von Dateien wie:
# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so
# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip
# Logs and databases #
######################
*.log
*.sql
*.sqlite
# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
Fügen Sie diese Datei nun Ihrer globalen Git-Konfiguration hinzu:
git config --global core.excludesfile ~/.gitignore_global
Bearbeiten:
Symbole wurden entfernt, da sie möglicherweise als Anwendungsressourcen festgeschrieben werden müssen.
In einigen Situationen möchten Sie möglicherweise auch einige Dateien global ignorieren. Für mich ist .DS_Store einer von ihnen. Hier ist wie:
git config --global core.excludesfile /Users/mat/.gitignore
(Oder eine Datei Ihrer Wahl)
Bearbeiten Sie dann die Datei wie den .gitignore eines Repos. Beachten Sie, dass Sie meiner Meinung nach einen absoluten Pfad verwenden müssen.
Wenn Sie die Dateien aufgrund entfernter Änderungen nicht entfernen können, verwenden Sie:
git rm --cached -f *.DS_Store
Öffnen Sie das Terminal und geben Sie "cd <ProjectPath>" ein.
Vorhandene Dateien entfernen:
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
nano .gitignore
Füge das hinzu .DS_Store
Geben Sie "Strg + x" ein.
Geben Sie "y" ein.
Geben Sie ein, um die Datei zu speichern
git add .gitignore
git commit -m '.DS_Store removed.'
nano .gitignore
erstellt die Datei, wenn nicht vorhanden, sollte dieser Befehl aus dem Projektstammordner ausgeführt werden
Die Antwort mit der höchsten Bewertung ist fantastisch, aber um Neulingen wie mir zu helfen, erfahren Sie hier, wie Sie die .gitignore-Datei erstellen, bearbeiten, speichern, die Dateien entfernen, die Sie möglicherweise bereits zu git hinzugefügt haben, und die Datei dann an Github weiterleiten.
Erstellen Sie die Gitignore-Datei
Um eine Gitignore-Datei zu erstellen, können Sie nur touch
die Datei verwenden, die eine leere Datei mit dem angegebenen Namen erstellt. Wir möchten die Datei mit dem Namen .gitignore erstellen, damit wir den folgenden Befehl verwenden können:
touch .gitignore
Ignorieren Sie die Dateien
Jetzt müssen Sie die Zeile hinzufügen, die git anweist, die DS Store-Dateien zu Ihrem .gitignore zu ignorieren. Sie können dazu den Nano-Editor verwenden.
nano .gitignore
Nano ist nett, weil es Anweisungen enthält, wie man rauskommt. ( Ctrl- Ozum Speichern, Ctrl- Xzum Beenden)
Kopieren Sie einige der Ideen aus dieser Github-Liste, in der einige häufig zu ignorierende Dateien aufgeführt sind, und fügen Sie sie ein . Die wichtigsten, um diese Frage zu beantworten, wären:
# OS generated files #
######################
.DS_Store
.DS_Store?
Die # sind Kommentare und helfen Ihnen, Ihre Datei zu organisieren, wenn sie wächst.
Dieser Github-Artikel enthält auch einige allgemeine Ideen und Richtlinien.
Entfernen Sie die Dateien, die bereits zu git hinzugefügt wurden
Schließlich müssen Sie diese DS Store-Dateien tatsächlich aus Ihrem Verzeichnis entfernen.
Verwenden Sie diesen großartigen Befehl aus der Antwort mit der höchsten Bewertung. Dadurch werden alle Ordner in Ihrem Verzeichnis durchsucht und diese Dateien aus git entfernt.
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Schieben Sie .gitignore zu Github
Im letzten Schritt müssen Sie Ihre .gitignore-Datei tatsächlich festschreiben.
git status
git add .gitignore
git commit -m '.DS_Store banished!'
Ich musste oben git-rm in git rm ändern, damit es funktioniert:
find . -depth -name '.DS_Store' -exec git rm --cached '{}' \; -print
Löschen Sie sie mit git-rm
und fügen Sie dann .DS_Store hinzu, um zu verhindern .gitignore
, dass sie erneut hinzugefügt werden. Sie können auch Blueharvest verwenden , um zu verhindern, dass sie alle zusammen erstellt werden
Falls Sie DS_Store-Dateien in jeden Ordner und Unterordner entfernen möchten:
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
Ignoriere sie durch:
echo ".DS_Store" >> ~/.gitignore_global
echo "._.DS_Store" >> ~/.gitignore_global
echo "**/.DS_Store" >> ~/.gitignore_global
echo "**/._.DS_Store" >> ~/.gitignore_global
git config --global core.excludesfile ~/.gitignore_global
Folgendes hat für mich am besten funktioniert. Behandelte nicht übereinstimmende Dateien und Dateien mit lokalen Änderungen. Als Referenz war dies auf einem Mac 10.7-System mit git 1.7.4.4.
Suchen und entfernen:
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch -f
Ich ignoriere .DS_Store auch global in allen Repositorys, indem ich eine globale Datei core.excludesfile setze.
Erstellen Sie zunächst die Datei (falls noch keine vorhanden ist):
touch ~/.gitignore
Fügen Sie dann die folgende Zeile hinzu und speichern Sie:
.DS_Store
Konfigurieren Sie nun git so, dass die Datei global berücksichtigt wird:
git config --global core.excludesfile ~/.gitignore
Ich fand, dass die folgende Zeile von snipplr am besten zum Löschen aller geeignet ist .DS_Store
, einschließlich einer Zeile mit lokalen Änderungen.
find . -depth -name '.DS_Store' -exec git-rm --cached '{}' \; -print
--cached
Option, behält Ihre lokale, .DS_Store
da es sowieso reproduziert wird.
Und wie oben erwähnt, fügen Sie .DS_Store
der .gitignore-Datei im Stammverzeichnis Ihres Projekts hinzu. Dann ist es nicht mehr in Ihren Augen (von Repos).
Ich bin etwas spät zur Party, aber ich habe eine gute Antwort. Verwenden Sie die folgenden Befehle in einem Terminalfenster, um die .DS_Store-Dateien zu entfernen. Löschen Sie jedoch die Dateien mit 'find'. Die Verwendung eines bestimmten Namens mit der Option -name ist eine der sichereren Möglichkeiten, ihn zu verwenden:
cd directory/above/affected/workareas
find . -name .DS_Store -delete
Sie können das "-delete" weglassen, wenn Sie sie einfach vorher und nachher auflisten möchten. Das wird Ihnen versichern, dass sie weg sind.
In Bezug auf den ~ / .gitignore_global-Rat: Seien Sie hier vorsichtig. Sie möchten diese nette Datei in .gitignore in der obersten Ebene jedes Arbeitsbereichs ablegen und festschreiben, damit jeder, der Ihr Repo klont, den Vorteil seiner Verwendung erhält.
Das wird funktionieren:
find . -name "*.DS_Store" -type f -exec git-rm {} \;
Es löscht alle Dateien, deren Namen mit enden .DS_Store
, einschließlich ._.DS_Store
.
"*.DS_Store"
, damit das Sternchen an find
die Shell übergeben und nicht von ihr erweitert wird.
Aus irgendeinem Grund funktionierte keines der oben genannten auf meinem Mac.
Meine Lösung ist vom Terminallauf:
rm .DS_Store
Führen Sie dann den folgenden Befehl aus:
git pull origin master
Das hat bei mir funktioniert, Kombination aus zwei Antworten von oben:
Es gibt einige Lösungen, um dieses Problem zu beheben. Verwenden Sie den OS X Finder nicht zum Anzeigen von Ordnern, um das Erstellen von .DS_Store-Dateien zu vermeiden. Eine alternative Möglichkeit zum Anzeigen von Ordnern ist die Verwendung der UNIX-Befehlszeile. Zum Entfernen der .DS_Store-Dateien kann ein Drittanbieterprodukt namens DS_Store Terminator verwendet werden. Zum Löschen der .DS_Store-Dateien aus dem gesamten System kann ein UNIX-Shell-Befehl verwendet werden. Starten Sie das Terminal über Anwendungen: Dienstprogramme Geben Sie an der UNIX-Shell-Eingabeaufforderung den folgenden UNIX-Befehl ein: sudo find / -name ".DS_Store" -depth -exec rm {} \; Wenn Sie zur Eingabe eines Kennworts aufgefordert werden, geben Sie das Mac OS X-Administratorkennwort ein.
Dieser Befehl dient zum Suchen und Entfernen aller Vorkommen von .DS_Store ab dem Stammverzeichnis (/) des Dateisystems auf dem gesamten Computer. Gehen Sie folgendermaßen vor, um diesen Befehl für die Ausführung als geplante Aufgabe zu konfigurieren: Starten Sie das Terminal über Anwendungen: Dienstprogramme Geben Sie an der UNIX-Shell-Eingabeaufforderung den folgenden UNIX-Befehl ein:
sudo crontab -e Wenn Sie zur Eingabe eines Kennworts aufgefordert werden, geben Sie das Mac OS X-Administratorkennwort ein. Drücken Sie im vi-Editor einmal den Buchstaben I auf Ihrer Tastatur und geben Sie Folgendes ein:
15 1 * * * root find / -name ".DS_Store" -depth -exec rm {} \;
Dies wird als Crontab-Eintrag bezeichnet, der das folgende Format hat:
Minute Stunde DayOfMonth Month DayOfWeek-Benutzerbefehl.
Der Crontab-Eintrag bedeutet, dass der Befehl vom System täglich um 01:15 Uhr automatisch von dem Konto namens root ausgeführt wird.
Der Befehl beginnt bei der Suche bis. Wenn das System nicht ausgeführt wird, wird dieser Befehl nicht ausgeführt.
Um den Eintrag zu speichern, drücken Sie einmal die Esc-Taste und gleichzeitig Umschalt + z + z.
Hinweis: Die Informationen in Schritt 4 gelten nur für den vi-Editor.
Fügen Sie dies Ihrer Datei .gitignore hinzu
#Ignore folder mac
.DS_Store
Speichern Sie dies und machen Sie ein Commit
git add -A
git commit -m "ignore .DS_Store"
und jetzt ignorieren Sie dies für alle Ihre Commits
Der beste Weg, um diese Datei für immer loszuwerden und sich nie wieder darum kümmern zu müssen, ist
Erstellen Sie eine globale Gitignore-Datei:
echo .DS_Store >> ~ / .gitignore_global
Und lassen Sie git wissen, dass Sie diese Datei für alle Ihre Repositorys verwenden möchten:
git config --global core.excludesfile ~ / .gitignore_global Und das war's! .DS_Store ist nicht im Weg.
Keine Notwendigkeit zu entfernen .DS_STORE
lokal
Fügen Sie es einfach der .gitignore
Datei hinzu
Die .gitignore-Datei ist nur eine Textdatei, die Git mitteilt, welche Dateien oder Ordner in einem Projekt ignoriert werden sollen.
Befehle
nano .gitignore
.DS_Store
Dann klickenCTRL+X > y > Hit Return
git status
Um einen letzten Blick auf Ihre Änderungen zu werfengit add .gitignore
git commit -m 'YOUR COMMIT MESSAGE'
git push origin master