Web Development

Git Development Workflows: Git Flow vs. GitHub Flow

July 15, 2016

One of our development principles is that everything we do should be Repeatable and Reviewable.

The tool we use to accomplish this is the Git version control system. Git provides repeatability and reviewability, but it still allows the user to establish what their workflow looks like.

Git Flow: A Comprehensive Approach to Version Control

One well known workflow methodology is called Git Flow, as described by Vincent Driessen. Git Flow describes how feature branches, release branches, mainline or development branches, and hotfixes are interrelated. This approach works very well for packaged software that is downloaded by users, such as libraries and desktop applications.

For many websites, however, Git Flow is overkill. Sometimes there is not a big enough difference between your mainline development and release branches to make the distinction worthwhile. Alternatively, your workflow for hotfixes and feature branches might be identical.

GitHub Flow: A Simplified Alternative

GitHub proposes an alternate workflow called GitHub Flow. GitHub Flow has some of the same elements as Git Flow, such as feature branches. But unlike Git Flow, GitHub Flow combines the mainline and release branches into a “master” and treats hotfixes just like feature branches.

This simplified model is better suited to continuous delivery models where changes can be quickly made and easily deployed, sometimes multiple times a day.

When is Git Flow Worth the Additional Complexity?

We’ve found that the additional complexity inherent to Git Flow is necessary in certain situations, such as:

  • When you have discrete named or numbered releases
  • When you need to freeze development on a release candidate while still continuing to develop and integrate features for a subsequent release. This may happen, for example, when a release candidate needs to be reviewed, accepted with bug fixes, or approved before being released. Development continues on a subsequent release simultaneously
  • When multiple versions of the software need to be supported and maintained independently

If any of these scenarios apply, then you might benefit from Git Flow. If they don’t, you might be better served by GitHub Flow.

Conclusion

We use GitHub Flow for most of our projects. It provides almost all the functionality that Git Flow does, but is scaled back for a more adaptable workflow with less overhead.

Some of our more complex web applications call for a more complex workflow. For those project, we use Git Flow.

What workflow do you like to use for your development projects? Let us know in the comments section, or give us a call if you’d like to discuss the best approach for your project!

You might also like...

7

Feb.

10 Factors for Choosing a CMS

There are dozens of Content Management System (CMS) platforms available to to help you manage the content, marketing, and SEO on your website. But with all the good options out there, how do you know how to choose the right CMS? Consider the following 10 factors when choosing your CMS. #1 Price Some CMS licenses start … Continued

4

Jan.

You’ve Beaten B.O.C.O. – Now, Deliver Your Product to the World

Over the course of 2018, Fresh’s designers and developers created an interactive digital journey to educate companies and teams on the UX Design Process. In the research, design, and test worlds, users undertook an adventure to beat B.O.C.O., or “The Beast of Conflicting Opinions.” The beginning of 2019 sees B.O.C.O. defeated at last. Now, you … Continued

25

Apr.

How to Create a Fuzzy Search-as-You-Type Feature with Elasticsearch and Django

Tutorial: How to Create a Fuzzy Search-as-you-type Feature with Elasticsearch and Django Recently, I had to figure out how to implement a fuzzy search-as-you-type feature for one of our Django web APIs. I couldn’t find any comprehensive tutorial on how to build this specific feature, so I decided to combine multiple sources and document the … Continued