it-swarm.com.de

Wie kann ich .DS_Store-Dateien aus einem Git-Repository entfernen?

Wie kann ich diese nervigen Mac OS X .DS_Store -Dateien aus einem Git-Repository entfernen?

1121
John Topley

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!'
2185
benzado

Kombinieren Sie die Antworten von benzado und webmat, aktualisieren Sie sie mit git rm, ohne Fehler bei gefundenen Dateien, die sich nicht in repo befinden, und machen Sie sie generisch für jeden Benutzer 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
229
Turadg

Die beste Lösung für dieses Problem 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 nun diese Datei zu Ihrer globalen Git-Konfiguration hinzu:

git config --global core.excludesfile ~/.gitignore_global

Bearbeiten:

Symbole wurden entfernt, da sie möglicherweise als Anwendungsassets festgeschrieben werden müssen.

138
Nerve

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 die Datei dann wie den .gitignore eines Repos. Beachten Sie, dass ich denke, Sie müssen einen absoluten Pfad verwenden.

58
webmat

Wenn Sie die Dateien nicht entfernen können, weil Änderungen vorgenommen wurden, gehen Sie wie folgt vor:

git rm --cached -f *.DS_Store
20
Reggie Pinkham

Öffnen Sie das Terminal und geben Sie "cd <ProjectPath>" ein.

  1. Entfernen Sie vorhandene Dateien: find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch

  2. nano .gitignore

  3. Füge diesen .DS_Store hinzu

  4. tippe "ctrl + x"

  5. Tippe "y"

  6. Enter, um die Datei zu speichern

  7. git add .gitignore

  8. git commit -m '.DS_Store removed.'

17

Ich musste git-rm in git-rm ändern, um es zum Laufen zu bringen:

find . -depth -name '.DS_Store' -exec git rm --cached '{}' \; -print
15
David Kahn

Die am häufigsten gewählte Antwort ist großartig, aber ich helfe Neulingen wie mir. Hier erfahren Sie, wie Sie die .gitignore-Datei erstellen, bearbeiten, speichern, die Dateien entfernen, die Sie möglicherweise bereits zu git hinzugefügt haben, und dann die Datei an Github senden.

Erstellen Sie die .gitignore-Datei

Um eine .gitignore-Datei zu erstellen, können Sie nur die Datei touch, 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

Ignoriere die Dateien

Jetzt müssen Sie die Zeile hinzufügen, die git anweist, die DS -Store-Dateien in Ihrem .gitignore zu ignorieren. Sie können dazu den Nano-Editor verwenden.

nano .gitignore

Nano ist schön, weil es Anweisungen enthält, wie man es verlässt. (Ctrl-O speichern, Ctrl-X beenden)

Kopieren Sie einige der Ideen aus diesem Github Gist , das einige häufig zu ignorierende Dateien auflistet. Die wichtigsten zur Beantwortung dieser Frage wären:

# OS generated files #
######################
.DS_Store
.DS_Store?

Die # sind Kommentare und helfen Ihnen, Ihre Datei zu organisieren, während sie wächst.

Dieser Github-Artikel hat auch einige allgemeine Ideen und Richtlinien.

Entferne 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

.gitignore auf Github schieben

Im letzten Schritt müssen Sie Ihre .gitignore-Datei tatsächlich festschreiben.

git status

git add .gitignore

git commit -m '.DS_Store banished!'

14
Joshua Dance

löschen Sie sie mit git-rm und fügen Sie dann .DS_Store zu .gitignore hinzu, um zu verhindern, dass sie erneut hinzugefügt werden. Sie können auch blueharvest verwenden, um zu verhindern, dass sie alle zusammen erstellt werden

10
Nathan

Verwenden Sie diesen Befehl, um die vorhandenen Dateien zu entfernen:

find . -name '*.DS_Store' -type f -delete

Dann .DS_Store zu .gitignore hinzufügen

8
Sunny

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
7
user7718859

Das Folgende funktionierte am besten für mich. Verarbeitete nicht übereinstimmende Dateien und Dateien mit lokalen Änderungen. Als Referenz war dies auf einem Mac 10.7-System, auf dem git 1.7.4.4 ausgeführt wird.

Suchen und entfernen:

find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch -f

Ich ignoriere auch global .DS_Store in allen Repositorys, indem ich eine globale core.excludes-Datei setze.

Erstellen Sie zunächst die Datei (falls noch nicht vorhanden):

touch ~/.gitignore

