Bluish Coder

Programming Languages, Martials Arts and Computers. The Weblog of Chris Double.


My Git Workflow for Mozilla Development

Since my post on converting mozilla-central to git I've had a few requests about what my git workflow is for Mozilla Development.

When working on bugs I'll create a git branch for development. The workflow in this branch looks like:

git fetch origin
git checkout -b bug/123456 origin/master
...make changes...
git commit
...make more changes...
git commit

Occasionally I'll want to merge with the latest code from mozilla-central. I do this by rebasing my changes on top of the latest trunk code:

git fetch origin
git rebase origin/master

I'll often have multiple temporary branches as I work on different ideas during the fix. I find being able to diff between the branches, cherry pick patches, etc useful.

When I've finished with the fix and want to generate a patch for review I rebase on top of trunk and squash all my commits down into one patch. I do this use git's interactive rebase:

git fetch origin
git rebase -i origin/master
...squash commits into one commit and set commit message to my checkin commit message...
git hgp >~/mypatch.patch

The last command, git hgp, uses an alias I got from Rafael Espindola's Blog. You can install this alias by adding the following to your ~/.gitconfig file:

hgp = show --format=\"From: %an <%ae>%n%s%n%b\" -U8

The adds an 'hgp' git command that does the same as git show but includes a header for the committers name. This allows an hg import of the patch to include the correct patch authors details which is useful if you use the checkin-needed keyword for others to commit the patch.

I attach the patch file to the bug for review. If I get review comments I then go back to the git branch and make the necessary changes. Regenerating the patch involves repeating the steps above.

When the patch needs to be committed to mozilla-central it can be imported and pushed directly using mercurial:

hg clone
cd mozilla-central
hg import ~/mypatch.patch
hg push


This site is accessable over tor as hidden service mh7mkfvezts5j6yu.onion, or Freenet using key: