## Github and Hooks До этого момента все действия мы выполняли только в **локальном репозитории**. Однако Git также прекрасно подходит для **совместной работы** в команде. **GitHub** — это один из популярных сервисов в интернете, где можно централизованно размещать свои репозитории и работать вместе с другими разработчиками. *** Взаимодействие с GitHub добавляет к привычному процессу работы всего несколько новых шагов: * **Pull** — получить (скачать) последние изменения из центрального репозитория на GitHub в свой локальный репозиторий. * **Push** — отправить свои изменения из локального репозитория в репозиторий на GitHub, чтобы другие тоже могли их видеть. GitHub подготовил хорошие руководства по этой теме, которые можно почитать: * [GitHub Hello World](https://guides.github.com/activities/hello-world/) * [Git Handbook](https://guides.github.com/introduction/git-handbook/) *** ### Хуки (Hooks) Git имеет ещё одну интересную возможность — **хуки**. **Хуки** — это специальные скрипты, которые автоматически выполняются при определённых событиях в репозитории. Посмотреть доступные хуки можно так: ``` $ ls .git/hooks/ applypatch-msg.sample fsmonitor-watchman.sample pre-applypatch.sample pre-push.sample pre-receive.sample update.sample commit-msg.sample post-update.sample pre-commit.sample pre-rebase.sample prepare-commit-msg.sample ``` Имена файлов хуков говорят сами за себя. Например: * `pre-commit` — выполняется **перед** коммитом; * `pre-push` — выполняется **перед** отправкой (`push`) на удалённый репозиторий. Когда это полезно: Если, например, вы хотите запускать тесты перед отправкой кода на сервер, можно настроить хук `pre-push`. *** ### Создадим свой pre-commit хук Создадим новый скрипт: ``` $ echo "echo this is from pre commit hook" > .git/hooks/pre-commit ``` И сделаем его исполняемым: ``` $ chmod +x .git/hooks/pre-commit ``` Теперь, если мы попробуем сделать коммит, скрипт сработает: ``` $ echo "sample file" > sample.txt $ git add sample.txt $ git commit -m "adding sample file" this is from pre commit hook # <===== СООБЩЕНИЕ ОТ ВЫПОЛНЕНИЯ ХУКА [master 9894e05] adding sample file 1 file changed, 1 insertion(+) create mode 100644 sample.txt ``` ✅ Как видно, перед тем как выполнить коммит, был выведен текст из скрипта.