Merge branch 'jc/maint-combined-diff-work-tree' into maint
[gitweb.git] / Documentation / git-send-email.txt
index e2437f30ca1314dc00a55f72c4e2a325cc75c7b6..327233c85b4cb9af07b8866b055a83d25b21b569 100644 (file)
@@ -8,82 +8,162 @@ git-send-email - Send a collection of patches as emails
 
 SYNOPSIS
 --------
-'git send-email' [options] <file|directory> [... file|directory]
-
+[verse]
+'git send-email' [options] <file|directory|rev-list options>...
 
 
 DESCRIPTION
 -----------
 Takes the patches given on the command line and emails them out.
+Patches can be specified as files, directories (which will send all
+files in the directory), or directly as a revision list.  In the
+last case, any format accepted by linkgit:git-format-patch[1] can
+be passed to git send-email.
 
 The header of the email is configurable by command line options.  If not
 specified on the command line, the user will be prompted with a ReadLine
 enabled interface to provide the necessary information.
 
+There are two formats accepted for patch files:
+
+1. mbox format files
++
+This is what linkgit:git-format-patch[1] generates.  Most headers and MIME
+formatting are ignored.
+
+2. The original format used by Greg Kroah-Hartman's 'send_lots_of_email.pl'
+script
++
+This format expects the first line of the file to contain the "Cc:" value
+and the "Subject:" of the message as the second line.
+
+
 OPTIONS
 -------
-The options available are:
 
---bcc::
-       Specify a "Bcc:" value for each email.
+Composing
+~~~~~~~~~
+
+--annotate::
+       Review and edit each patch you're about to send. See the
+       CONFIGURATION section for 'sendemail.multiedit'.
+
+--bcc=<address>::
+       Specify a "Bcc:" value for each email. Default is the value of
+       'sendemail.bcc'.
 +
 The --bcc option must be repeated for each user you want on the bcc list.
 
---cc::
+--cc=<address>::
        Specify a starting "Cc:" value for each email.
+       Default is the value of 'sendemail.cc'.
 +
 The --cc option must be repeated for each user you want on the cc list.
 
---cc-cmd::
-       Specify a command to execute once per patch file which
-       should generate patch file specific "Cc:" entries.
-       Output of this command must be single email address per line.
-       Default is the value of 'sendemail.cccmd' configuration value.
-
---chain-reply-to::
---no-chain-reply-to::
-       If this is set, each email will be sent as a reply to the previous
-       email sent.  If disabled with "--no-chain-reply-to", all emails after
-       the first will be sent as replies to the first email sent.  When using
-       this, it is recommended that the first file given be an overview of the
-       entire patch series.
-       Default is the value of the 'sendemail.chainreplyto' configuration
-       value; if that is unspecified, default to --chain-reply-to.
-
 --compose::
-       Use $GIT_EDITOR, core.editor, $VISUAL, or $EDITOR to edit an
-       introductory message for the patch series.
-
---from::
-       Specify the sender of the emails.  This will default to
-       the value GIT_COMMITTER_IDENT, as returned by "git var -l".
-       The user will still be prompted to confirm this entry.
-
---in-reply-to::
-       Specify the contents of the first In-Reply-To header.
-       Subsequent emails will refer to the previous email
-       instead of this if --chain-reply-to is set (the default)
+       Invoke a text editor (see GIT_EDITOR in linkgit:git-var[1])
+       to edit an introductory message for the patch series.
++
+When '--compose' is used, git send-email will use the From, Subject, and
+In-Reply-To headers specified in the message. If the body of the message
+(what you type after the headers and a blank line) only contains blank
+(or GIT: prefixed) lines the summary won't be sent, but From, Subject,
+and In-Reply-To headers will be used unless they are removed.
++
+Missing From or In-Reply-To headers will be prompted for.
++
+See the CONFIGURATION section for 'sendemail.multiedit'.
+
+--from=<address>::
+       Specify the sender of the emails.  If not specified on the command line,
+       the value of the 'sendemail.from' configuration option is used.  If
+       neither the command line option nor 'sendemail.from' are set, then the
+       user will be prompted for the value.  The default for the prompt will be
+       the value of GIT_AUTHOR_IDENT, or GIT_COMMITTER_IDENT if that is not
+       set, as returned by "git var -l".
+
+--in-reply-to=<identifier>::
+       Make the first mail (or all the mails with `--no-thread`) appear as a
+       reply to the given Message-Id, which avoids breaking threads to
+       provide a new patch series.
+       The second and subsequent emails will be sent as replies according to
+       the `--[no]-chain-reply-to` setting.
++
+So for example when `--thread` and `--no-chain-reply-to` are specified, the
+second and subsequent patches will be replies to the first one like in the
+illustration below where `[PATCH v2 0/3]` is in reply to `[PATCH 0/2]`:
++
+  [PATCH 0/2] Here is what I did...
+    [PATCH 1/2] Clean up and tests
+    [PATCH 2/2] Implementation
+    [PATCH v2 0/3] Here is a reroll
+      [PATCH v2 1/3] Clean up
+      [PATCH v2 2/3] New tests
+      [PATCH v2 3/3] Implementation
++
+Only necessary if --compose is also set.  If --compose
+is not set, this will be prompted for.
+
+--subject=<string>::
+       Specify the initial subject of the email thread.
        Only necessary if --compose is also set.  If --compose
        is not set, this will be prompted for.
 
