2010-06-30 10 views
7

Quando mettiamo i file del modello Core Data sotto controllo di versione con git, abbiamo sempre un tempo orribile che unisce le modifiche: l'unico modo sicuro che abbiamo trovato per evitare di unire le modifiche manualmente è comunicare tra il team per bloccare off accesso al modello mentre una persona apporta le modifiche e le spinte necessarie, quindi la persona successiva, ecc. Sicuramente esiste un modo migliore per gestirlo, ma come novellino del git non viene in mente nessuna soluzione ovvia. Qualche suggerimento?Come posso appropriatamente approcciare il controllo della versione e i modelli di Core Data?

risposta

3

Per quanto ho visto, non esiste un modo più sicuro in questo momento perché il modello è memorizzato in un formato che non si presta alla fusione. Normalmente faccio esattamente ciò che fai, ho una persona che lavora sul modello alla volta per evitare collisioni.

+0

Grazie Marcus. Dovremo essere più disciplinati con la nostra comunicazione! –

1

Non appena si avvia il mantenimento dei modelli di mappatura della migrazione, almeno è possibile confrontare modelli di dati e dare un'occhiata alle modifiche. La stessa funzionalità di confronto sarebbe ottima anche nelle revisioni SCM dei modelli di dati e renderebbe la vita molto più semplice.

+0

Grazie Martin - daremo un'occhiata a questo. –

3

Mentre non c'è modo di aggirare il problema della fusione dei modelli di dati di base, ho creato un driver git diff per i file del modello dati core che dovrebbe rendere le cose un po 'più semplici (vedere README per istruzioni su come configurarlo)

https://github.com/chaitanyagupta/XCDataModelPrinter

una volta che hai impostato XCDataModelPrinter come driver git-diff, si può fare un paio di cose per rendere la fusione un po 'più facile:

modifiche Review apportate al modello nel nostro settore

git diff other-branch...my-branch -- /path/to/model 

le modifiche apportate al modello nell'altro ramo

git diff my-branch...other-branch -- /path/to/model 

Dopo aver esaminato le modifiche, proviamo e facciamo l'unione sul nostro ramo:

git merge other-branch 

Se git didn' t segnalare un conflitto di unione, quindi rivedere i risultati di unione (vedrai una diff combinata in questo caso)

git diff --cached /path/to/model 

Se th l'unione si è tradotta in un conflitto, c'è uno dei due percorsi che puoi intraprendere: controlla il file del modello nel tuo ramo personale e aggiungi manualmente le modifiche apportate all'altro, o viceversa. Supponendo che si desidera utilizzare il primo percorso:

Scopri le modifiche al modello nel nostro ramo:

git checkout --ours -- /path/to/model 

Utilizzando il comando diff sopra per vedere le modifiche effettuate in un altro ramo, aggiungere manualmente tali modifiche e recensione:

git diff -- /path/to/model 

Quando si è soddisfatti, basta git-aggiungere il file modello di modo che il suo non è più contrassegnato come unmerged, e impegnarsi:

git add /path/to/model 
git commit 
Problemi correlati