UserInterfaceState.xcuserstate kann nicht ignoriert werden


301

Ich verwende Git für die Versionskontrolle des Xcode 4-Projekts. Ich habe ausdrücklich hinzugefügt ProjectFolder.xcodeproj/project.xcworkspace/xcuserdata/myUserName.xcuserdatad/UserInterfaceState.xcuserstatezu .gitignore, aber Git es wird es nicht ignorieren. Irgendwelche Ideen, warum das so ist?

Antworten:


669

Git verfolgt die Datei wahrscheinlich bereits.

Aus den Gitignore-Dokumenten :

Verwenden Sie git rm --cached, um die Verfolgung einer aktuell verfolgten Datei zu beenden .

Verwenden Sie dies, ersetzen Sie [project]und [username]mit Ihren Informationen:

git rm --cached [project].xcodeproj/project.xcworkspace/xcuserdata/[username].xcuserdatad/UserInterfaceState.xcuserstate
git commit -m "Removed file that shouldn't be tracked"

Alternativ können Sie die -aOption verwenden git commit, um alle Dateien hinzuzufügen, die geändert oder gelöscht wurden.

Sobald Sie die Datei aus git entfernt haben, wird Ihre respektiert .gitignore.


3
Ich habe dieses Problem, aber wenn ich versuche, die xcuserstate-Datei zu entfernen, wird angezeigt, dass keine Dateien übereinstimmen. Was ist los?
Rob Kümmel

Ich habe das gleiche Problem wie @RobCaraway
MaxGabriel

24
Dies hat mir geholfen: 1) xcode beenden; 2) Wechseln Sie in das Projektverzeichnis und führen Sie in der Terminal-App ein "ls -la" aus, um sicherzustellen, dass die Dateien .git und .gitignore angezeigt werden. 3) Ändern Sie "ProjectFolder" im obigen Beispiel in den Namen Ihres Projekts. 4) Führen Sie die beiden Git-Befehle aus, die Matt anzeigt. 5) Starten Sie XCode neu, führen Sie ein Commit durch und stellen Sie sicher, dass die xcuserstate-Datei nicht mehr aufgeführt ist.
Brainware

1
Irgendeine Idee, wie man das Äquivalent in svn macht? Ich
bekomme

Vielen Dank, dass Sie @Brainware! Dank Ihres Vorschlags hat es endlich geklappt. Ich denke, dass es sehr wichtig ist, Xcode vorher zu schließen.
Jay Versluis

52

Falls die ignorierte Datei weiterhin in der nicht verfolgten Liste angezeigt wird, können Sie sie zum Aufräumen verwenden git clean -f -d .

1.

git rm --cached {YourProjectFolderName}.xcodeproj/project.xcworkspace/xcuserdata/{yourUserName}.xcuserdatad/UserInterfaceState.xcuserstate

2.

git commit -m "Removed file that shouldn't be tracked"

3. WARNUNG Versuchen git clean -f -d --dry-runSie es zuerst , da Sie sonst möglicherweise nicht festgeschriebene Änderungen verlieren.

Dann: git clean -f -d


github gibt Ihnen jetzt eine Standard-Gitignore-Datei, die unter anderem diese Datei enthält, aber Sie müssen noch Ihre Schritte ausführen. irgendwie nervig
cspam

3
Danke Männer, git clean -f -d gerade gelöscht. xcodeproj und andere Dateien aus meinem Projekt ...
Jeremy Luisetti

1
Es wird dringend empfohlen, das Flag --dry-run zu verwenden, bevor git clean ausgeführt wird, dh um git clean -f -d --dry-run zu sehen, was passiert
zero0cool

Was macht git clean -f -ddas
Allenlinli

Verwenden git clean -f -dSie das nicht, wenn Sie nicht festgeschriebene Dateiänderungen vorgenommen haben! Ich habe es verwendet und es hat meine frisch erstellten Dateien mit bereits erstellten Inhalten entfernt! :) Also erst
festschreiben

