Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| git_hooks [2019/02/19 10:50] – [pre-commit] rpjday | git_hooks [2019/02/19 11:10] (current) – [Default hook installation for a new repository] rpjday | ||
|---|---|---|---|
| Line 35: | Line 35: | ||
| * Make sure they are marked as executable. | * Make sure they are marked as executable. | ||
| - | * Remove the '' | + | * Remove the '' |
| + | ===== Where hooks are effectively run ===== | ||
| + | |||
| + | From '' | ||
| + | |||
| + | < | ||
| + | Before Git invokes a hook, it changes its working directory to | ||
| + | either $GIT_DIR in a bare repository or the root of the working | ||
| + | tree in a non-bare repository. An exception are hooks triggered | ||
| + | during a push (pre-receive, | ||
| + | push-to-checkout) which are always executed in $GIT_DIR. | ||
| + | </ | ||
| ===== commit-related client-side hooks ===== | ===== commit-related client-side hooks ===== | ||
| Line 44: | Line 55: | ||
| < | < | ||
| - | This hook is invoked by git commit, and can be bypassed with | + | This hook is invoked by git commit(1), and can be bypassed with |
| the --no-verify option. It takes no parameters, and is invoked | the --no-verify option. It takes no parameters, and is invoked | ||
| before obtaining the proposed commit log message and making a | before obtaining the proposed commit log message and making a | ||
| Line 232: | Line 243: | ||
| This hook is meant primarily for notification, | This hook is meant primarily for notification, | ||
| the outcome of git commit. | the outcome of git commit. | ||
| + | </ | ||
| + | |||
| + | There is no sample script provided by Git; you're on your own here. | ||
| + | |||
| + | ===== Overriding the default hooks ===== | ||
| + | |||
| + | ==== git init ==== | ||
| + | |||
| + | When initializing a new repository, the template content used for the new repository comes from one of (in order of precedence): | ||
| + | |||
| + | * the '' | ||
| + | * the value of the '' | ||
| + | * the '' | ||
| + | * the contents of ''/ | ||
| + | |||
| + | ==== git clone ==== | ||
| + | |||
| + | When cloning a repository, the only way to override the installation of default hooks (and template content) is via the '' | ||
| + | ==== During normal operation ==== | ||
| + | |||
| + | From '' | ||
| + | |||
| + | < | ||
| + | core.hooksPath | ||
| + | By default Git will look for your hooks in the | ||
| + | $GIT_DIR/ | ||
| + | / | ||
| + | directory, e.g. / | ||
| + | $GIT_DIR/ | ||
| + | |||
| + | The path can be either absolute or relative. A relative | ||
| + | path is taken as relative to the directory where the hooks | ||
| + | are run (see the " | ||
| + | |||
| + | This configuration variable is useful in cases where you’d | ||
| + | like to centrally configure your Git hooks instead of | ||
| + | configuring them on a per-repository basis, or as a more | ||
| + | flexible and centralized alternative to having an | ||
| + | init.templateDir where you’ve changed default hooks. | ||
| </ | </ | ||