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?

Knoblauchfrüchte
quelle

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.

matt
quelle
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

Xing
quelle
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"
hardikdevios
quelle
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.

Josh Valdivieso
quelle
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

Lukas Kalinski
quelle
14

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

rilar
quelle
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

Fangming
quelle
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 :)

Zoran Simic
quelle
2

Für mich hat nichts funktioniert, aber das

füge diese Zeile deinem Gitignore hinzu

*.xcuserdata
Qadir Hussain
quelle
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.

Mohammed Ali Khaled
quelle
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"
Sachin Nautiyal
quelle
-1

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

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

Hanlei
quelle