---signed-off-by-cc::
---no-signed-off-by-cc::
-        If this is set, add emails found in Signed-off-by: or Cc: lines to the
-        cc list.
-        Default is the value of 'sendemail.signedoffcc' configuration value;
-        if that is unspecified, default to --signed-off-by-cc.
+--to=<address>::
+       Specify the primary recipient of the emails generated. Generally, this
+       will be the upstream maintainer of the project involved. Default is the
+       value of the 'sendemail.to' configuration value; if that is unspecified,
+       and --to-cmd is not specified, this will be prompted for.
++
+The --to option must be repeated for each user you want on the to list.
 
---quiet::
-       Make git-send-email less verbose.  One line per email should be
-       all that is output.
+--8bit-encoding=<encoding>::
+       When encountering a non-ASCII message or subject that does not
+       declare its encoding, add headers/quoting to indicate it is
+       encoded in <encoding>.  Default is the value of the
+       'sendemail.assume8bitEncoding'; if that is unspecified, this
+       will be prompted for if any non-ASCII files are encountered.
++
+Note that no attempts whatsoever are made to validate the encoding.
 
---identity::
-       A configuration identity. When given, causes values in the
-       'sendemail.<identity>' subsection to take precedence over
-       values in the 'sendemail' section. The default identity is
-       the value of 'sendemail.identity'.
 
---smtp-server::
+Sending
+~~~~~~~
+
+--envelope-sender=<address>::
+       Specify the envelope sender used to send the emails.
+       This is useful if your default address is not the address that is
+       subscribed to a list. In order to use the 'From' address, set the
+       value to "auto". If you use the sendmail binary, you must have
+       suitable privileges for the -f parameter.  Default is the value of the
+       'sendemail.envelopesender' configuration variable; if that is
+       unspecified, choosing the envelope sender is left to your MTA.
+
+--smtp-encryption=<encryption>::
+       Specify the encryption to use, either 'ssl' or 'tls'.  Any other
+       value reverts to plain SMTP.  Default is the value of
+       'sendemail.smtpencryption'.
+
+--smtp-domain=<FQDN>::
+       Specifies the Fully Qualified Domain Name (FQDN) used in the
+       HELO/EHLO command to the SMTP server.  Some servers require the
+       FQDN to match your IP address.  If not set, git send-email attempts
+       to determine your FQDN automatically.  Default is the value of
+       'sendemail.smtpdomain'.
+
+--smtp-pass[=<password>]::
+       Password for SMTP-AUTH. The argument is optional: If no
+       argument is specified, then the empty string is used as
+       the password. Default is the value of 'sendemail.smtppass',
+       however '--smtp-pass' always overrides this value.
++
+Furthermore, passwords need not be specified in configuration files
+or on the command line. If a username has been specified (with
+'--smtp-user' or a 'sendemail.smtpuser'), but no password has been
+specified (with '--smtp-pass' or 'sendemail.smtppass'), then the
+user is prompted for a password while the input is masked for privacy.
+
+--smtp-server=<host>::
        If set, specifies the outgoing SMTP server to use (e.g.
        `smtp.example.com` or a raw IP address).  Alternatively it can
        specify a full pathname of a sendmail-like program instead;
