From the very beginning, the openATTIC source code repository was managed using the Mercurial distributed source control management tool.
Our code is hosted on BitBucket which provides for a
tight integration with our public Jira issue tracker.
Unfortunately, Mercurial is somewhat less flexible than git when it comes to
using branches to separate ongoing development work (which is a workflow
encouraged by using Jira/BitBucket) - there is a tight relationship between
branch names across repositories and it's impossible to delete branches once
they have been created or merged. Sure, we could have probably used Mercurial
bookmarks for this, but they
are not well supported by the Jira and BitBucket workflows we are using (and are
more designed to be used locally, not across multiple repositories).
In addition to that, we have a growing developer/contributor base that simply is
more familiar with git than Mercurial nowadays. Switching to git could
potentially help us attracting a bigger number of developers.
These were the main reasons for our decision to convert. Thankfully, with the
help of the fast-export utility, the
actual conversion was straightforward and painless. It automatically renamed the
former default branch to master, to be conforming to established git
practices. We will revisit the branch naming conventions in a following step.
There was some cleanup work involved afterwards, to remove all the obsolete
branches that were created by Mercurial when merging pull requests.
Additionally, all pending pull requests from the previous
Mercurial repo had to be re-created, but that provided us with a good
opportunity to clean up the commit history before submitting them. Going
forward, we intend to also make use of the more advanced features of git like
rebasing or squashing change sets, to have a cleaner revision history with less
noise.
We're now in the process of updating our documentation and build scripts to support this change, but
this should not take us too long to resolve.