-
Star
(582)
You must be signed in to star a gist -
Fork
(154)
You must be signed in to fork a gist
-
-
Save sindresorhus/7996717 to your computer and use it in GitHub Desktop.
| #!/usr/bin/env bash | |
| # 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)" | |
| check_run() { | |
| 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" |
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
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!
This only deals with changed files right. Suppose I want to check any new files are generated when taking pull, how this solution works?
thanks for the wonderful solution
extended the script - added the option for conditionally execute the command according to git configuration
https://gist.github.com/oriy/e8b58a6a471d371129b1d0b430510375
@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.
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).
See https://git-scm.com/docs/githooks#_post_rewrite
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.
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
Thanks!
there is this too https://github.com/jonathantneal/post-npm-install
is there any way to show message like this, before & after hooks execution for npm i?
checking for dependency update...
if there is any update going to happen
installing dependency..
if there is no changes to dependency
no new dependency!
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?
@ajaykumar97 can you help me implement it ? it looks like it is not running ;/
Thank you so much, it works like a charm although, I did a few changes on my fork.
https://gist.github.com/betorobson/23e5914b51e844bac5eaa6032d6f3f88