7ef0d62730
Merge commit '1b593e1ea4d2af0f6444d9a7788d5d99abd6fde5' as 'third_party/git'
145 lines
6 KiB
Text
145 lines
6 KiB
Text
git-multimail is close to, but not exactly, a plug-in replacement for
|
|
the old Git project script contrib/hooks/post-receive-email. This
|
|
document describes the differences and explains how to configure
|
|
git-multimail to get behavior closest to that of post-receive-email.
|
|
|
|
If you are in a hurry
|
|
=====================
|
|
|
|
A script called migrate-mailhook-config is included with
|
|
git-multimail. If you run this script within a Git repository that is
|
|
configured to use post-receive-email, it will convert the
|
|
configuration settings into the approximate equivalent settings for
|
|
git-multimail. For more information, run
|
|
|
|
migrate-mailhook-config --help
|
|
|
|
|
|
Configuration differences
|
|
=========================
|
|
|
|
* The names of the config options for git-multimail are in namespace
|
|
"multimailhook.*" instead of "hooks.*". (Editorial comment:
|
|
post-receive-email should never have used such a generic top-level
|
|
namespace.)
|
|
|
|
* In emails about new annotated tags, post-receive-email includes a
|
|
shortlog of all changes since the previous annotated tag. To get
|
|
this behavior with git-multimail, you need to set
|
|
multimailhook.announceshortlog to true:
|
|
|
|
git config multimailhook.announceshortlog true
|
|
|
|
* multimailhook.commitlist -- This is a new configuration variable.
|
|
Recipients listed here will receive a separate email for each new
|
|
commit. However, if this variable is *not* set, it defaults to the
|
|
value of multimailhook.mailinglist. Therefore, if you *don't* want
|
|
the members of multimailhook.mailinglist to receive one email per
|
|
commit, then set this value to the empty string:
|
|
|
|
git config multimailhook.commitlist ''
|
|
|
|
* multimailhook.emailprefix -- If this value is not set, then the
|
|
subjects of generated emails are prefixed with the short name of the
|
|
repository enclosed in square brackets; e.g., "[myrepo]".
|
|
post-receive-email defaults to prefix "[SCM]" if this option is not
|
|
set. So if you were using the old default and want to retain it
|
|
(for example, to avoid having to change your email filters), set
|
|
this variable explicitly to the old value:
|
|
|
|
git config multimailhook.emailprefix "[SCM]"
|
|
|
|
* The "multimailhook.showrev" configuration option is not supported.
|
|
Its main use is obsoleted by the one-email-per-commit feature of
|
|
git-multimail.
|
|
|
|
|
|
Other differences
|
|
=================
|
|
|
|
This section describes other differences in the behavior of
|
|
git-multimail vs. post-receive-email. For full details, please refer
|
|
to the main README file:
|
|
|
|
* One email per commit. For each reference change, the script first
|
|
outputs one email summarizing the reference change (including
|
|
one-line summaries of the new commits), then it outputs a separate
|
|
email for each new commit that was introduced, including patches.
|
|
These one-email-per-commit emails go to the addresses listed in
|
|
multimailhook.commitlist. post-receive-email sends only one email
|
|
for each *reference* that is changed, no matter how many commits
|
|
were added to the reference.
|
|
|
|
* Better algorithm for detecting new commits. post-receive-email
|
|
processes one reference change at a time, which causes it to fail to
|
|
describe new commits that were included in multiple branches. For
|
|
example, if a single push adds the "*" commits in the diagram below,
|
|
then post-receive-email would never include the details of the two
|
|
commits that are common to "master" and "branch" in its
|
|
notifications.
|
|
|
|
o---o---o---*---*---* <-- master
|
|
\
|
|
*---* <-- branch
|
|
|
|
git-multimail analyzes all reference modifications to determine
|
|
which commits were not present before the change, therefore avoiding
|
|
that error.
|
|
|
|
* In reference change emails, git-multimail tells which commits have
|
|
been added to the reference vs. are entirely new to the repository,
|
|
and which commits that have been omitted from the reference
|
|
vs. entirely discarded from the repository.
|
|
|
|
* The environment in which Git is running can be configured via an
|
|
"Environment" abstraction.
|
|
|
|
* Built-in support for Gitolite-managed repositories.
|
|
|
|
* Instead of using full SHA1 object names in emails, git-multimail
|
|
mostly uses abbreviated SHA1s, plus one-line log message summaries
|
|
where appropriate.
|
|
|
|
* In the schematic diagrams that explain non-fast-forward commits,
|
|
git-multimail shows the names of the branches involved.
|
|
|
|
* The emails generated by git-multimail include the name of the Git
|
|
repository that was modified; this is convenient for recipients who
|
|
are monitoring multiple repositories.
|
|
|
|
* git-multimail allows the email "From" addresses to be configured.
|
|
|
|
* The recipients lists (multimailhook.mailinglist,
|
|
multimailhook.refchangelist, multimailhook.announcelist, and
|
|
multimailhook.commitlist) can be comma-separated values and/or
|
|
multivalued settings in the config file; e.g.,
|
|
|
|
[multimailhook]
|
|
mailinglist = mr.brown@example.com, mr.black@example.com
|
|
announcelist = Him <him@example.com>
|
|
announcelist = Jim <jim@example.com>
|
|
announcelist = pop@example.com
|
|
|
|
This might make it easier to maintain short recipients lists without
|
|
requiring full-fledged mailing list software.
|
|
|
|
* By default, git-multimail sets email "Reply-To" headers to reply to
|
|
the pusher (for reference updates) and to the author (for commit
|
|
notifications). By default, the pusher's email address is
|
|
constructed by appending "multimailhook.emaildomain" to the pusher's
|
|
username.
|
|
|
|
* The generated emails contain a configurable footer. By default, it
|
|
lists the name of the administrator who should be contacted to
|
|
unsubscribe from notification emails.
|
|
|
|
* New option multimailhook.emailmaxlinelength to limit the length of
|
|
lines in the main part of the email body. The default limit is 500
|
|
characters.
|
|
|
|
* New option multimailhook.emailstrictutf8 to ensure that the main
|
|
part of the email body is valid UTF-8. Invalid characters are
|
|
turned into the Unicode replacement character, U+FFFD. By default
|
|
this option is turned on.
|
|
|
|
* Written in Python. Easier to add new features.
|