GitFlow is a natural fit for Episerver DXC
In this blog, I'll explain a little about GitFlow and why it aligns so well with Episerver DXC development.
What is GitFlow?
If you're not familiar with GitFlow, it's just another branching and merging strategy. It was made popular by Vincent Driessen at nvie and has since been widely adopted by the development community.
It's also built into the most popular Git Clients including SourceTree and GitKraken and is available via commands in Git console.
What I like most about GitFlow, is not the merging strategy itself, but its things that having a standard strategy offers;
- We can more easily collaborate with external developers and Agencies. We can simply by say "we use GitFlow" and they'll know what we mean.
- Onboarding Developers is faster, there are a lot of good learning resources around.
GitFlow merging strategy (in a nutshell)
There are two main branches in GitFlow;
- master - the code you have or are going to release.
- develop branch - the latest development, changes for the next release.
Besides the main branches, we also have;
- feature branches - this is where you actually do your development and commits.
- release branches - a branch to get code ready to release to master.
- hotfixes - for emergency fixes for master branch to be immediately released.
Why does this work well with Episerver DXC?
Because of Episerver DXC's linear deployment path, code must be deployed from Integration > Preproduction > Production.
This means we can think of our Master branch as the code ready to be deployed to Integration.
Deployments above Integration are managed via the Paas Portal or via Episerver Support.
If you also want to have an internal CI/CR (build and release) environment for internal QA, you can run it off the Develop branch
This all means we can use the standard implementation of GitFlow.
Wrapping it up
I'm not saying GitFlow is perfect, but it is a decent merging strategy. It can become complicated when you aren't certain about the order that Features will be released and I have some very large scale projects that GitFlow struggles to handle so we have a customized strategy.
But generally speaking, for Episerver DXC projects where the deployment chain is linear, I've found it's a great fit.
This might change in the future if we are allowed to use our own DevOps tools to deploy directly to Preproduction (or even Production) which is something I've heard is on the technical roadmap.
Resources
- GitFlow by Vincent Driessen
https://nvie.com/posts/a-successful-git-branching-model/ - GitFlow Atlassian
https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow
We will be enabling more options for devops in the DXC Service this year too, so hopefully it will meet everyone's preferences (i.e. not just GitFlow) in the future too :-)
I'd really like to be able to grab a bacpac of the Prod database from the Paas portal. Good to hear there are some enhancements on the horizon.
We've been using GitFlow for quite a few years and it's good in a lot of situations. To note there's a great VS 2017 extension as well https://marketplace.visualstudio.com/items?itemName=vs-publisher-57624.GitFlowforVisualStudio2017 if you don't want to leave the VS workflow.
We do have problems as a digital agency running multiple projects and support work in parallel. Therefore we double branch, e.g. we have a feature branch for project and then sub-features for work items. This allows us to make sure develop/master are only updated when projects are complex. When then create release branches off our project branch. This in our expereince has allowed reduction in overlap or issues and the ability to deploy out branches in a more parallel structure.
When the DXC get's hotflix deployment support to be able to deploy direct thing like this will be even more important.
@scott awesome, sounds like we are basically running our strategy the same way.
We do most of our commits on
feature/sub-feature
branches, then submit PRs fromsub-feature
to ourfeature
branch. When its time to release the feature, we create ourrelease
branch.We internally host an Episerver instance as the CI/CD target for the
develop
branch. Sometimes we use this to testrelease
branches prior to merging todevelop.
I've often thought of scripting up infrastructure as a service to test ourrelease
branches.