]>
Commit | Line | Data |
---|---|---|
72e9340c | 1 | Hooks used by git |
6d35cc76 | 2 | ================= |
6d35cc76 JH |
3 | |
4 | Hooks are little scripts you can place in `$GIT_DIR/hooks` | |
5 | directory to trigger action at certain points. When | |
6 | `git-init-db` is run, a handful example hooks are copied in the | |
7 | `hooks` directory of the new repository, but by default they are | |
8 | all disabled. To enable a hook, make it executable with `chmod | |
9 | +x`. | |
10 | ||
11 | This document describes the currently defined hooks. | |
12 | ||
13 | applypatch-msg | |
14 | -------------- | |
15 | ||
16 | This hook is invoked by `git-applypatch` script, which is | |
17 | typically invoked by `git-applymbox`. It takes a single | |
18 | parameter, the name of the file that holds the proposed commit | |
19 | log message. Exiting with non-zero status causes the | |
20 | 'git-applypatch' to abort before applying the patch. | |
21 | ||
22 | The hook is allowed to edit the message file in place, and can | |
23 | be used to normalize the message into some project standard | |
24 | format (if the project has one). It can also be used to refuse | |
25 | the commit after inspecting the message file. | |
26 | ||
27 | The default applypatch-msg hook, when enabled, runs the | |
28 | commit-msg hook, if the latter is enabled. | |
29 | ||
30 | pre-applypatch | |
31 | -------------- | |
32 | ||
33 | This hook is invoked by `git-applypatch` script, which is | |
34 | typically invoked by `git-applymbox`. It takes no parameter, | |
35 | and is invoked after the patch is applied, but before a commit | |
36 | is made. Exiting with non-zero status causes the working tree | |
37 | after application of the patch not committed. | |
38 | ||
39 | It can be used to inspect the current working tree and refuse to | |
40 | make a commit if it does not pass certain test. | |
41 | ||
42 | The default pre-applypatch hook, when enabled, runs the | |
43 | pre-commit hook, if the latter is enabled. | |
44 | ||
45 | post-applypatch | |
46 | --------------- | |
47 | ||
48 | This hook is invoked by `git-applypatch` script, which is | |
49 | typically invoked by `git-applymbox`. It takes no parameter, | |
50 | and is invoked after the patch is applied and a commit is made. | |
51 | ||
52 | This hook is meant primarily for notification, and cannot affect | |
53 | the outcome of `git-applypatch`. | |
54 | ||
55 | pre-commit | |
56 | ---------- | |
57 | ||
215a7ad1 | 58 | This hook is invoked by `git-commit`, and can be bypassed |
e1ccf53a | 59 | with `\--no-verify` option. It takes no parameter, and is |
6d35cc76 JH |
60 | invoked before obtaining the proposed commit log message and |
61 | making a commit. Exiting with non-zero status from this script | |
215a7ad1 | 62 | causes the `git-commit` to abort. |
6d35cc76 JH |
63 | |
64 | The default pre-commit hook, when enabled, catches introduction | |
65 | of lines with trailing whitespaces and aborts the commit when | |
66 | a such line is found. | |
67 | ||
68 | commit-msg | |
69 | ---------- | |
70 | ||
215a7ad1 | 71 | This hook is invoked by `git-commit`, and can be bypassed |
e1ccf53a | 72 | with `\--no-verify` option. It takes a single parameter, the |
6d35cc76 | 73 | name of the file that holds the proposed commit log message. |
215a7ad1 | 74 | Exiting with non-zero status causes the `git-commit` to |
6d35cc76 JH |
75 | abort. |
76 | ||
77 | The hook is allowed to edit the message file in place, and can | |
78 | be used to normalize the message into some project standard | |
79 | format (if the project has one). It can also be used to refuse | |
80 | the commit after inspecting the message file. | |
81 | ||
82 | The default commit-msg hook, when enabled, detects duplicate | |
83 | Signed-off-by: lines, and aborts the commit when one is found. | |
84 | ||
85 | post-commit | |
86 | ----------- | |
87 | ||
215a7ad1 | 88 | This hook is invoked by `git-commit`. It takes no |
6d35cc76 JH |
89 | parameter, and is invoked after a commit is made. |
90 | ||
91 | This hook is meant primarily for notification, and cannot affect | |
215a7ad1 | 92 | the outcome of `git-commit`. |
6d35cc76 JH |
93 | |
94 | The default post-commit hook, when enabled, demonstrates how to | |
95 | send out a commit notification e-mail. | |
96 | ||
97 | update | |
98 | ------ | |
99 | ||
6250ad1e JL |
100 | This hook is invoked by `git-receive-pack` on the remote repository, |
101 | which is happens when a `git push` is done on a local repository. | |
102 | Just before updating the ref on the remote repository, the update hook | |
37425065 | 103 | is invoked. Its exit status determines the success or failure of |
6250ad1e JL |
104 | the ref update. |
105 | ||
106 | The hook executes once for each ref to be updated, and takes | |
107 | three parameters: | |
108 | - the name of the ref being updated, | |
109 | - the old object name stored in the ref, | |
110 | - and the new objectname to be stored in the ref. | |
111 | ||
112 | A zero exit from the update hook allows the ref to be updated. | |
113 | Exiting with a non-zero status prevents `git-receive-pack` | |
114 | from updating the ref. | |
115 | ||
116 | This hook can be used to prevent 'forced' update on certain refs by | |
6d35cc76 JH |
117 | making sure that the object name is a commit object that is a |
118 | descendant of the commit object named by the old object name. | |
6250ad1e JL |
119 | That is, to enforce a "fast forward only" policy. |
120 | ||
121 | It could also be used to log the old..new status. However, it | |
122 | does not know the entire set of branches, so it would end up | |
123 | firing one e-mail per ref when used naively, though. | |
124 | ||
6d35cc76 JH |
125 | Another use suggested on the mailing list is to use this hook to |
126 | implement access control which is finer grained than the one | |
127 | based on filesystem group. | |
128 | ||
3aadad1b JH |
129 | The standard output of this hook is sent to /dev/null; if you |
130 | want to report something to the git-send-pack on the other end, | |
131 | you can redirect your output to your stderr. | |
132 | ||
6250ad1e | 133 | |
6d35cc76 JH |
134 | post-update |
135 | ----------- | |
136 | ||
6250ad1e JL |
137 | This hook is invoked by `git-receive-pack` on the remote repository, |
138 | which is happens when a `git push` is done on a local repository. | |
139 | It executes on the remote repository once after all the refs have | |
140 | been updated. | |
141 | ||
142 | It takes a variable number of parameters, each of which is the | |
143 | name of ref that was actually updated. | |
6d35cc76 JH |
144 | |
145 | This hook is meant primarily for notification, and cannot affect | |
146 | the outcome of `git-receive-pack`. | |
147 | ||
6250ad1e JL |
148 | The post-update hook can tell what are the heads that were pushed, |
149 | but it does not know what their original and updated values are, | |
150 | so it is a poor place to do log old..new. | |
151 | ||
6d35cc76 JH |
152 | The default post-update hook, when enabled, runs |
153 | `git-update-server-info` to keep the information used by dumb | |
abda1ef5 | 154 | transports (e.g., http) up-to-date. If you are publishing |
6250ad1e JL |
155 | a git repository that is accessible via http, you should |
156 | probably enable this hook. | |
3aadad1b JH |
157 | |
158 | The standard output of this hook is sent to /dev/null; if you | |
159 | want to report something to the git-send-pack on the other end, | |
160 | you can redirect your output to your stderr. |