No se puede ignorar UserInterfaceState.xcuserstate

301

Estoy usando Git para el control de versión del proyecto Xcode 4. He añadido explícitamente ProjectFolder.xcodeproj/project.xcworkspace/xcuserdata/myUserName.xcuserdatad/UserInterfaceState.xcuserstatea .gitignore, pero Git no va a ignorarlo. ¿Alguna idea de por qué esto es así?

AjoFritas
fuente

Respuestas:

669

Git probablemente ya esté rastreando el archivo.

De los documentos de gitignore :

Para dejar de rastrear un archivo que se rastrea actualmente, use git rm --cached .

Use esto, reemplazando [project]y [username]con su información:

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

Alternativamente, puede usar la -aopción para git commitagregar todos los archivos que han sido modificados o eliminados.

Una vez que haya eliminado el archivo de git, respetará su .gitignore.

mate
fuente
3
Tengo este problema, pero cuando trato de eliminar el archivo xcuserstate dice "no coincide con ningún archivo". ¿Que esta pasando?
Rob Caraway el
Tengo el mismo problema que @RobCaraway
MaxGabriel
24
Esto me ayudó a: 1) salir de xcode; 2) vaya al directorio del proyecto y haga un "ls -la" desde la aplicación de terminal para asegurarse de ver los archivos .git y .gitignore; 3) cambie "ProjectFolder" en el ejemplo anterior al nombre de su proyecto; 4) haz los dos comandos de git que Matt muestra; 5) Vuelva a iniciar XCode y realice una confirmación y verifique que el archivo xcuserstate ya no esté en la lista.
Brainware
1
¿Alguna idea de cómo hacer el equivalente en svn? Tengo el mismo problema, en el que svn no ignora el archivo
bpn
Gracias @Brainware !! Finalmente funcionó gracias a su sugerencia. Creo que cerrar Xcode de antemano es muy importante.
Jay Versluis
52

En caso de que el archivo ignorado siga apareciendo en la lista no rastreada, puede usarlo git clean -f -d para borrar las cosas.

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. ADVERTENCIA primero intente git clean -f -d --dry-run, de lo contrario puede perder cambios no confirmados.

Luego: git clean -f -d

Xing
fuente
github ahora le proporciona un archivo .gitignore predeterminado que incluye este archivo, entre otros, pero aún tiene que seguir sus pasos. un poco molesto
cspam
3
Gracias hombres, git clean -f -d acaba de eliminar. xcodeproj y otros archivos de mi proyecto ...
Jeremy Luisetti
1
Se recomienda encarecidamente usar el indicador --dry-run antes de ejecutar git clean, es decir, git clean -f -d --dry-run para ver qué sucede
zero0cool
¿Qué git clean -f -dhacer?
allenlinli
¡No use el git clean -f -dsi tiene cambios de archivos no confirmados! ¡Lo usé y eliminó mis archivos recién creados con contenido ya creado! :) Así que primero comete y luego limpia
kalafun
44

Todas las respuestas son geniales, pero esta es la que eliminará para cada usuario si trabaja en una Mac diferente (hogar y oficina)

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

Un amigo me mostró este sitio increíble https://www.gitignore.io/ . Ingrese el IDE de su elección u otras opciones y automáticamente generará un gitignorearchivo que consiste en ignoraciones útiles, una de las cuales es xcuserstate. Puede obtener una vista previa del gitignorearchivo antes de descargarlo.

Josh Valdivieso
fuente
17

En caso de que el archivo siga apareciendo incluso después de hacer todo lo mencionado aquí, asegúrese de que esta casilla de verificación en la configuración de Xcode esté desmarcada:

ingrese la descripción de la imagen aquí

Lukas Kalinski
fuente
14

¡Solo "git clean -f -d" funcionó para mí!

rilar
fuente
7

Aquí hay algunas demostraciones y atajos si usa GitHub, las ideas básicas son las mismas.

1. Abra la terminal así

ingrese la descripción de la imagen aquí

2. Pegue el siguiente comando en la terminal seguido de un espacio y luego pegue la ruta del archivo .xcuserstate simplemente así

git rm --cached ingrese la descripción de la imagen aquí

3. Asegúrese de tener el git correcto ignorar y luego confirme el código :)

ingrese la descripción de la imagen aquí

Colmillo
fuente
4

Aquí hay una muy buena explicación de cómo eliminar los archivos en cuestión de forma recursiva de su historial de git: http://help.github.com/remove-sensitive-data/

Muy útil, porque de lo contrario las herramientas tienden a "bloquearse" al intentar mostrar la diferencia en esos archivos enormes que no deberían haber sido verificados en primer lugar ...

Esto es lo que puede hacer (en resumen) para deshacerse de las cosas más grandes:

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

Funcionó muy bien para mí :)

Zoran Simic
fuente
2

Para mí nada funcionó, pero esto

agrega esta línea a tu gitignore

*.xcuserdata
Qadir Hussain
fuente
1

Esto funciona para mi

  1. Abra la carpeta que contiene el archivo project.xcworkspacedel proyecto desde la terminal.

  2. Escribe este comando: git rm --cached *xcuserstate

Esto eliminará el archivo.

Mohammed Ali Khaled
fuente
0

Para xcode 8.3.3 acabo de comprobar que probé el código anterior y observo que, ahora en este caso, tenemos que cambiar los comandos para que me gusten

primero puede crear un archivo .gitignore utilizando

 touch .gitignore

después de eso, puede eliminar todo el archivo userInterface usando este comando y al usar este comando respetará su archivo .gitignore.

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

Creo que sería mejor escribir así.

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

Hanlei
fuente