format.attach::
	Enable multipart/mixed attachments as the default for
	'format-patch'.  The value can also be a double quoted string
	which will enable attachments as the default and set the
	value as the boundary.  See the --attach option in
	linkgit:git-format-patch[1].  To countermand an earlier
	value, set it to an empty string.

format.from::
	Provides the default value for the `--from` option to format-patch.
	Accepts a boolean value, or a name and email address.  If false,
	format-patch defaults to `--no-from`, using commit authors directly in
	the "From:" field of patch mails.  If true, format-patch defaults to
	`--from`, using your committer identity in the "From:" field of patch
	mails and including a "From:" field in the body of the patch mail if
	different.  If set to a non-boolean value, format-patch uses that
	value instead of your committer identity.  Defaults to false.

format.forceInBodyFrom::
	Provides the default value for the `--[no-]force-in-body-from`
	option to format-patch.  Defaults to false.

format.numbered::
	A boolean which can enable or disable sequence numbers in patch
	subjects.  It defaults to "auto" which enables it only if there
	is more than one patch.  It can be enabled or disabled for all
	messages by setting it to "true" or "false".  See --numbered
	option in linkgit:git-format-patch[1].

format.headers::
	Additional email headers to include in a patch to be submitted
	by mail.  See linkgit:git-format-patch[1].

format.to::
format.cc::
	Additional recipients to include in a patch to be submitted
	by mail.  See the --to and --cc options in
	linkgit:git-format-patch[1].

format.subjectPrefix::
	The default for format-patch is to output files with the '[PATCH]'
	subject prefix. Use this variable to change that prefix.

format.coverFromDescription::
	The default mode for format-patch to determine which parts of
	the cover letter will be populated using the branch's
	description. See the `--cover-from-description` option in
	linkgit:git-format-patch[1].

format.signature::
	The default for format-patch is to output a signature containing
	the Git version number. Use this variable to change that default.
	Set this variable to the empty string ("") to suppress
	signature generation.

format.signatureFile::
	Works just like format.signature except the contents of the
	file specified by this variable will be used as the signature.

format.suffix::
	The default for format-patch is to output files with the suffix
	`.patch`. Use this variable to change that suffix (make sure to
	include the dot if you want it).

format.encodeEmailHeaders::
	Encode email headers that have non-ASCII characters with
	"Q-encoding" (described in RFC 2047) for email transmission.
	Defaults to true.

format.pretty::
	The default pretty format for log/show/whatchanged command.
	See linkgit:git-log[1], linkgit:git-show[1],
	linkgit:git-whatchanged[1].

format.thread::
	The default threading style for 'git format-patch'.  Can be
	a boolean value, or `shallow` or `deep`.  `shallow` threading
	makes every mail a reply to the head of the series,
	where the head is chosen from the cover letter, the
	`--in-reply-to`, and the first patch mail, in this order.
	`deep` threading makes every mail a reply to the previous one.
	A true boolean value is the same as `shallow`, and a false
	value disables threading.

format.signOff::
	A boolean value which lets you enable the `-s/--signoff` option of
	format-patch by default. *Note:* Adding the `Signed-off-by` trailer to a
	patch should be a conscious act and means that you certify you have
	the rights to submit this work under the same open source license.
	Please see the 'SubmittingPatches' document for further discussion.

format.coverLetter::
	A boolean that controls whether to generate a cover-letter when
	format-patch is invoked, but in addition can be set to "auto", to
	generate a cover-letter only when there's more than one patch.
	Default is false.

format.outputDirectory::
	Set a custom directory to store the resulting files instead of the
	current working directory. All directory components will be created.

format.filenameMaxLength::
	The maximum length of the output filenames generated by the
	`format-patch` command; defaults to 64.  Can be overridden
	by the `--filename-max-length=<n>` command line option.

format.useAutoBase::
	A boolean value which lets you enable the `--base=auto` option of
	format-patch by default. Can also be set to "whenAble" to allow
	enabling `--base=auto` if a suitable base is available, but to skip
	adding base info otherwise without the format dying.

format.notes::
	Provides the default value for the `--notes` option to
	format-patch. Accepts a boolean value, or a ref which specifies
	where to get notes. If false, format-patch defaults to
	`--no-notes`. If true, format-patch defaults to `--notes`. If
	set to a non-boolean value, format-patch defaults to
	`--notes=<ref>`, where `ref` is the non-boolean value. Defaults
	to false.
+
If one wishes to use the ref `ref/notes/true`, please use that literal
instead.
+
This configuration can be specified multiple times in order to allow
multiple notes refs to be included. In that case, it will behave
similarly to multiple `--[no-]notes[=]` options passed in. That is, a
value of `true` will show the default notes, a value of `<ref>` will
also show notes from that notes ref and a value of `false` will negate
previous configurations and not show notes.
+
For example,
+
------------
[format]
	notes = true
	notes = foo
	notes = false
	notes = bar
------------
+
will only show notes from `refs/notes/bar`.

format.mboxrd::
	A boolean value which enables the robust "mboxrd" format when
	`--stdout` is in use to escape "^>+From " lines.

format.noprefix::
	If set, do not show any source or destination prefix in patches.
	This is equivalent to the `diff.noprefix` option used by `git
	diff` (but which is not respected by `format-patch`). Note that
	by setting this, the receiver of any patches you generate will
	have to apply them using the `-p0` option.