Fügen Sie dann die folgende Zeile hinzu und speichern Sie:

.DS_Store

Konfigurieren Sie nun git so, dass die Datei global beachtet wird:

git config --global core.excludesfile ~/.gitignore
7
jordantbro

Ich fand heraus, dass die folgende Zeile von snipplr am besten dazu geeignet ist, alle .DS_Store zu löschen, einschließlich einer Zeile mit lokalen Änderungen.

find . -depth -name '.DS_Store' -exec git-rm --cached '{}' \; -print

--cached - Option, behält Ihren lokalen .DS_Store bei, da er sowieso reproduziert wird.

Und wie bereits erwähnt, fügen Sie .DS_Store zur .gitignore-Datei im Stammverzeichnis Ihres Projekts hinzu. Dann ist es nicht mehr in Ihren Augen (von Repos).

6
manat

Ich bin ein bisschen zu 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. Gehen Sie beim Löschen von Dateien mit 'find' jedoch sehr vorsichtig vor. Die Verwendung eines bestimmten Namens mit der Option -name ist eine der sichereren Methoden, um diesen Namen zu verwenden:

cd directory/above/affected/workareas
find . -name .DS_Store -delete

Sie können das "-löschen" weglassen, wenn Sie sie einfach vorher und nachher auflisten möchten. Das wird Sie beruhigen, dass sie weg sind.

Im Hinblick auf den ~/.gitignore_global-Hinweis: Seien Sie hier vorsichtig. Sie möchten diese Nice-Datei in .gitignore auf der obersten Ebene jedes Arbeitsbereichs platzieren und festschreiben, damit jeder, der Ihr Repo klont, den Nutzen aus seiner Verwendung ziehen kann.

5
zeozod

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
4
Invincible

Das wird funktionieren:

find . -name "*.DS_Store" -type f -exec git-rm {} \;

Es werden alle Dateien gelöscht, deren Namen mit .DS_Store enden, einschließlich ._.DS_Store.

4
John Topley

Das hat bei mir geklappt, Kombination aus zwei Antworten von oben:

  • $ git rm --cached -f * .DS_Store
  • $ git commit -m "filter-branch --index-filter" git rm --cached --ignore-unmatch .DS_Store "
  • $ git Push Origin master --force
3
JLunceford

Überspringen Sie beim Initialisieren Ihres Repositorys den enthaltenen Befehl git

-u

und es sollte kein Problem sein.

3
dav1dhunt

fügen Sie dies zu 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 Verpflichtungen

2
$ git commit -m "filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store"
$ git Push Origin master --force
2
JZ.

Ignorierte Dateien entfernen:

(.DS_Store)

$ find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
2
Cubiczx

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 vom gesamten System kann ein UNIX-Shell-Befehl verwendet werden. Terminal aus Anwendungen starten: 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.

Mit diesem Befehl werden alle Vorkommen von .DS_Store vom Stammverzeichnis (/) des Dateisystems über den gesamten Computer hinweg gesucht und entfernt. Führen Sie die folgenden Schritte aus, um diesen Befehl so zu konfigurieren, dass er als geplante Task ausgeführt wird: Terminal aus Anwendungen starten: 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 und hat das folgende Format:

Minute Stunde Monatstag Monatstag Benutzerbefehl.

Der crontab-Eintrag bedeutet, dass der Befehl vom System täglich um 01:15 Uhr automatisch von dem Konto mit dem Namen root ausgeführt wird.

Der Befehl beginnt vom Suchen bis zum. Wenn das System nicht läuft, wird dieser Befehl nicht ausgeführt.

Um die Eingabe zu speichern, drücken Sie einmal die Esc-Taste und dann gleichzeitig Shift + z + z.

Hinweis: Die Informationen in Schritt 4 gelten nur für den vi-Editor.

2
vinny

Es ist nicht erforderlich, .DS_STORE lokal zu entfernen

Fügen Sie es einfach zur Datei .gitignore hinzu

Die .gitignore-Datei ist nur eine Textdatei, die Git mitteilt, welche Dateien oder Ordner in einem Projekt ignoriert werden sollen.

Befehle

  • nano .gitignore
  • Schreiben Sie .DS_Store und klicken Sie dann auf CTRL+X > y > Hit Return
  • git status Um einen letzten Blick auf Ihre Änderungen zu werfen
  • git add .gitignore
  • git commit -m 'YOUR COMMIT MESSAGE'
  • git Push Origin master
0
Wael Assaf