@@ -93,111 +173,162 @@ The --cc option must be repeated for each user you want on the cc list.
        `/usr/lib/sendmail` if such program is available, or
        `localhost` otherwise.
 
---smtp-server-port::
+--smtp-server-port=<port>::
        Specifies a port different from the default port (SMTP
-       servers typically listen to smtp port 25 and ssmtp port
-       465).
+       servers typically listen to smtp port 25, but may also listen to
+       submission port 587, or the common SSL smtp port 465);
+       symbolic port names (e.g. "submission" instead of 587)
+       are also accepted. The port can also be set with the
+       'sendemail.smtpserverport' configuration variable.
+
+--smtp-server-option=<option>::
+       If set, specifies the outgoing SMTP server option to use.
+       Default value can be specified by the 'sendemail.smtpserveroption'
+       configuration option.
++
+The --smtp-server-option option must be repeated for each option you want
+to pass to the server. Likewise, different lines in the configuration files
+must be used for each option.
 
---smtp-user::
-       Username for SMTP-AUTH. In place of this option, the following
-       configuration variables can be specified:
+--smtp-ssl::
+       Legacy alias for '--smtp-encryption ssl'.
+
+--smtp-user=<user>::
+       Username for SMTP-AUTH. Default is the value of 'sendemail.smtpuser';
+       if a username is not specified (with '--smtp-user' or 'sendemail.smtpuser'),
+       then authentication is not attempted.
+
+
+Automating
+~~~~~~~~~~
+
+--to-cmd=<command>::
+       Specify a command to execute once per patch file which
+       should generate patch file specific "To:" entries.
+       Output of this command must be single email address per line.
+       Default is the value of 'sendemail.tocmd' configuration value.
+
+--cc-cmd=<command>::
+       Specify a command to execute once per patch file which
+       should generate patch file specific "Cc:" entries.
+       Output of this command must be single email address per line.
+       Default is the value of 'sendemail.cccmd' configuration value.
+
+--[no-]chain-reply-to::
+       If this is set, each email will be sent as a reply to the previous
+       email sent.  If disabled with "--no-chain-reply-to", all emails after
+       the first will be sent as replies to the first email sent.  When using
+       this, it is recommended that the first file given be an overview of the
+       entire patch series. Disabled by default, but the 'sendemail.chainreplyto'
+       configuration variable can be used to enable it.
+
+--identity=<identity>::
+       A configuration identity. When given, causes values in the
+       'sendemail.<identity>' subsection to take precedence over
+       values in the 'sendemail' section. The default identity is
+       the value of 'sendemail.identity'.
+
+--[no-]signed-off-by-cc::
+       If this is set, add emails found in Signed-off-by: or Cc: lines to the
+       cc list. Default is the value of 'sendemail.signedoffbycc' configuration
+       value; if that is unspecified, default to --signed-off-by-cc.
+
+--suppress-cc=<category>::
+       Specify an additional category of recipients to suppress the
+       auto-cc of:
 +
 --
-               * sendemail.smtpuser
-               * sendemail.<identity>.smtpuser (see sendemail.identity).
+- 'author' will avoid including the patch author
+- 'self' will avoid including the sender
+- 'cc' will avoid including anyone mentioned in Cc lines in the patch header
+  except for self (use 'self' for that).
+- 'bodycc' will avoid including anyone mentioned in Cc lines in the
+  patch body (commit message) except for self (use 'self' for that).
+- 'sob' will avoid including anyone mentioned in Signed-off-by lines except
+   for self (use 'self' for that).
+- 'cccmd' will avoid running the --cc-cmd.
+- 'body' is equivalent to 'sob' + 'bodycc'
+- 'all' will suppress all auto cc values.
 --
 +
-However, --smtp-user always overrides these variables.
+Default is the value of 'sendemail.suppresscc' configuration value; if
+that is unspecified, default to 'self' if --suppress-from is
+specified, as well as 'body' if --no-signed-off-cc is specified.
+
+--[no-]suppress-from::
+       If this is set, do not add the From: address to the cc: list.
+       Default is the value of 'sendemail.suppressfrom' configuration
+       value; if that is unspecified, default to --no-suppress-from.
+
+--[no-]thread::
+       If this is set, the In-Reply-To and References headers will be
+       added to each email sent.  Whether each mail refers to the
+       previous email (`deep` threading per 'git format-patch'
+       wording) or to the first email (`shallow` threading) is
+       governed by "--[no-]chain-reply-to".
 +
