Dealing with Upgrades and Git Workflow Craft updates come fast and frequent which introduces a problem when working with lots of people in a team.
Don't get me wrong, this is a good problem to have!

How are dev shops handling the update process when sites have multiple developers on them with multi feature branches running all at once?

The main issue is the strong dependency each feature branch has with the database. Once you implement a craft update, craft doesn't like jumping around on older versions as you switch feature branches.

What we're currently doing:


Disabling the ability for people to be able to update on the live production server.
Creating an "Upgrade" branch on git and doing the updates in that before merging them into the develop branch.


We still seem to be occasionally getting the odd issue of an old feature branch that is out of sync with the database/new install because of this we are still looking to improve this workflow.

Ideas we are tossing up:


Making a private repo of the /app directory a submodule so the sites repo is rather clean.
Disabling the ability to upgrade by default on all domains and treat updates as a "big thing" similar to how you would on an Expression Engine upgrade.


Would love to hear how others are tackling this "convenient" problem.
We at Familiar have decided to leave craft out of git because of this exact issue.  It's extra hassle every time an update comes out.

To better deal with it we've built a couple of grunt functions as part of our craft yeoman generator.  You can see the whole generator on npm: https://www.npmjs.org/package/generator-familiar-craft. Or just an idea of how the grunt tasks are setup: https://github.com/familiar-studio/generator-familiar-craft/blob/master/app/templates/Gruntfile.js

The tasks are pretty simple, the first one will download the latest copy of craft, unzip it and then move just the app folder into place (perfect if your local environment gets way behind)

We also have a database pull grunt task that grabs a copy of the live (or any staging) database and imports into your local database.

This way there's always a quick fix through one or both commands if things get out of sync on any of our developers local environments

So our normal update process is this


Update local to make sure everything's fine.
Update live
Celebrate!!
No committing needed.


Generally we treat craft just like any other project dependency manager like bower would and only add our own code to our repos