Automatically resolving git merge conflicts in Xcode’s project.pbxproj file

If you’re like me, you hate manually resolving merge conflicts in Xcode’s project.pbxproj file every time both you and one of your teammates add a new file to your project. It’s an “easy” merge in a sense – you always want to keep both sides – but somehow git can’t figure it out. Here’s how to make git merge those pesky *.pbxproj files for you – without you having to manually resolve conflicts ever again*. (*Well, probably never again. No guarantees, but this almost always works.)

1. Create a .gitattributes file

Assuming you don’t already have one, create a file called .gitattributes in your project’s root directory.

2. Set the merge strategy to union

Add the following line to your .gitattributes file:

*.pbxproj merge=union

This will tell git to merge using the union strategy, meaning it’ll keep both sides (theirs and ours) during a merge. This is almost always what you want in the case of a *.pbxproj merge conflict.

3. Add the .gitattributes file to git and push your changes

Now that your merge strategy is set, make sure to give the rest of your team this wonderful gift. Add the .gitattributes file to your git repo:

git add .gitattributes

Then commit and push and you’re good to go!

Update: If you’re looking for a more complex solution that should work in more cases, check out mergepbx. Personally, I prefer the simplicity of the .gitattributes approach and haven’t had any issues with it.