Skip to content

Latest commit

 

History

History
180 lines (144 loc) · 12.9 KB

video5-vcs-git.md

File metadata and controls

180 lines (144 loc) · 12.9 KB

Системы управления версиями, Git

video5-vcs-git.md

В этом уроке мы рассмотрим системы управления версиями и самую популярную из них - Git.



Git является де-факто стандартом среди систем управления версиями. Опрос, проведенный StackOverflow в 2021 году показывает, что Git используют почти 95% опрошенных разработчиков.

Когда-то популярная централизованная система контроля версий SVN (Subversion) практически полностью заменена Git. Но некоторые большие проекты все еще используют SVN. Примером такого проекта является WordPress. Я также все еще иногда встречаю SVN в вакансиях российских компаний.

Что такое Git и GitHub

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

Некоторые путают Git и GitHub, но это не одно и то же.

Git — это утилита, которую программист устанавливает у себя на компьютере для сохранения состояний проектов и контроля версий проекта.

GitHub — это провайдер удаленных репозиториев, сайт (хостинг) для хранения кода проекта и его изменений, для обмена файлами с членами команды проекта. Программисты могут создавать на GitHub публичные репозитории, в которых код доступен всем. Компании могут приобрести платный аккаунт на GitHub и вести свои проекты в закрытых репозиториях, доступ к которым имеют только члены команды проекта. Существуют и другие подобные сайты - провайдеры удаленных репозиториев, например, BitBucket, SourceForge, GitLab и т. д.

Как работают Git и GitHub

Говоря кратко, работа с 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, в том числе инструкция по настройке Access token в GitHub, что вам обязательно нужно будет сделать.

Также можно упомянуть официальную русскоязычную книгу Pro Git, которая доступна бесплатно в электронном виде.

Как мы будем использовать 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 все же стоит.