2012-03-08 13 views
9

L'utilizzo di Git con Xcode (4.3) è un vero incubo.Il controllo del codice sorgente in XCode è un incubo: qualcuno può offrire consigli?

Ecco uno scenario ...

voglio aggiungere una nuova funzionalità, in modo da creare un nuovo argomento ramo.

aggiungo la mia nuova funzione e sono pronti a impegnarsi, rebase e unire ...

consegno il mio variazioni - bene.

Torna alla schermata principale per eseguire le modifiche (nel caso in cui qualcun altro abbia aggiornato il codice). Improvvisamente ottengo:

error: Your local changes to the following files would be overwritten by checkout: 
myProject/project.xcworkspace/xcuserdata/Bodacious.xcuserdatad/UserInterfaceState.xcuserstate 

eh? Ho appena commesso.

Xcode mi piace modificare i miei file project.xcworkspace ogni secondo, il che rende quasi impossibile eseguire commessi puliti, atomici.

Cosa c'è di più, se faccio commettere i cambiamenti nella project.xcworkspace e rapidamente tornare indietro ad un altro ramo (al fine di fondersi in master per esempio), allora Xcode si lamenta che i file sono stati modificati e probabilmente bloccarsi troppo.

Da quello che ho trovato, I can't add these files to my .gitignore entrambi.

Devo accettare che una strategia git concisa e ordinata non è possibile con Xcode, chiudi Xcode prima di fare qualsiasi gestione Git, o c'è un'altra opzione disponibile?

risposta

12

Ho appena aggiunto questi file al mio file .gitignore. Non è necessario condividerli con altri sviluppatori.

Così ho:

*.xcworkspace 

In .gitignore

Nota che la questione StackOverflow si è collegato al dice di non escludere project.pbxproj, ma non dice di non escludere *.xcworkspace.

Tuttavia, al momento non sto utilizzando la funzionalità dell'area di lavoro. Se si utilizza la funzionalità dell'area di lavoro, è possibile includere tali file, ma ignorare i file xcuserdata.

+0

OK - cool - Posso aggiungere '.xcuserstate' a .gitignore troppo ? – bodacious

+0

@bodacious si. – ThomasW

+0

grazie per l'aiuto! – bodacious

2

La domanda collegata si riferiva solo al file xcodeproject/project.pbxproj. Dovresti essere in grado di tranquillamente gli .gitignore gli altri file.

0

Se non è possibile spingere il commit solo perché UserInterfaceState.xcuserstate è stata modificata, ecco una soluzione rapida:

  1. aprire la libreria, andare al repository, copiare il codice del commit (qualcosa come f01a2147218d by username)
  2. Aprire il terminale, passare alla cartella del progetto, fare git reset --hard f01a2147218d
  3. Premere il commit!
0

Ecco cosa ha funzionato per me su Xcode 5.1:

  1. Confermare e trasferire le modifiche per il ramo in cui ci si trova.
  2. Passare a Xcode> Controllo origine> Ignora tutte le modifiche (deve solo eliminare il problema dell'area di lavoro)
  3. Controllare il ramo che si desidera e unire o qualsiasi altra cosa si stia tentando di fare.

Nota: se si attende troppo a lungo o fare qualsiasi cosa in Xcode prima del check-out la nuova filiale, potrebbe essere necessario annullare le modifiche di nuovo

Problemi correlati