| = commit-msg Hook | |
| == NAME | |
| commit-msg - Edit commit messages to insert a `Change-Id` tag. | |
| == DESCRIPTION | |
| A Git hook automatically invoked by `git commit`, and most other | |
| commit creation tools such as `git citool` or `git gui`. The Gerrit | |
| Code Review supplied implementation of this hook is a short shell | |
| script which automatically inserts a globally unique `Change-Id` tag | |
| in the footer of a commit message. When present, Gerrit uses this | |
| tag to track commits across cherry-picks and rebases. | |
| After the hook has been installed in the user's local Git repository | |
| for a project, the hook will modify a commit message such as: | |
| ---- | |
| Improve foo widget by attaching a bar. | |
| We want a bar, because it improves the foo by providing more | |
| wizbangery to the dowhatimeanery. | |
| Signed-off-by: A. U. Thor <author@example.com> | |
| ---- | |
| by inserting a new `Change-Id: ` line in the footer: | |
| ---- | |
| Improve foo widget by attaching a bar. | |
| We want a bar, because it improves the foo by providing more | |
| wizbangery to the dowhatimeanery. | |
| Change-Id: Ic8aaa0728a43936cd4c6e1ed590e01ba8f0fbf5b | |
| Signed-off-by: A. U. Thor <author@example.com> | |
| ---- | |
| The hook implementation is reasonably intelligent at inserting the | |
| `Change-Id` line before any `Signed-off-by` or `Acked-by` lines placed | |
| at the end of the commit message by the author, but if no such | |
| lines are present then it will just insert a blank line, and add | |
| the `Change-Id` at the bottom of the message. | |
| If a `Change-Id` line is already present in the message footer, the | |
| script will do nothing, leaving the existing `Change-Id` unmodified. | |
| This permits amending an existing commit, or allows the user to | |
| insert the Change-Id manually after copying it from an existing | |
| change viewed on the web. | |
| The `Change-Id` will not be added if `gerrit.createChangeId` is set | |
| to `false` in the git config. | |
| == OBTAINING | |
| To obtain the `commit-msg` script use `scp`, `wget` or `curl` to download | |
| it to your local system from your Gerrit server. | |
| You can use either of the below commands: | |
| ==== | |
| $ scp -p -P 29418 <your username>@<your Gerrit review server>:hooks/commit-msg <local path to your git>/.git/hooks/ | |
| $ curl -Lo <local path to your git>/.git/hooks/commit-msg <your Gerrit http URL>/tools/hooks/commit-msg | |
| ==== | |
| A specific example of this might look something like this: | |
| .Example | |
| ==== | |
| $ scp -p -P 29418 john.doe@review.example.com:hooks/commit-msg ~/duhproject/.git/hooks/ | |
| $ curl -Lo ~/duhproject/.git/hooks/commit-msg http://review.example.com/tools/hooks/commit-msg | |
| ==== | |
| Make sure the hook file is executable: | |
| ==== | |
| $ chmod u+x ~/duhproject/.git/hooks/commit-msg | |
| ==== | |
| == SEE ALSO | |
| * link:user-changeid.html[Change-Id Lines] | |
| * link:http://www.kernel.org/pub/software/scm/git/docs/git-commit.html[git-commit(1)] | |
| * link:http://www.kernel.org/pub/software/scm/git/docs/githooks.html[githooks(5)] | |
| == IMPLEMENTATION | |
| The hook generates unique `Change-Id` lines by creating a virtual | |
| commit object within the local Git repository, and obtaining the | |
| SHA-1 hash from it. Like any other Git commit, the following | |
| properties are included in the computation: | |
| * SHA-1 of the tree being committed | |
| * SHA-1 of the parent commit | |
| * Name, email address, timestamp of the author | |
| * Name, email address, timestamp of the committer | |
| * Proposed commit message (before `Change-Id` was inserted) | |
| Because the names of the tree and parent commit, as well as the | |
| committer timestamp are included in the hash computation, the output | |
| `Change-Id` is sufficiently unique. | |
| GERRIT | |
| ------ | |
| Part of link:index.html[Gerrit Code Review] | |
| SEARCHBOX | |
| --------- |