-If a username is not specified (with --smtp-user or a
-configuration variable), then authentication is not attempted.
-
---smtp-pass::
-       Password for SMTP-AUTH. The argument is optional: If no
-       argument is specified, then the empty string is used as
-       the password.
+If disabled with "--no-thread", those headers will not be added
+(unless specified with --in-reply-to).  Default is the value of the
+'sendemail.thread' configuration value; if that is unspecified,
+default to --thread.
 +
-In place of this option, the following configuration variables
-can be specified:
+It is up to the user to ensure that no In-Reply-To header already
+exists when 'git send-email' is asked to add it (especially note that
+'git format-patch' can be configured to do the threading itself).
+Failure to do so may not produce the expected result in the
+recipient's MUA.
+
+
+Administering
+~~~~~~~~~~~~~
+
+--confirm=<mode>::
+       Confirm just before sending:
 +
 --
-               * sendemail.smtppass
-               * sendemail.<identity>.smtppass (see sendemail.identity).
+- 'always' will always confirm before sending
+- 'never' will never confirm before sending
+- 'cc' will confirm before sending when send-email has automatically
+  added addresses from the patch to the Cc list
+- 'compose' will confirm before sending the first message when using --compose.
+- 'auto' is equivalent to 'cc' + 'compose'
 --
 +
-However, --smtp-pass always overrides these variables.
-+
-Furthermore, passwords need not be specified in configuration files
-or on the command line. If a username has been specified (with
---smtp-user or a configuration variable), but no password has been
-specified (with --smtp-pass or a configuration variable), then the
-user is prompted for a password while the input is masked for privacy.
-
---smtp-encryption::
-       Specify the encryption to use, either 'ssl' or 'tls'.  Any other
-       value reverts to plain SMTP.  Default is the value of
-       'sendemail.smtpencryption'.
-
---smtp-ssl::
-       Legacy alias for '--smtp-encryption=ssl'.
-
---subject::
-       Specify the initial subject of the email thread.
-       Only necessary if --compose is also set.  If --compose
-       is not set, this will be prompted for.
-
---suppress-from::
---no-suppress-from::
-        If this is set, do not add the From: address to the cc: list.
-        Default is the value of 'sendemail.suppressfrom' configuration value;
-        if that is unspecified, default to --no-suppress-from.
-
---suppress-cc::
-       Specify an additional category of recipients to suppress the
-       auto-cc of.  'self' will avoid including the sender, 'author' will
-       avoid including the patch author, 'cc' will avoid including anyone
-       mentioned in Cc lines in the patch, 'sob' will avoid including
-       anyone mentioned in Signed-off-by lines, and 'cccmd' will avoid
-       running the --cc-cmd.  'all' will suppress all auto cc values.
-       Default is the value of 'sendemail.suppresscc' configuration value;
-       if that is unspecified, default to 'self' if --suppress-from is
-       specified, as well as 'sob' if --no-signed-off-cc is specified.
-
---thread::
---no-thread::
-       If this is set, the In-Reply-To header will be set on each email sent.
-       If disabled with "--no-thread", no emails will have the In-Reply-To
-       header set.
-       Default is the value of the 'sendemail.thread' configuration value;
-       if that is unspecified, default to --thread.
+Default is the value of 'sendemail.confirm' configuration value; if that
+is unspecified, default to 'auto' unless any of the suppress options
+have been specified, in which case default to 'compose'.
 
 --dry-run::
        Do everything except actually send the emails.
 
