2014-02-19 12 views
16

In Xcode habe ich festgestellt, dass .DS_Store und * .xcuserstate sich immer ändern und nicht committiert werden müssen. Also schrieb ich eine .gitignore-Datei, die diese enthält:Entfernen von .xcuserstate- und DS_Store-Dateien von git

.DS_Store 
*.xcuserstate 

unter anderem Einträge. Dann habe ich verwendet:

git rm --cached *xcuserstate 
git rm ---cached .DS_Store 

Um diese Dateitypen bereits unter Versionskontrolle zu entfernen. Wenn ich jedoch zum Zusammenführen gehe, sagt Xcode, dass es Änderungen gibt, die festgeschrieben werden müssen. Zu diesen Änderungen gehören .DS_Store-Dateien und .xcuserstat-Dateien.

Also habe ich versucht, dies: How can I Remove .DS_Store files from a Git repository?

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

und ich habe das gleiche Ergebnis. Wie entferne ich diese Dateien aus der Quellcodeverwaltung für immer?

+0

Ich habe die Änderungen von Xcode übernommen und die Änderungen in der Befehlszeile vorgenommen. Aus irgendeinem Grund hat Xcode nicht ordnungsgemäß zugesagt. Nach dem expliziten Commit von der Kommandozeile hat es endlich funktioniert. Ich habe die Änderung an beiden Zweigen vorgenommen, die ich zusammenführen möchte, aber Xcode sagt mir, dass ich nicht zusammenführen kann, weil "die Datei .gitignore einen Baumkonflikt hatte". –

+0

Noch einmal, die Befehlszeile funktionierte. Ich fusionierte über die Befehlszeile und alles funktionierte einwandfrei. –

Antwort

20

Sie benötigen eine Änderung zu übernehmen, nachdem sie aus dem Staging-Bereich zu entfernen.

Wie Sie bereits getan hat, laufen:

$ git rm --cached path/to/.DS_Store 
$ git rm --cached *.xcuserstate 

Hinweis, können Sie einige in anderen Verzeichnissen, so dass Sie mehrere Anrufungen müssen sie alle zu bekommen. An diesem Punkt sind Ihre Umzüge im Index aufgeführt, aber es gibt noch mehr zu tun: fügen Sie Ihre .gitignore und begehen das Endergebnis:

$ git add .gitignore 
$ git commit -m "Remove and ignore .xcuserstate and .DS_Store files." 

Jetzt werden sie aus dem Repository entfernt werden, und in der ignoriert Zukunft. Hinweis: Dadurch werden die Dateien für andere Personen entfernt, auch wenn Sie git rm --cached lokal verwendet haben. Leider kann man da nicht viel tun. Außerdem befinden sich die Dateien immer noch in Ihrem Verlauf. Je nachdem, was Sie tun, können Sie sie in anderen Zweigen sehen, bis die Dinge zusammengeführt sind und alle Zweige auf etwas basieren, das das neue Festschreiben enthält.

+2

Sie können auch git rm --cached * .DS_Store verwenden, um alle .DS_Store-Dateien im Projekt zu suchen und zu entfernen. –

+2

Sie müssen das wahrscheinlich in Anführungszeichen setzen, um zu verhindern, dass die Shell es erweitert, und Git diese Ehre zuteil werden lässt. Außerdem vermeide ich im Allgemeinen diese Art von Taktik, weil Sie versucht sein könnten, es zu anderen Zeiten zu verwenden und versehentlich Dateien zu löschen, die Sie nicht vorhatten. Aber wenn Sie vorsichtig sind, ist es nützlich. – jszakmeister

2

Versuchen git update-index --assume-unchanged *.xcuserstate .DS_Store und sehen, ob es hilft

+0

Was macht das? –

+0

Git wird sie nicht als geändert erkennen und Sie werden nicht aufgefordert, sie zu übernehmen. – user376507

+0

Das Problem ist, dass Xcode und OS X diese Dateien ständig ändern, so dass Xcode denkt, dass es ständig neu festgelegt werden muss. –

Verwandte Themen