I’ve been spending a lot of time massaging a branch of patches and other assorted bits and pieces for QEMU user mode on github
This led me down the path of being a good git user and contributor, so I’ll leave these notes for myself and others in the event you come into a situation where you need FreeBSD to play nice with people who are very git(1) centric.
After an update by wxs@freebsd.org to the devel/git port, you can now install git(1) and have it work out of the box. The most frustrating thing, after using git for like 5 minutes, is to figure out how to extract a patch out of it and send it all pretty-like to the mailing list(s) that would be consuming the patch.
In its simplest incarnation, you can simply reference a commit hash and us it to generate a patch via git format-patch, but this will give you the entire commit diff between the referenced version and HEAD. This, in my case generated approximately 3000 patch files.
e.g. git format-patch –output-directory ~/patches –to=”qemu-devel@nongnu.org” c60a1f1b2823a4937535ecb97ddf21d06cfd3d3b
What I want, is a diff of one revision, which requires a start and ending hash:
format-patch –output-directory ~/patches –to=”qemu-devel@nongnu.org” c60a1f1b2823a4937535ecb97ddf21d06cfd3d3b…c6ad44bb288c1fe85d4695b6a48d89823823552b
Now I send this to the mailing lists via my client. Here is where I kind of head-desked a bit. If you are like me and run a mail server yourself and you use SSL with self-signed certs, then this little bit if for you. I lost about an hour trying to figure this little bit out.
The way to dump patches from your patch director (~/patches) is to use:
git send-email patches/*
This will use the following variables in your git environment:
sendemail.smtpserver=mail.ignoranthack.me
sendemail.smtpencryption=ssl
sendemail.smtpuser=sbruno@ignoranthack.me
sendemail.smtpserverport=465
sendemail.smtpsslcertpath=
sendemail.annotate=yes
Notice the empty “sendemail.smtpcertpath” variable. Without that set to EMPTY, git would repeatedly fail on the self-signed cert that I use. So, I’m pretty sure something still isn’t setup correctly. However, it must be set to EMPTY and not undefined. Else, you will repeatedly fail with certificate validation errors.