Skip to content

Instantly share code, notes, and snippets.

@yfix
Forked from GianlucaGuarini/post-merge
Created November 21, 2018 11:48
Show Gist options
  • Save yfix/53ad3445124c80758e6109cf17a0090c to your computer and use it in GitHub Desktop.
Save yfix/53ad3445124c80758e6109cf17a0090c to your computer and use it in GitHub Desktop.
Git hook that gets triggered after any 'git pull' whenever one of the files specified has changed. Useful to update any web application dependency using bower npm or composer

How to create a global git commit hook by Matt Venables

  1. Enable git templates (This tells git to copy everything in ~/.git-templates to your per-project .git/ directory when you run git init):

git config --global init.templatedir '~/.git-templates'

  1. Create a directory to hold the global hooks:

mkdir -p ~/.git-templates/hooks

  1. Write your hooks in ~/.git-templates/hooks. For example, here's a post-commit hook (located in ~/.git-templates/hooks/post-commit):

#!/bin/sh

# Copy last commit hash to clipboard on commit
git log -1 --format=format:%h | pbcopy



# Add other post-commit hooks 

  1. Make sure the hook is executable.

chmod a+x ~/.git-templates/hooks/post-commit

  1. Re-initialize git in each existing repo you'd like to use this in:

git init

NOTE if you already have a hook defined in your local git repo, this will not overwrite it.

#/usr/bin/env bash
# MIT © Sindre Sorhus - sindresorhus.com
# forked by Gianluca Guarini
# 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"
}
# `npm install` and `npm prune` if the `package.json` file gets changed
# to update all the nodejs ( grunt ) dependencies deleting the unused packages (not listed into the `package.json` file)
check_run package.json "npm install && npm prune"
# `bower install` and `bower prune` if the `bower.json` file gets changed
# to install all the frontend dependencies removing the unused packages ( not listed into the `bower.json` file )
check_run bower.json "bower install && bower prune"
# `composer install` if the `composer.json` file gets changed
# to update all the php dependencies
check_run composer.json "composer install"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment