|# MIT © Sindre Sorhus - sindresorhus.com|
|# git hook to run a command after `git pull` if a specified file was changed|
|# Run `chmod +x post-merge` to make it executable then put it into `.git/hooks/`.|
|changed_files="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)"|
|echo "$changed_files" | grep --quiet "$1" && eval "$2"|
|# Example usage|
|# In this example it's used to run `npm install` if package.json changed|
|check_run package.json "npm install"|
Jul 18, 2016
For package managers that use a lock file, eg. Composer, it would make sense to check if the lock file changed rather than the requirements file, right? In other words:
# Installing composer dependencies check_run composer.lock "composer install"
Feb 20, 2017
Thank you so much, it works like a charm although, I did a few changes on my fork.
May 9, 2017
On my machine it is running npm install whether package.json is changed or not.
The way I am reproducing is by creating a new branch at the current commit and then checking it out. Therefore the files should be identical between the two branches.
Anyone have any ideas?
cross-posted with stackoverflow: http://stackoverflow.com/questions/43876375/optional-githook-behaving-as-non-optional
May 23, 2017
For cases where you are pushing to a bare repo and want to use this on a
post-receive hook, instead of the line
changed_files="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)"
one should use
changed_files="$(git diff --name-only HEAD^ HEAD)"
Thank you for an extremely useful snippet!
Nov 17, 2017
This only deals with changed files right. Suppose I want to check any new files are generated when taking pull, how this solution works?
Aug 10, 2018
thanks for the wonderful solution
extended the script - added the option for conditionally execute the command according to git configuration
Nov 22, 2018
@sindresorhus Thanks for the wonderful solution.
I would like to clarify that Is it possible to check and run
npm install only if the change is in npm dependency ?
I think that will save some more time.
Feb 11, 2019
This hook doesn't work if you run pull with --rebase option. Do you know how to fix it? Thx!
+1 , same problem. Have you found out the solution?
take a look at .git/hooks/pre-rebase.sample and see if you can deduct how to do a post-rebase hook.
I've tried to write a post-rebase hook but it didn't work ...
post-rebase is not a valid git-hook
You have to implement a
post-rewrite hook and check the first argument to be "
rebase" (could be "
amend" too as @belveryin already tasted).
Apr 23, 2019
How do you run
npm install if one of two matching criteria is found? e.g. I want to run
npm install if one of two files is modified, but don't want to run
npm install twice.
May 1, 2019
You should be able to run it as
check_run "file1\|file2" "npm install"
Probably, I also need to add '-e' parameter to the 'grep' function
Aug 1, 2019
Nov 22, 2019
there is this too https://github.com/jonathantneal/post-npm-install
Mar 22, 2020
is there any way to show message like this, before & after hooks execution for
checking for dependency update...
if there is any update going to happen
if there is no changes to dependency
no new dependency!
Mar 6, 2021
This script works like a charm. Thanks for sharing.
Can someone please let me know what is happening inside the script? What does this script arguments mean?
Nov 14, 2021
@ajaykumar97 can you help me implement it ? it looks like it is not running ;/
Awesome! Thanks! It works like a charm.