| 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. |