One of my colleagues recently blogged about how the Confluence team avoids creating feature branches from bad commits. This blog post describes how to take the same idea one step further. The Problem I hate it when I make a trivial change, something like: $ git checkout master Switch to branch 'master' $ git checkout -b STASHDEV-1234-fix-capitalisation-of-Stash Switched to a new branch 'STASHDEV-1234-fix-capitalisation-of-Stash' .. change capitalization of one word in a template

Continue reading »

Git Flow Comes to Java

As a Java developer, I'm always trying to find ways to streamline all the mundane tasks that come along with development but aren't necessarily part of the actual code I'm trying to write. Managing source control and performing releases are definitely on that list. I use Git as my DVCS of choice, and while it certainly makes managing source changes a bit more, well, manageable, it can also feel like the "wild wild west" at times with random branches and commits flying around. Enter Git Flow.

Continue reading »

Or "I don't have TIME to understand Maven; I've got work to do!" A big part of developing a plugin is seeing it work inside the base product. For JIRA plugins, this is accomplished using the maven-jira-plugin. There are two options for getting your plugin to run inside the host application: adding it as a bundledArtifact, or as a pluginArtifact. If you examine the configuration of an established plugin, like GreenHopper or any of JIRA's bundled plugins, you might see multiple plugins

Continue reading »

git is an advanced tool. It features a philosophy that is dear to my heart: to treat developers as smart and responsible folks. This means that a lot of power is at your fingertips. The power to also shoot yourself in the foot - arguably with a titanium vest on - but shoot yourself nonetheless. The topic of this post is to confirm what my colleague Charles O'Farrell said very well in the ever popular "Why Git?" article some time ago: [...] Git is actually the safest of all the DVCS options. As

Continue reading »

Several weeks ago, I found myself refactoring some code a colleague of mine in Boulder wrote (I'm in San Francisco). Because I'm impatient, I wanted him to review my changes without going through the normal pomp and circumstance of what's now commonly referred to as a pull request or code review. I found myself wishing that I could just share my editor tab over the internet so that he could see what I was working on in real-time. Sure, I could have done one of the following: Invite him to a screen

Continue reading »

Extending git

While Mercurial has a well defined (albeit internal) API that can be used to write extensions that extend the functionality of Mercurial, git's extension model follows the Unix philosophy of composing small, simple programs to achieve a similar effect. What that means is that git "extensions" can be written in any language and by following a few simple rules it's still possible to add commands that appear as if they were built-in. Example: git activity To see the activity on all the branches in

Continue reading »