2011-04-16
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:
[alias]
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 https://hg.mozilla.org/mozilla-central
cd mozilla-central
hg import ~/mypatch.patch
hg push