---envelope-sender::
-       Specify the envelope sender used to send the emails.
-       This is useful if your default address is not the address that is
-       subscribed to a list. If you use the sendmail binary, you must have
-       suitable privileges for the -f parameter.
-
---to::
-       Specify the primary recipient of the emails generated.
-       Generally, this will be the upstream maintainer of the
-       project involved.
-       Default is the value of the 'sendemail.to' configuration value;
-       if that is unspecified, this will be prompted for.
+--[no-]format-patch::
+       When an argument may be understood either as a reference or as a file name,
+       choose to understand it as a format-patch argument ('--format-patch')
+       or as a file name ('--no-format-patch'). By default, when such a conflict
+       occurs, git send-email will fail.
+
+--quiet::
+       Make git-send-email less verbose.  One line per email should be
+       all that is output.
+
+--[no-]validate::
+       Perform sanity checks on patches.
+       Currently, validation means the following:
 +
-The --to option must be repeated for each user you want on the to list.
+--
+               *       Warn of patches that contain lines longer than 998 characters; this
+                       is due to SMTP limits as described by http://www.ietf.org/rfc/rfc2821.txt.
+--
++
+Default is the value of 'sendemail.validate'; if this is not set,
+default to '--validate'.
+
+--force::
+       Send emails even if safety checks would prevent it.
 
 
 CONFIGURATION
 -------------
-sendemail.identity::
-       The default configuration identity. When specified,
-       'sendemail.<identity>.<item>' will have higher precedence than
-       'sendemail.<item>'. This is useful to declare multiple SMTP
-       identities and to hoist sensitive authentication information
-       out of the repository and into the global configuration file.
 
 sendemail.aliasesfile::
        To avoid typing long email addresses, point this to one or more
@@ -205,51 +336,45 @@ sendemail.aliasesfile::
 
 sendemail.aliasfiletype::
        Format of the file(s) specified in sendemail.aliasesfile. Must be
-       one of 'mutt', 'mailrc', 'pine', or 'gnus'.
+       one of 'mutt', 'mailrc', 'pine', 'elm', or 'gnus'.
 
-sendemail.to::
-       Email address (or alias) to always send to.
+sendemail.multiedit::
+       If true (default), a single editor instance will be spawned to edit
+       files you have to edit (patches when '--annotate' is used, and the
+       summary when '--compose' is used). If false, files will be edited one
+       after the other, spawning a new editor each time.
 
-sendemail.cccmd::
-       Command to execute to generate per patch file specific "Cc:"s.
+sendemail.confirm::
+       Sets the default for whether to confirm before sending. Must be
+       one of 'always', 'never', 'cc', 'compose', or 'auto'. See '--confirm'
+       in the previous section for the meaning of these values.
 
-sendemail.bcc::
-       Email address (or alias) to always bcc.
-
-sendemail.chainreplyto::
-       Boolean value specifying the default to the '--chain_reply_to'
-       parameter.
-
-sendemail.smtpserver::
-       Default SMTP server to use.
-
-sendemail.smtpserverport::
-       Default SMTP server port to use.
-
-sendemail.smtpuser::
-       Default SMTP-AUTH username.
-
-sendemail.smtppass::
-       Default SMTP-AUTH password.
+EXAMPLE
+-------
+Use gmail as the smtp server
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+To use 'git send-email' to send your patches through the GMail SMTP server,
+edit ~/.gitconfig to specify your account settings:
 
-sendemail.smtpencryption::
-       Default encryption method.  Use 'ssl' for SSL (and specify an
-       appropriate port), or 'tls' for TLS.  Takes precedence over
-       'smtpssl' if both are specified.
+       [sendemail]
+               smtpencryption = tls
+               smtpserver = smtp.gmail.com
+               smtpuser = yourname@gmail.com
+               smtpserverport = 587
 
-sendemail.smtpssl::
-       Legacy boolean that sets 'smtpencryption=ssl' if enabled.
+Once your commits are ready to be sent to the mailing list, run the
+following commands:
 
-Author
-------
-Written by Ryan Anderson <ryan@michonline.com>
+       $ git format-patch --cover-letter -M origin/master -o outgoing/
+       $ edit outgoing/0000-*
+       $ git send-email outgoing/*
 
-git-send-email is originally based upon
-send_lots_of_email.pl by Greg Kroah-Hartman.
+Note: the following perl modules are required
+      Net::SMTP::SSL, MIME::Base64 and Authen::SASL
 
-Documentation
---------------
-Documentation by Ryan Anderson
+SEE ALSO
+--------
+linkgit:git-format-patch[1], linkgit:git-imap-send[1], mbox(5)
 
 GIT
 ---