Skip to content

Instantly share code, notes, and snippets.

@deyvisonrocha
Forked from GianlucaGuarini/post-merge
Created May 24, 2018 12:53
Show Gist options
  • Save deyvisonrocha/7d72127de6e5573bcef3539d3aec9bf8 to your computer and use it in GitHub Desktop.
Save deyvisonrocha/7d72127de6e5573bcef3539d3aec9bf8 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'

2 Create a directory to hold the global hooks:

mkdir -p ~/.git-templates/hooks

3 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 

4 Make sure the hook is executable.

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

5 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
changed_files="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)"
check_run() {
echo "$changed_files" | grep -E --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 "sudo composer install"
# for the sass files we need a bit more
if [ -f "config.rb" ]
then
# `compass compile` to compile all the scss files when they get changed
check_run ".scss|.sass" "compass compile"
# check whether there is a gruntfile in the root of the project
elif [[ -n $(find . -maxdepth 1 -iname "gruntfile.js" -o -iname "gruntfile.coffee") ]]
then
# try to compile just using grunt sass
check_run ".scss|.sass" "grunt sass"
# check whether there is a gulpfile in the root of the project
elif [[ -n $(find . -maxdepth 1 -iname "gulpfile.js" -iname "gulpfile.coffee") ]]
then
# try to compile just using grunt sass
check_run ".scss|.sass" "gulp sass"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment