Зачем устанавливать gulp глобально и локально?
Глобально надо поставить gulp-cli, а не gulp, а локально надо ставить gulp. Gulp-cli это утилита, или программа, которая зарегистрирует в консоли команду gulp. CLI - command line interface, интерфейс командной строки, как-то так. Это надо, чтобы Вы могли в консоли запускать задачи с помощью команды типа 'gulp task'. Если gulp-cli не поставить, то для запуска задач пришлось бы писать что-то типа 'node gulpfile.js', а тогда проблема, что в нем ещё надо указать, какую задачу конкретно запускать надо, потому что node запустит просто скрипт, и выполнятся все задачи, которые там объявлены и вызваны. Либо пришлось бы в package.json регистрировать скрипты под алиасы, сокращенные команды, и для запуска пришлось бы писать npm run task, а в package.json надо тогда описать этот task. Сложно, короче. Gulp-cli умеет принимать название task'a и вызвать его из gulpfile.js. Теперь в gulpfile описываете задачи, и через gulp вызываете.
Этого делать не обязательно. Всё что ставится глобально падает (если Windows) в C:\Users\username\AppData\Roaming\npm\node_modules, а так как в переменной среды окружения прописан путь к C:\Users\username\AppData\Roaming\npm, то это позволяет запустить команду gulp глобально из командной строки отовсюду, т.к. если откроете по вышеуказанному пути gulp.cmd в нём найдёте что-то типа:  "%~dp0\node.exe"  "%~dp0\node_modules\gulp\bin\gulp.js" %*
А если поставить gulp локально, то в проект он устанавливается в %project_path%/node_modules. Чтобы запустить локальный gulp нужно будет написать в командной строке: %project_path%/node_modules/.bin/gulp и если зайти в эту папку можно найти такой же gulp.cmd
Итого: 1 способ по сути просто удобный и быстрый для запуска. 2 способ может пригодится если, например на целевом сервере, где может осуществлятся сборка, не будет возможности установить gulp глобально (не будет хватать прав), в этом случае нас и выручит локальная версия. 
Также по правилам хорошего тона в проект записываются все зависимости, поэтому даже если вы на целевом сервере или у себя используете глобальную версию, необходимо указать, что проект использует такой пакет. 
Кроме того, Вы можете по необходимости ставить любые пакеты глобально и использовать их по удобному псевдониму, а также, например, иметь 2 разные версии одного пакета