GitKraken Blog

Releasing the Power of Git

Doing Gitflow in Node:  nodegit-flow

In GitKraken V0.5 we added support for GitFlow. In the process of doing so, we created a library that wraps NodeGit, which allows us to perform GitFlow commands with a single function call. The library is now open source and can save other developers time doing GitFlow operations in Node.js.

What is GitFlow?

GitFlow is a branching and merging strategy that can be used in any Git repo. It is a list of rules to keep a repo’s history organized, and it’s also used to make the release process, bug fixes, and feature creation easier.

In a repo that uses GitFlow, two branches will always be present: master and develop:

  • master: the version in production
  • develop: the version currently in development for the next release

Other supporting branches are specific types (i.e. feature, hotfix, or release branches) where each has its own rules for branching and merging.

As you can imagine, these rules can be tedious to implement and rule breakers are imminent. Luckily, the creator of the GitFlow method was aware of these issues and created a Git extension to automate the process of starting and finishing GitFlow branches. Developers here at Axosoft simply implemented this same idea; the difference being that we extended NodeGit rather than Git core.

How To Use It

Nodegit-flow starts with initialization.

const nodegit = require('nodegit-flow');
const config = nodegit.Flow.getConfigDefault();
nodegit.Flow.init(repo, config);

nodegit.Flow.init will add the following keys to the repo’s Git config:

  • gitflow.branch.master
  • gitflow.branch.develop
  • gitflow.prefix.feature
  • gitflow.prefix.hotfix
  • gitflow.prefix.release
  • gitflow.prefix.versionTag

These keys define the prefixes that GitFlow branches will have when starting a feature, hotfix, or release. They will also determine the local branch names nodegit-flow will associate with master and develop.

You can either choose to stick with the default config values provided with .getConfigDefault() or modify these values to fit your preference.

Here’s what your repo should look like after initialization.

Now let’s start a feature.

nodegit.Flow.startFeature(repo, 'myFeature');

We just created and checked out a branch called feature/myFeature that points to the same commit as develop. Now after creating a commit with vanilla NodeGit our graph will look something like this:

Once the feature is finished, it’s a one-liner to finish:

nodegit.Flow.finishFeature(repo, 'myFeature');

This has merged feature/myFeature into develop, checked out develop, and deleted feature/myFeature.

Nodegit-flow doesn’t only contain methods for features but also hotfixes, releases, and all other Git-flowy things.

By extending NodeGit to include GitFlow functions in a separate library, we give GitKraken a nice separation from GitFlow concerns, as well as offer a small example to developers who are curious about extending NodeGit.

While GitKraken is not open source, we regularly contribute to and publish tools that we use internally such as nodegit-flow. Other examples include NodeGit, libgit2, and Electron.

Like this post? Share it!

Share on facebook
Share on twitter
Share on linkedin

Read More Articles

What is Git Bash?

Learn what Git Bash is and how to download this Windows terminal. You will also see basic Git commands to use with Bash and why GitKraken is the better tool for Git.

Read More »
GitKraken 7.7.0 release

GitKraken v7.7: Git for Teams

Get ready for team collaboration in Git on a whole new level with the new Git team features and other improvements. Get a better Git workflow for your team with GitKraken.

Read More »

Make Git Easier, Safer &
More Powerful

with GitKraken