Post Commit Hook Not Running

GitBashGithubPost CommitGithooks

Git Problem Overview


My post commit hook is not running after git. I have verified that the hook does work if I just run it from the terminal. The code in the hook is:

#!/bin/sh
#.git/hooks/post-commit
# An example hook script that is called after a successful
# commit is made.
#
# To enable this hook, rename this file to "post-commit".

perl -pi -e 's/([a-f0-9]+)$/'$( git rev-parse HEAD )/ ../../config/commit.git

I did rename the file to post-commit in ./.git/hooks/ and the permissions are -rwxr-x-r-x so I am not sure why it doesn't work.

Git Solutions


Solution 1 - Git

I'll leave this here as an answer because I stumbled upon my own answer for when my post-commit hook wasn't running:

chmod +x .git/hooks/post-commit

Probably applies to any kind of hook. In fact, probably applies to any kind of script.

Solution 2 - Git

Try putting some echo lines before and after the perl line like this:

echo "post-commit started"
perl ...........
echo "post-commit finished"

This way you can confirm if the script is actually running, because when you run

git commit

you should see

post-commit started
post-commit finished

Towards the end of your output.

Solution 3 - Git

My post-commit script wasn't being called because:

I had named the script post-commit.sh, rather than just post-commit.

> To enable a hook script, put a file in the hooks subdirectory of your .git directory that is named appropriately (without any extension) and is executable. From that point forward, it should be called. We’ll cover most of the major hook filenames here. See git-scm

Not sure why I had in my head that hooks needed the bash file extension.

I also didn't realize hook scripts cannot have file extensions. For example,

> If you want to use the bundled hook scripts, you’ll have to rename > them; their file names all end with .sample

Hope this helps someone.

Solution 4 - Git

In addition to the answers noted here, note that if you are expecting user input in your hook, you need to redirect standard input to the keyboard like so (at least for a bash script);

exec < /dev/tty

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDave LongView Question on Stackoverflow
Solution 1 - GitSteven LuView Answer on Stackoverflow
Solution 2 - GitPeter FarmerView Answer on Stackoverflow
Solution 3 - GitBryce JohnsonView Answer on Stackoverflow
Solution 4 - Gitn00bView Answer on Stackoverflow