Git и GitHub
============

Все разработчики используют ту или иную **систему контроля версий (СКВ, VCS)**, инструмент, позволяющий им взаимодействовать с другими разработчиками на проекте без угрозы того, что кто-то перезапишет чужую работу, а также вернуться к предыдущим версиям кода при обнаружении проблем позднее.

Самая популярная СКВ (по крайней мере, среди веб-разработчиков) являются **Git**, а также **GitHub**- сайт, обеспечивающий размещение ваших репозиториев и включающий инструменты для работы с ними. Цели этого модуля - дать вам необходимые знания о каждой из упомянутых СКВ.

Обзор
-----

СКВ являются основой для разработки программного обеспечения:

* Редко, когда вы работаете с проектом полностью самостоятельно. Как только вы начинаете работать с другими людьми, возникает риск конфликта. Речь идёт о ситуации, когда несколько человек пытается в одно и то же время обновить одну и ту же часть кода. Нужен определённый механизм, позволяющий управлять событиями и тем самым избежать потери результатов общей работы.
* Работая с проектом в одиночку или с другими, вы захотите иметь возможность иметь резервную копию кода на случай поломки вашего компьютера.
* Также у вас может возникнуть необходимость откатить изменения к более ранним версиям, если проблема обнаружена позднее. Конечно, это начать делать самостоятельно, сохраняя различные версии одного и того же файла, например `myCode.js`, `myCode_v2.js`, `myCode_v3.js`, `myCode_final.js`, `myCode_really_really_final.js`, и так далее, но это на самом деле ненадёжный и порождающий ошибки способ.
* Различные члены команды могут захотеть создать собственные версии кода (в Git такие версии именуются **ветками**), работать над новой фичей в этой версии, а затем контролируемо объединить эту версию (в GitHub используются **пул реквизиты** - запросы на принятие изменений) с главной версией.

СКВ обеспечивают инструменты для решения всех вышеуказанных задач. Git является примером СКВ, а GitHub - это сайт, обеспечивающий веб-интерфейс для работы с гит, а также множество полезных инструментов для работы с гит-репозиториями лично или в командах, такие как фиксация проблем с кодом, инструменты для проверки кода, инструменты для управления созданием продукта, например назначение задач и их статусов, и т.д.

**Примечание:** ГИТ на самом деле - распределённая система контроля версий, это значит что полная копия репозитория, содержащая всю кодовую базу сохраняется на твой компьютер (и кого-либо ещё). Ты вносишь изменения в свою копию и затем отправляешь эти изменения обратно на сервер, на котором администратор решит соединять ли твои изменения с оригиналом.

Подготовка
----------

Для использования Git и GitHub тебе необходимо:

* Компьютер с установленной версией Git (посмотри страницу загрузки Git).
* Приложения для работы с Git. В зависимости от того как ты предпочитаешь работать, можешь использовать Git-клиенты с графическим интерфейсом (мы рекомендуем GitHub Desktop, SourceTree или Git Kraken) или просто продолжай использовать окно терминала. Если честно, будет весьма полезно для тебя узнать основы использования git-команд в терминале, даже если ты собираешься работать через графический интерфейс.
* Аккаунт на GitHub. Если у тебя ещё его нет, зарегистрируйся сейчас по указанной ссылке.

Что касается предварительных знаний, вам не нужно разбираться в веб-разработке, Git / GitHub или VCS, чтобы приступить к этому модулю. Тем не менее, рекомендуется, чтобы вы разбирались в составлении кода, могли его писать и читать, а также сохранили пару строчек кода в своих репозиториях!

Также желательно, чтобы у вас были некоторые базовые знания о терминале, например, перемещение между каталогами, создание файлов и изменение системного `PATH`.

**Примечание:** Github не единственный сайт / инструментарий который ты можешь использовать с Git. Есть и альтернативы, такие как GitLab, которые ты можешь попробовать, а также ты можешь попробовать настроить свой собственный сервер Git и использовать вместо GitHub. Мы в этом курсе остановились на GitHub, чтобы показать один из рабочих способов.

Руководства
-----------

Все указанные ниже ссылки ведут на внешние ресурсы. Со временем у нас появится свой собственный курс по Git/GitHub. А сейчас они помогут вам подробнее разобраться в материале.

Hello World (from GitHub)

Это практическое руководство поможет вам сразу начать пользоваться GitHub. Оно содержит основы использования Git, такие как создание репозиториев, веток, создание коммитов, открытие и слияние пулл-реквестов.

Git Handbook (from GitHub)

Этот справочник по Git подробнее объясняет, что такое система контроля версий (VCS), что такое репозиторий, на чём основана модель работы GitHub, описывает команды Git, примеры их использования и многое другое.

Forking Projects (from GitHub)

Это руководство объясняет, как при помощи создания форка (fork) чужого проекта вы можете поучаствовать в его разработке.

About Pull Requests (from GitHub)

Полезное руководство по работе с пулл-реквестами - механизмом GitHub, с помощью которого ваши изменения отправляются на рассмотрение в чужие проекты.

Mastering issues (from GitHub)

На вкладке с обсуждением проблем (issue) пользователи могут задавать вопросы и сообщать об ошибках, а вы можете курировать работу над обновлениями кода: назначать ответственных за исправление возникших проблем, отвечать на вопросы пользователей, сообщать об исправлении ошибок. Эта статья поможет вам разобраться со всем, что касается работы над проблемами.


**Примечание:** На самом деле вы можете делать при помощи Git и GitHub **намного больше** , но мы считаем, что эти руководства необходимый минимум для начала его эффективного использования. По мере погружения в Git и использования более сложных команд к вам придёт понимание, что очень легко сделать что-то неправильно. Не беспокойтесь, даже профессиональные разработчики иногда испытывают трудности с Git и ищут решения в Интернете. Например, на сайте Flight rules for Git или Dangit, git!

Материалы для изучения
----------------------

* Understanding the GitHub flow
* Git command list (справочник по командам git)
* Mastering markdown (правила оформления сообщений в пулл-реквестах (PR), комментариях, и `.md`-файлах).
* Getting Started with GitHub Pages (правила публикаций страниц и демо-сайтов на GitHub).
* Learn Git branching (интерактивный справочник по правилам ветвления в Git)
* Flight rules for Git (полезный справочник решений конкретных задач, возникающих при работе с Git, и ситуаций, когда что-то пошло не так).
* Dangit, git! (ещё один полезный справочник, сосредоточенный на решении проблем при работе Git).