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
[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