video5-vcs-git.md
В этом уроке мы рассмотрим системы управления версиями и самую популярную из них - Git.
- StackOverflow 2021 survey
- Введение в Git и GitHub: установка и настройка
- Введение в Git и GitHub: базовые команды
- Введение в Git и GitHub: ошибки использования
- Бесплатная русскоязычная книга Pro Git
Git является де-факто стандартом среди систем управления версиями. Опрос, проведенный StackOverflow в 2021 году показывает, что Git используют почти 95% опрошенных разработчиков.
Когда-то популярная централизованная система контроля версий SVN (Subversion) практически полностью заменена Git. Но некоторые большие проекты все еще используют SVN. Примером такого проекта является WordPress. Я также все еще иногда встречаю SVN в вакансиях российских компаний.
В ходе курса мы будем использовать Git. Git - это распределенная система управления версиями. Это означает, что код, над которым работает команда, и ранее сохраненные (закоммиченные) версии проекта хранится на компьютерах каждого члена команды, а также в удаленном репозитории, который можно сравнить с облачным хранилищем.
Некоторые путают Git и GitHub, но это не одно и то же.
Git — это утилита, которую программист устанавливает у себя на компьютере для сохранения состояний проектов и контроля версий проекта.
GitHub — это провайдер удаленных репозиториев, сайт (хостинг) для хранения кода проекта и его изменений, для обмена файлами с членами команды проекта. Программисты могут создавать на GitHub публичные репозитории, в которых код доступен всем. Компании могут приобрести платный аккаунт на GitHub и вести свои проекты в закрытых репозиториях, доступ к которым имеют только члены команды проекта. Существуют и другие подобные сайты - провайдеры удаленных репозиториев, например, BitBucket, SourceForge, GitLab и т. д.
Говоря кратко, работа с Git и удаленным репозиторием (в нашем случае это Github) выглядит следующим образом.
Первый разработчик, который начинал работу над проектом, использовал команду git init в корневой директории проекта для того, чтобы инициализировать пустой Git-репозиторий. В этот момент Git создает в директории с проектом скрытую директорию, содержащую файлы, необходимые для его работы. Теперь первый разработчик может с помощью команды git add добавлять файлы проекта в индекс - то есть в зону, отслеживаемую git, а также может фиксировать изменения, создавая коммиты (git commit), и загружать их в удаленный репозиторий (например, на GitHub) с помощью команды git push.
Спустя некоторое время к работе над проектом подключается второй разработчик.
Поскольку первый разработчик пушил изменения файлов проекта на удаленный репозиторий, второй разработчик может скачать их себе на компьютер с помощью команды git pull и продолжить работу с учетом этих изменений.
Давайте повторим. В описанной работе использовались команды:
- git init - эта команда инициализирует работу Git для конкретного проекта. В папке с проектом создается скрытая папка, хранящая все файлы, необходимые Git для работы. Папка с этими файлами впоследствии будет загружена в удаленный репозиторий, и второй программист, скачавший проект, увидит у себя на компьютере все ранее созданные с помощью Git версии.
- git add - это команда, которая добавляет файлы проекта в индекс (или отслеживаемую зону), чтобы их можно было в какой-то момент закоммитить (то есть сохранить, зафиксировать).
- git commit - сохраняет все файлы проекта в текущем состоянии так, что мы в любой момент сможем вернуться к этому состоянию - посмотреть, как изменились файлы, или даже полностью вернуть проект к состоянию данного коммита.
- git push - загружает файлы в удаленный Git-репозиторий, чтобы их могли скачать другие программисты.
- git pull используют для того, чтобы скачать файлы из удаленного репозитория себе на компьютер.
Также Git позволяет создавать ветки. Это означает, что вы можете создать копию стабильного кода и продолжить работу в этой копии, не подвергая риску стабильную версию. Когда код с новой функциональностью готов, отлажен и протестирован, он может быть слит ("смержен", от слова "merge") в основную ветку со стабильным кодом.
С помощью этих функций Git позволяет команде разработчиков работать одновременно над разными задачами и поддерживать код в стабильном состоянии.
Также Git позволяет в любой момент понять, кто и когда внес изменения в определенный код, что существенно упрощает взаимодействия с коллегами. Например, в случае, если вы видите новые строки кода, которые вызывают у вас вопросы, с помощью Git вы можете разобраться, кто внес изменения именно в эти строки, и связаться с этим человеком для уточнения деталей.
Если произошла ситуация, при которой два разработчика изменили один и тот же файл, Git потребует от вас вручную отрегулировать такой конфликт.
Также благодаря Git у вас всегда под рукой детальная история изменений. С помощью комментариев к коммитам вы можете детально документировать ход работы над проектом и в случае необходимости разобраться, в какой момент что-то пошло не так, и откатиться к той версии, где ошибка еще не была сделана. Или просто выяснить, как выглядел код определенного класса или метода в определенной версии и внести правки в текущую версию, если это необходимо.
Для изучения Git рекомендуем в первую очередь ознакомиться со статьями на сайте topjava.ru:
- Введение в Git и GitHub: установка и настройка
- Введение в Git и GitHub: базовые команды
- Введение в Git и GitHub: ошибки использования
В них дается детальная инструкция по первоначальной настройке Git, GitHub, в том числе инструкция по настройке Access token в GitHub, что вам обязательно нужно будет сделать.
Также можно упомянуть официальную русскоязычную книгу Pro Git, которая доступна бесплатно в электронном виде.
В Git очень много команд, но в ходе курса мы будем использовать только самые необходимые из них. С git можно работать как через терминал с помощью команд, так и с помощью различных программ с графическим интерфейсом. Мы будем преимущественно использовать интеграцию IntelliJ Idea с Git, поскольку она очень удобна и существенно упрощает работу. Однако знать, как выполнять аналогичные операции в терминале, очень полезно.
В этом уроке мы сделали краткий обзор систем управления версиями и самой популярной из них - Git:
- разобрались в различиях Git и GitHub. Git - это система контроля версий, а GitHub - провайдер удаленных репозиториев, один из многих, доступных на рынке.
- кратко познакомились с тем, как Git работает. Узнали о командах git init, git add, git commit, git push и git pull.
- Также мы обсудили, что такое ветки и какие возможности они дают.
Если вы не работали раньше с Git, не беспокойтесь. В последующих уроках работа с Git будет изучаться на практике в ходе работы над проектом. Но дополнительно почитать о Git все же стоит.