Open Source Git Workflow
Contributing to Open Source projects in your free time can be more difficult when you need to pass your patches by a reviewer at work before sending them to the project. It pays off to invest a little time into making this workflow more streamlined. Since most projects use Git these days, I use that:
Optional: Change your email address
If you want to submit patches using your work mail address, start by configuring it in the project you're patching:
git config user.email 'me@work.example.com' git config user.name 'My name'
All further local commits will use this email address.
Make changes and commit them locally
This is the hardest step. It involves programming. ;)
Create patches you want to submit
Assuming your project accepts patches on a mailing list.
git format-patch -3
The -3 will create one patch file for each of the last 3 commits.
Patch files are in mbox format and can be hand-edited before sending them out. Make sure they look like the mails you want to send out in the end.
Fire the .patch files off to work.
A simple way is to send them off via mail.
On Arch Linux using the s-nail client, you can do it on the command line like so:
$ mail -A mailconfig -s "My newest patches" \
-a 0001-Fixes.patch \
-a 0002-More-fixes.patch \
-a 0003-Even-more-fixes.patch \
me@work.example.com
My ~/.mailrc is configured to use my private address:
account mailconfig {
# Never ever use unencrypted SMTP!
# Configure authentication and encryption
# according to mail(1)'s entry on smtp-auth.
set smtp=smtp://smtp-host:25
set from=me@private.example.com
}
When at work
Forward the mail with the .patch files to the person responsible for
approving the patch, and wait for response.
Sending the patch
Assuming a patch has been approved, send it out in git like this:
git send-email --to='devel-ml@project.example.com' \
0001-Fixes.patch
This assumes that git is configured again to use the right SMTP server;
This can be done again using git config:
# Never ever use unencrypted SMTP! # See authentication and encryption options in git-send-email(1). # The man page has an example for the GMail SMTP server at the bottom. git config --global sendemail.smtpserver smtp-host.example.com git config --global sendemail.smtpserverport = 25