Straight from the dump scripts:
--complete-insert --hex-blob --skip-add-drop-table --single-transaction --order-by-primary --skip-dump-date
--force # so mysqldump does not bail out on invalid view
--no-create-info # do not emit CREATE TABLE, because its AUTO_INCREMENT changes often, and would create unnecessary differences
where the `order-by-primary' is probably the most important, and `skip-dump-date' sure helps.
Also, I make a big deal out of spreading every large table into a set of smaller dumps, each with fixed number of rows, sorted by record ID. For various reasons, most of our tables are usually appended-to, and changes (UPDATE, DELETE) are less common. Thanks to this, changes are usually confined to the last file of a set (with newes records), and other files stay mostly unchanged -- and so they pack the best.
--where="_rowid >= $FROM AND < $TO"
I try to keep individual files down to about 8...16MB, 32MB max, so git's repack (upon pull/push/automatic gc) doesn't take too much of time nor RAM.