Share Git hooks between multiple repositories.
Use global Git hooks directory
This configuration will apply to every Git repository.
Create Git hooks directory.
$ mkdir -p ~/.git/hooks
Copy Git hooks to this directory, for example recently created Git hook to add Jira issue ID to the commit message.
Define global Git hooks directory.
$ git config --global core.hooksPath ~/.git/hooks
Inspect local Git configuration.
$ cat ~/.gitconfig [user] name = Milosz email = milosz@evil.corp [core] hooksPath = /home/milosz/.git/hooks
From now on you will use only Git hooks from defined directory.
$ mkdir test-repo $ cd test-repo/ $ git init Initialized empty Git repository in /home/milosz/Projects/test-repo/.git/ $ git commit -m "init" --allow-empty [master (root-commit) 24a9da6] init $ git checkout -b "SMART-0001" Switched to a new branch 'SMART-0001' $ git commit -m "branch test" --allow-empty [SMART-0001 63ce23c] SMART-0001: branch test
Use Git templates directory
This configuration can be used on per-repository basis.
Create Git templates directory.
$ mkdir -p ~/.git/templates
Copy Git hooks to this directory, for example recently created Git hook to add Jira issue ID to the commit message.
Define Git templates directory.
$ git config --global init.templatedir ~/.git/templates/hooks
Inspect local Git configuration.
$ cat ~/.gitconfig [user] name = Milosz email = milosz@evil.corp [init] templatedir = /home/milosz/.git/templates
From now on you need to initialize new or reinitialize existing Git repository to copy Git hooks from template directory.
$ cd Projects/test-repo/ $ ls .git/hooks/ applypatch-msg.sample fsmonitor-watchman.sample pre-applypatch.sample prepare-commit-msg.sample pre-rebase.sample update.sample commit-msg.sample post-update.sample pre-commit.sample pre-push.sample pre-receive.sample $ git init Reinitialized existing Git repository in /home/milosz/temp/test-repo/.git/ $ ls .git/hooks/ applypatch-msg.sample commit-msg.sample post-update.sample pre-commit.sample pre-push.sample pre-receive.sample commit-msg fsmonitor-watchman.sample pre-applypatch.sample prepare-commit-msg.sample pre-rebase.sample update.sample $ git checkout -b "SMART-0002" Switched to a new branch 'SMART-0002' $ git commit -m "branch test" --allow-empty [SMART-0002 f2a275d] SMART-0002: branch test
Additional notes
git-config – Get and set repository or global options
git-init – Create an empty Git repository or reinitialize an existing one