1

I have worked with Git workflows where we release from dedicated branch specifically used for release (e.g. Gitflow's master/main branch). In such workflows, there will be multiple (at least 2) long living git branches. One for development (called develop), and one for releases (called master/main/release/production). Lots of variations in the details, but the general idea is for feature branch to come out of develop, and also merged back into develop. And when it's time to make release, we merge develop into a release branch. Tags typically are made on the release branch.

I have also worked with workflows where we only have one long living branch (e.g. Github flow). The single branch is called develop, and is used for both development and release. Tags, if used, would only go on develop branch.

Of course, there's many differences between these 2 classes of workflows.

I just want to focus on the release process. What advantage do you get from a dedicated release branch?

For what I can see, the advantages are as follows.

  1. good for long release cycle. Maybe release cycle is long (like extra testing). You can basically do your release in peace, with hotfixes if necessary, without being disturbed by code getting merged into the develop branch. Develop branch would get new code merged in all the time - that's just the nature of having a develop branch. Having dedicated release branch guarantees you won't "accidentally" pick up new code that someone else merged into develop.

  2. good if you need to maintain multiple releases for your customers. In which case, you may have a release-1.1 branch, and a release-1.2 branch...etc. All these branches are stable branches that your customer may need. Obviously, you can't do that with a single develop branch.

If neither these 2 scenarios apply to you, is there still a point to have dedicated release branch? Let's say my release cycle is instant, and let's say I don't need to support multiple releases.

It seems to me that for my case, having a single branch and tagging it at important times would be sufficient.

To rephrase the question - if all I do is tag important times in my develop branch, what release related functionality am I missing out on?

1
  • 1
    There's another fairly widespread version where a new branch is created for every release, which is sometimes used as a variant of trunk based development.
    – bdsl
    Sep 22 at 11:49
1

To rephrase the question - if all I do is tag important times in my develop branch, what release related functionality am I missing out on?

Nothing.

As you noted yourself, a flow like git-flow with two long-lived branches (develop and master) is mostly useful if your release process takes a bit longer and you don't want to block merging of new features while making a release.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.