44

Alle Antworten sind großartig, aber hier ist die, die für jeden Benutzer entfernt wird, wenn Sie auf einem anderen Mac arbeiten (Heim und Büro).

git rm --cache */UserInterfaceState.xcuserstate
git commit -m "Never see you again, UserInterfaceState"

20

Ein Freund hat mir diese erstaunliche Seite https://www.gitignore.io/ gezeigt . Geben Sie die IDE Ihrer Wahl oder andere Optionen ein und es wird automatisch eine gitignoreDatei generiert , die aus nützlichen Ignorierungen besteht, von denen eine die ist xcuserstate. Sie können gitignorevor dem Herunterladen eine Vorschau der Datei anzeigen.


17

Wenn die Datei auch nach allen hier genannten Vorgängen weiterhin angezeigt wird, stellen Sie sicher, dass dieses Kontrollkästchen in den Xcode-Einstellungen deaktiviert ist:

Geben Sie hier die Bildbeschreibung ein


14

Nur "git clean -f -d" hat bei mir funktioniert!


7

Hier sind einige Demos und Abkürzungen, wenn Sie GitHub verwenden. Die Grundideen sind dieselben.

1. Öffnen Sie das Terminal so

Geben Sie hier die Bildbeschreibung ein

2. Fügen Sie den folgenden Befehl in das Terminal ein, gefolgt von einem Leerzeichen, und fügen Sie dann den Pfad der .xcuserstate-Datei einfach so ein

git rm --cached Geben Sie hier die Bildbeschreibung ein

3. Stellen Sie sicher, dass Sie das richtige Git ignorieren und dann den Code festschreiben :)

Geben Sie hier die Bildbeschreibung ein


4

Hier ist eine sehr schöne Erklärung, wie Sie die fraglichen Dateien rekursiv aus Ihrem Git-Verlauf entfernen können: http://help.github.com/remove-sensitive-data/

Sehr nützlich, da Tools sonst dazu neigen, zu hängen, während versucht wird, den Unterschied zwischen den riesigen Dateien anzuzeigen, die eigentlich gar nicht hätten überprüft werden sollen ...

Folgendes können Sie (kurz gesagt) tun, um die größten Dinge loszuwerden:

cd YourProject
git filter-branch --index-filter 'git rm --cached --ignore-unmatch -r YourProject.xcodeproj/project.xcworkspace' HEAD
# see what you want to do with your remote here...
# you can: git push origin master --force
# or you can delete it and push a fresh new one from your cleaned-up local...
rm -rf .git/refs/original
git gc --prune=now
git gc --aggressive --prune=now

Hat sehr gut für mich funktioniert :)


2

Für mich hat nichts funktioniert, aber das

füge diese Zeile deinem Gitignore hinzu

*.xcuserdata

1

Das funktioniert bei mir

  1. Öffnen Sie den Ordner, der die Projektdatei enthält, project.xcworkspacevom Terminal aus.

  2. Schreiben Sie diesen Befehl: git rm --cached *xcuserstate

Dadurch wird die Datei entfernt.


0

Für xcode 8.3.3 habe ich gerade den obigen Code ausprobiert und festgestellt, dass wir jetzt in diesem Fall die Befehle so ändern müssen

Zuerst können Sie mit .gitignore eine Datei erstellen

 touch .gitignore

Danach können Sie mit diesem Befehl die gesamte userInterface-Datei löschen. Mit diesem Befehl wird Ihre .gitignore-Datei berücksichtigt.

 git rm --cached [project].xcworkspace/xcuserdata/[username].xcuserdatad/UserInterfaceState.xcuserstate
 git commit -m "Removed file that shouldn't be tracked"

-1

Ich denke, es wäre besser, so zu schreiben.

git rm --cache * / /UserInterfaceState.xcuserstate**

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.