How i use git, and how it differs from Gitflow

Git is an awesome piece of software, and a fantastic idea. I won't delve into what git actually is, if you're reading this then i'm sure you already know. If you don't, ask me to write about it and bore you, alternatively use t'internet to find wonderful and exciting things about git.

Long story short, it's a means and method of collaborating on things. Things that could be software, documents, and a few other cool projects people are using git for.

What was wrong with Gitflow?

In my mind, it pushes people to start developing from code that may, or may not be ready to go live, and put it in a position to go live, by-passing any QA that is in place.

I don't understand

Yeah, many didn't at first, so i created a presentation (yes, i know, they suck BALLS) but it was the best way i could find the illustrate my point.

For those on mobile... well, you're shit out of luck here. Keep reading though, i've summarised.

No really, i hate presentations.

Ok, simple run down.

The long and short, is i've "removed" the dev branch. It's essentially stand alone to the rest of the branches. Easiest way to describe this, is you never pull/checkout from it.

So you do your work in feature branch ticket 24, then commit to UAT for testing. This is where it's all familiar.

However, if you are checking out from UAT, what's to stop another feature being sign-off before the first feature someone else worked on, and then oh shit, both are live but only one is signed off!

One of the key things here, is that the feature branch is merged independently into UAT, and then independently into Release once that feature is signed off, not before. At no points does UAT touch anything other then UAT.

What this enables developers to do, is to get a copy of the code that is fully ready to go live at any point, all of it.

Quick walk through;

  1. Caisey creatures branch ticket24 of release
  2. Caisey merges into UAT, client tests
  3. Roman creatures branch ticket32 of release
  4. Roman merges into UAT, client tests
  5. Client only signs off ticket32
  6. Roman merges ticket32 into release
  7. Bill merges release into master, and only the signed off work is live

One thing that will help everyone, greatly? Do regular merges from release! This keeps your code up to date so you can test on dev correctly, and UAT doesn't magically get rolled back.

There is of course exceptions to this, mainly in terms of hotfixes. This is a branch that sits directly between release and master. This will bypass everything, but the slides explains that better than i can here.