Impossibile ignorare UserInterfaceState.xcuserstate


301

Sto usando Git per il controllo della versione del progetto Xcode 4. Ho esplicitamente aggiunto ProjectFolder.xcodeproj/project.xcworkspace/xcuserdata/myUserName.xcuserdatad/UserInterfaceState.xcuserstatea .gitignore, ma Git non lo ignorerà. Qualche idea sul perché sia ​​così?

Risposte:


669

Git probabilmente sta già monitorando il file.

Dai documenti di gitignore :

Per interrompere il tracciamento di un file attualmente monitorato, utilizzare git rm --cached .

Usa questo, sostituendo [project]e [username]con le tue informazioni:

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

In alternativa è possibile utilizzare l' -aopzione per git commitaggiungere tutti i file che sono stati modificati o eliminati.

Una volta rimosso il file da Git, rispetterà il tuo .gitignore.


3
Ho questo problema, ma quando provo a rimuovere il file xcuserstate, dice "non corrisponde ad alcun file". Cosa sta succedendo?
Rob Caraway,

Ho lo stesso problema di @RobCaraway
MaxGabriel il

24
Questo mi ha aiutato: 1) uscire da xcode; 2) vai alla directory del progetto ed esegui una "ls -la" dall'app del terminale per assicurarti di vedere i file .git e .gitignore; 3) cambia "ProjectFolder" nell'esempio sopra con il nome del tuo progetto; 4) esegui i due comandi git mostrati da Matt; 5) Riavvia XCode ed esegui il commit e verifica che il file xcuserstate non sia più elencato.
Brainware

1
Qualche idea su come fare l'equivalente in svn? Sto
riscontrando

Grazie @Brainware !! Finalmente ha funzionato grazie al tuo suggerimento. Penso che chiudere Xcode in anticipo sia molto importante.
Jay Versluis,

52

Nel caso in cui il file ignorato continuasse a comparire nell'elenco non tracciato, è possibile utilizzare git clean -f -d per chiarire le cose.

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. ATTENZIONE prima prova git clean -f -d --dry-run, altrimenti potresti perdere le modifiche non impegnate.

Poi: git clean -f -d


github ora ti fornisce un file .gitignore predefinito che include questo file tra gli altri, ma devi ancora seguire i tuoi passaggi. tipo di fastidioso
cspam

3
Grazie uomini, git clean -f -d appena cancellato. xcodeproj e altri file dal mio progetto ...
Jeremy Luisetti,

1
Si consiglia vivamente di usare il flag --dry-run prima di eseguire git clean, ovvero git clean -f -d --dry-run per vedere cosa succede
zero 0

Cosa fa git clean -f -d?
Allenlinli,

Non utilizzare la funzione git clean -f -dse hai apportato modifiche ai file senza commit! L'ho usato e rimosso i miei file appena creati con contenuti già creati! :) Quindi prima commetti e poi pulisci
kalafun

44

Tutta la risposta è fantastica, ma qui è quella che verrà rimossa per ogni utente se lavori su Mac diversi (casa e ufficio)

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

20

Un amico mi ha fatto vedere questo fantastico sito https://www.gitignore.io/ . Inserisci l'IDE di tua scelta o altre opzioni e genererà automaticamente un gitignorefile composto da ignori utili, uno dei quali è il xcuserstate. È possibile visualizzare l'anteprima del gitignorefile prima di scaricarlo.


17

Nel caso in cui il file continui a essere visualizzato anche dopo aver fatto tutto quanto indicato qui, assicurati che questa casella di controllo nelle impostazioni Xcode sia deselezionata:

inserisci qui la descrizione dell'immagine


14

Solo "git clean -f -d" ha funzionato per me!


7

Ecco alcune demo e scorciatoie se usi GitHub, le idee di base sono le stesse.

1. Aprire il terminale in questo modo

inserisci qui la descrizione dell'immagine

2. Incolla il comando seguente sul terminale seguito da uno spazio e quindi incolla il percorso del file .xcuserstate in questo modo

git rm --cached inserisci qui la descrizione dell'immagine

3. Assicurati di avere il git corretto da ignorare e quindi commetti il ​​codice :)

inserisci qui la descrizione dell'immagine


4

Ecco una bella spiegazione di come rimuovere i file in questione in modo ricorsivo dalla cronologia di Git: http://help.github.com/remove-sensitive-data/

Molto utile, perché altrimenti gli strumenti tendono a "bloccarsi" mentre provano a mostrare il diff su quegli enormi file che non avrebbero dovuto essere controllati in primo luogo ...

Ecco cosa puoi fare (in breve) per sbarazzarti delle cose più grandi:

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

Ha funzionato molto bene per me :)


2

Per me niente ha funzionato, ma questo

aggiungi questa linea al tuo gitignore

*.xcuserdata

1

Questo funziona per me

  1. Aprire la cartella che contiene il file di progetto project.xcworkspacedal terminale.

  2. Scrivi questo comando: git rm --cached *xcuserstate

Questo rimuoverà il file.


0

Per xcode 8.3.3 ho appena verificato il codice sopra riportato e osservo che, ora in questo caso dobbiamo modificare i comandi in questo modo

per prima cosa puoi creare un file .gitignore usando

 touch .gitignore

successivamente puoi eliminare tutto il file userInterface usando questo comando e usando questo comando rispetterà il tuo file .gitignore.

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

-1

Penso che sarebbe meglio scrivere così.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.