Impossible d'ignorer UserInterfaceState.xcuserstate

301

J'utilise Git pour le contrôle de version du projet Xcode 4. J'ai explicitement ajouté ProjectFolder.xcodeproj/project.xcworkspace/xcuserdata/myUserName.xcuserdatad/UserInterfaceState.xcuserstateà .gitignore, mais Git ne l'ignorera pas. Des idées pourquoi il en est ainsi?

AilFries
la source

Réponses:

669

Git suit probablement déjà le fichier.

Depuis les documents de gitignore :

Pour arrêter le suivi d'un fichier actuellement suivi, utilisez git rm --cached .

Utilisez ceci, en remplaçant [project]et [username]avec vos informations:

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

Alternativement, vous pouvez utiliser l' -aoption git commitqui ajoutera tous les fichiers qui ont été modifiés ou supprimés.

Une fois que vous avez supprimé le fichier de git, il respectera votre .gitignore.

mat
la source
3
J'ai ce problème mais quand j'essaie de supprimer le fichier xcuserstate, il dit «ne correspond à aucun fichier». Que se passe-t-il?
Rob Caraway
J'ai le même problème que @RobCaraway
MaxGabriel
24
Cela m'a aidé à: 1) quitter xcode; 2) allez dans le répertoire du projet et faites un "ls -la" depuis l'application du terminal pour vous assurer de voir les fichiers .git et .gitignore; 3) remplacez "ProjectFolder" dans l'exemple ci-dessus par le nom de votre projet; 4) faire les deux commandes git que Matt montre; 5) Relancez XCode et effectuez une validation et vérifiez que le fichier xcuserstate n'est plus répertorié.
Brainware
1
Une idée de comment faire l'équivalent en svn? Je reçois le même problème, dans lequel svn
n'ignore
Merci @Brainware !! Cela a finalement fonctionné grâce à votre suggestion. Je pense que la fermeture préalable de Xcode est très importante.
Jay Versluis
52

Dans le cas où le fichier ignoré apparaît toujours dans la liste non suivie, vous pouvez utiliser git clean -f -d pour effacer les choses.

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. AVERTISSEMENT essayez d'abord git clean -f -d --dry-run , sinon vous risquez de perdre des modifications non validées.

Ensuite: git clean -f -d

Xing
la source
github vous donne maintenant un fichier .gitignore par défaut qui inclut ce fichier entre autres mais vous devez toujours suivre vos étapes. un peu ennuyeux
cspam
3
Merci les hommes, git clean -f -d vient d'être supprimé. xcodeproj et autres fichiers de mon projet ...
Jeremy Luisetti
1
Il est fortement conseillé d'utiliser l'indicateur --dry-run avant d'exécuter git clean, c'est- git clean -f -d --dry-run à- dire de voir ce qui se passe
zero0cool
Que fait git clean -f -d-il?
allenlinli
N'utilisez pas le git clean -f -dsi vous avez des modifications de fichiers non validées! Je l'ai utilisé et il a supprimé mes fichiers fraîchement créés avec du contenu déjà créé! :) Alors commencez par valider puis nettoyez
kalafun
44

Toutes les réponses sont excellentes, mais voici celle qui sera supprimée pour chaque utilisateur si vous travaillez sur différents Mac (domicile et bureau)

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

Un ami m'a montré ce site étonnant https://www.gitignore.io/ . Entrez l'IDE de votre choix ou d'autres options et il générera automatiquement un gitignorefichier composé d'ignorants utiles, dont l'un est le xcuserstate. Vous pouvez prévisualiser le gitignorefichier avant de le télécharger.

Josh Valdivieso
la source
17

Dans le cas où le fichier continue de s'afficher même après avoir fait tout ce qui est mentionné ici, assurez-vous que cette case à cocher dans les paramètres Xcode n'est pas cochée:

entrez la description de l'image ici

Lukas Kalinski
la source
14

Juste "git clean -f -d" a fonctionné pour moi!

rilar
la source
7

Voici quelques démos et raccourcis si vous utilisez GitHub, les idées de base sont les mêmes.

1. Ouvrez un terminal comme celui-ci

entrez la description de l'image ici

2. Collez la commande ci-dessous dans le terminal, suivie d'un espace, puis collez le chemin du fichier .xcuserstate simplement comme ceci

git rm --cached entrez la description de l'image ici

3. Assurez-vous que vous avez ignoré le git correct, puis validez le code :)

entrez la description de l'image ici

Fangming
la source
4

Voici une très belle explication sur la façon de supprimer récursivement les fichiers en question de votre historique git: http://help.github.com/remove-sensitive-data/

Très utile, car sinon les outils ont tendance à "se bloquer" tout en essayant de montrer la différence sur ces fichiers énormes qui n'auraient pas dû être vérifiés en premier lieu ...

Voici ce que vous pouvez faire (en bref) pour vous débarrasser des plus gros trucs:

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

A très bien fonctionné pour moi :)

Zoran Simic
la source
2

Pour moi, rien n'a fonctionné, mais cela

ajoutez cette ligne à votre gitignore

*.xcuserdata
Qadir Hussain
la source
1

Ça marche pour moi

  1. Ouvrez le dossier qui contient le fichier project.xcworkspacede projet depuis le terminal.

  2. Écrivez cette commande: git rm --cached *xcuserstate

Cela supprimera le fichier.

Mohammed Ali Khaled
la source
0

Pour xcode 8.3.3, je viens de vérifier le code ci-dessus et je constate que maintenant, dans ce cas, nous devons changer les commandes comme ceci

vous pouvez d'abord créer un fichier .gitignore en utilisant

 touch .gitignore

après cela, vous pouvez supprimer tout le fichier userInterface en utilisant cette commande et en utilisant cette commande il respectera votre fichier .gitignore.

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

Je pense qu'il vaudrait mieux écrire comme ça.

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

Hanlei
la source