Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I sanely approach version control and Core Data models?

When we put Core Data model files under version control with git, we always have a horrible time merging changes - the only sure fire way we've found to avoid having to merge in changes by hand is to communicate among the team to block off access to the model while one person makes their necessary changes and pushes, then the next person, etc. Surely there is a better way to handle this, but as a git novice no obvious solution comes to mind. Any suggestions?

like image 500
Carl Veazey Avatar asked Jun 30 '10 18:06

Carl Veazey


3 Answers

While there is no way to get around the merging problem of core data models, I created a git diff driver for core data model files which should make things a bit easier (see README for instructions on how to set it up)

https://github.com/chaitanyagupta/XCDataModelPrinter

Once you've set up XCDataModelPrinter as your git-diff driver, you can do a few things to make merging a bit easier:

Review changes made to the model in our branch

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

Review changes made to the model in the other branch

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

After you've reviewed the changes, let's try and do the merge on our branch:

git merge other-branch

If git didn't report a merge conflict, then review the merge results (you will see a combined diff in this case)

git diff --cached /path/to/model

If the merge resulted in a conflict, there's one of two paths you can take: check out the model file in your own branch and manually add changes made to the other one, or vice-versa. Assuming you want to use the first path:

Check out model changes in our own branch:

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

Using the diff command above to see the changes made in the other-branch, manually add those changes and review:

git diff -- /path/to/model

Once you are satisfied, just git-add the model file so its no longer marked as unmerged, and commit:

git add /path/to/model
git commit
like image 187
Chaitanya Gupta Avatar answered Oct 16 '22 16:10

Chaitanya Gupta


As far as I have seen, there is no saner way at this time because the model is stored in a format that does not lend itself to merging. Normally I do exactly what you do, have one person working on the model at a time to avoid collisions.

like image 25
Marcus S. Zarra Avatar answered Oct 16 '22 15:10

Marcus S. Zarra


As soon as you start maintaining migration mapping models, at least you can compare data models and have a look at the changes. The same compare functionality would also be great within SCM revisions of data models and would make life a lot easier.

like image 24
Martin Brugger Avatar answered Oct 16 '22 14:10

Martin Brugger