Now there’s #gitflow in the IDE

After my talks about Git Flow in Hamburg and Essen, some developers (especially Andy) came up to me and were very skeptical if companies will be able to establish a workflow such as Git Flow without proper IDE integration. We at TWT were happy with the command line or a GUI client like Sourcetree. But I could understand Andys point of view.

Luckily, Opher Vishnia took up the gauntlet (as he purports the story himself ;)) and created a simple IntelliJ/PHPStorm Plugin that enables you to use Git Flow directly inside the IDE. You can get the Plugin via the Jetbrains Repository or from his Github Account. Thanks to Dominik for bringing it to my attention again after I had neglected to test this thoroughly…

After installation you can create features, releases and hotfixes from within the IDE.

gitflow-screenshot_14307

One problem that people seemed to have with the plugin on a Mac (myself included) was an error that prevented the plugin from working at all.

11:05:19.663: git flow feature start test-plugin
 git: 'flow' is not a git command. See 'git --help'.
 Did you mean one of these?
 reflog
 show

It turns out (from this support thread on Github) that the git executable and the git-flow executable must live in the same directory for the plugin to work. As my PHPStorm uses /usr/bin/git, I just symlinked my git-flow installation to /usr/bin:

cd /usr/bin
 sudo ln -s /usr/local/bin/git-flow-feature git-flow-feature
 sudo ln -s /usr/local/bin/git-flow-hotfix git-flow-hotfix
 sudo ln -s /usr/local/bin/git-flow-init git-flow-init
 sudo ln -s /usr/local/bin/git-flow-release git-flow-release
 sudo ln -s /usr/local/bin/git-flow-support git-flow-support
 sudo ln -s /usr/local/bin/git-flow-version git-flow-version
 sudo ln -s /usr/local/bin/gitflow-common gitflow-common
 sudo ln -s /usr/local/bin/gitflow-shFlags gitflow-shFlags

So that it looks like this afterwards:

ls -la git*
 -rwxr-xr-x 1 root wheel 14224 25 Nov 2013 21:11:19 git
 -rwxr-xr-x 1 root wheel 14256 25 Nov 2013 21:11:19 git-cvsserver
 lrwxr-xr-x 1 root wheel 23 21 Jan 2014 11:01:20 git-flow -> /usr/local/bin/git-flow
 lrwxr-xr-x 1 root wheel 30 21 Jan 2014 11:01:18 git-flow-common -> /usr/local/bin/git-flow-common
 lrwxr-xr-x 1 root wheel 31 21 Jan 2014 11:01:04 git-flow-feature -> /usr/local/bin/git-flow-feature
 lrwxr-xr-x 1 root wheel 30 21 Jan 2014 11:01:16 git-flow-hotfix -> /usr/local/bin/git-flow-hotfix
 lrwxr-xr-x 1 root wheel 28 21 Jan 2014 11:01:26 git-flow-init -> /usr/local/bin/git-flow-init
 lrwxr-xr-x 1 root wheel 31 21 Jan 2014 11:01:38 git-flow-release -> /usr/local/bin/git-flow-release
 lrwxr-xr-x 1 root wheel 31 21 Jan 2014 11:01:32 git-flow-shFlags -> /usr/local/bin/git-flow-shFlags
 lrwxr-xr-x 1 root wheel 31 21 Jan 2014 11:01:54 git-flow-support -> /usr/local/bin/git-flow-support
 lrwxr-xr-x 1 root wheel 31 21 Jan 2014 11:01:04 git-flow-version -> /usr/local/bin/git-flow-version
 -rwxr-xr-x 1 root wheel 14272 25 Nov 2013 21:11:19 git-receive-pack
 -rwxr-xr-x 1 root wheel 14256 25 Nov 2013 21:11:19 git-shell
 -rwxr-xr-x 1 root wheel 14272 25 Nov 2013 21:11:19 git-upload-archive
 -rwxr-xr-x 1 root wheel 14272 25 Nov 2013 21:11:19 git-upload-pack

After that, everything worked like a charm. We’ll use that for some time and I’ll report back how that works out for us.