mirror of
https://github.com/git/git
synced 2024-08-25 02:35:46 +00:00
![Paolo Bonzini](/assets/img/avatar_default.png)
The prepare-commit-msg hook is run whenever a "fresh" commit message is prepared, just before it is shown in the editor (if it is). Its purpose is to modify the commit message in-place. It takes one to three parameters. The first is the name of the file that the commit log message. The second is the source of the commit message, and can be: "message" (if a -m or -F option was given); "template" (if a -t option was given or the configuration option commit.template is set); "merge" (if the commit is a merge or a .git/MERGE_MSG file exists); "squash" (if a .git/SQUASH_MSG file exists); or "commit", followed by a commit SHA1 as the third parameter (if a -c, -C or --amend option was given). If its exit status is non-zero, git-commit will abort. The hook is not suppressed by the --no-verify option, so it should not be used as a replacement for the pre-commit hook. The sample prepare-commit-msg comments out the `Conflicts:` part of a merge's commit message; other examples are commented out, including adding a Signed-off-by line at the bottom of the commit messsage, that the user can then edit or discard altogether. Signed-off-by: Paolo Bonzini <bonzini@gnu.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
37 lines
1.2 KiB
Bash
37 lines
1.2 KiB
Bash
#!/bin/sh
|
|
#
|
|
# An example hook script to prepare the commit log message.
|
|
# Called by git-commit with the name of the file that has the
|
|
# commit message, followed by the description of the commit
|
|
# message's source. The hook's purpose is to edit the commit
|
|
# message file. If the hook fails with a non-zero status,
|
|
# the commit is aborted.
|
|
#
|
|
# To enable this hook, make this file executable.
|
|
|
|
# This hook includes three examples. The first comments out the
|
|
# "Conflicts:" part of a merge commit.
|
|
#
|
|
# The second includes the output of "git diff --name-status -r"
|
|
# into the message, just before the "git status" output. It is
|
|
# commented because it doesn't cope with --amend or with squashed
|
|
# commits.
|
|
#
|
|
# The third example adds a Signed-off-by line to the message, that can
|
|
# still be edited. This is rarely a good idea.
|
|
|
|
case "$2 $3" in
|
|
merge)
|
|
sed -i '/^Conflicts:/,/#/!b;s/^/# &/;s/^# #/#/' "$1" ;;
|
|
|
|
# ""|template)
|
|
# perl -i -pe '
|
|
# print "\n" . `git diff --cached --name-status -r`
|
|
# if /^#/ && $first++ == 0' "$1" ;;
|
|
|
|
*) ;;
|
|
esac
|
|
|
|
# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
|
|
# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
|