Is there a way to run a gruntjs task as precommit hook. For example I want do prevent commits with failing tests or jshint issues. I've also think about to run a code beautifier for every commit.
-
yes; but you need node on the machine where this runs. – forvaidya Jan 08 '13 at 11:35
3 Answers
Git hooks are just scripts executed when you do an action like commit. They can contain whatever programming language you'd like.
Example of triggering grunt:
#!/bin/sh
grunt
Save this in the file: .git/hooks/pre-commit
If grunt exits with an error code higher than 0, which it does if any task fail, it will prevent the commit:
Exiting non-zero from this hook aborts the commit
Reading material: Tips for using a git pre-commit hook
And the git docs: 8.3 Customizing Git - Git Hooks
Like many other Version Control Systems, Git has a way to fire off custom scripts when certain important actions occur.

- 6,022
- 8
- 33
- 66

- 62,972
- 39
- 168
- 232
I recently had the same issue and detailed a more comprehensive Grunt solution on http://viget.com/extend/grunt-getting-started-with-git-hooks

- 338
- 1
- 4
- 9
-
You can also do this really easily now (sans Grunt, if you like) using Husky: https://github.com/typicode/husky – chrisM Mar 20 '15 at 19:58
I think you should check out grunt-githooks, a nice Grunt plugin that does all the magic for you and lets you easily register Grunt tasks for certain hooks from within your Gruntfile.js
, such as:
grunt.initConfig({
githooks: {
all: {
// Will run the jshint and test:unit tasks at every commit
'pre-commit': 'jshint test:unit',
}
}
});
(Taken from the docs at https://github.com/wecodemore/grunt-githooks#defining-a-few-hooks)
Find the module on npm here.

- 21,817
- 17
- 90
- 110

- 140,679
- 96
- 298
- 425