docs: function installHook( source, dest, sourceCanonicalName, cb ) {
  		var hookToCopy = path.join( ( options.hookDir || 'grunt/hooks/' ), source );
  		var whereToPutIt = '.git/hooks/' + dest;
  		if ( !fs.existsSync( hookToCopy ) ) {
  			grunt.fail.fatal( 'No file found at ' + hookToCopy );
  		}
  
  		// If there is already that type of hook installed
  		if ( fs.existsSync( './' + whereToPutIt ) ) {
  
  			// Ask if the user wants to overwrite the existing hook
  			getYesNoResponse( [
  					'A hook already exists at',
  					whereToPutIt + '.',
  					'Do you wish to overwrite it?'
  				].join( ' ' ).red,
  				function() {
  
  					// The user said yes. Overwrite the existing hook.
  					actuallyInstallHook(
  						hookToCopy,
  						whereToPutIt,
  						sourceCanonicalName
  					);
  
  					cb();
  				},
  				function() {
  
  					// The user said no, tell they we're skipping the hook
  					grunt.log.writeln( [
  						'Skipping install of ',
  						sourceCanonicalName,
  						' hook in ',
  						whereToPutIt
  					].join( '' ).red);
  
  					cb();
  				}
  			);
  
  		} else {
  
  			// The file didn't exist, perform the copy and continue
  			grunt.log.writeln( hookToCopy, whereToPutIt, sourceCanonicalName );
  			actuallyInstallHook(
  				hookToCopy,
  				whereToPutIt,
  				sourceCanonicalName
  			);
  			cb();
  		}
  
  		// Installs the hook without checking if it already exists
  		function actuallyInstallHook(
  			hookToCopy,
  			whereToPutIt,
  			sourceCanonicalName
  		) {
  			mkpath.sync( path.join( './', path.dirname( whereToPutIt ) ) );
  			exec( 'cp ' + hookToCopy + ' ' + whereToPutIt );
  			grunt.log.writeln( [
  				'Installed ', sourceCanonicalName, ' hook in ', whereToPutIt
  			].join( '' ).green );
  		}
  	}