Опубликован: 18.04.2021 | Доступ: свободный | Студентов: 870 / 414 | Длительность: 04:36:00
Лекция 3:

Git - операции с системой контроля версий

< Лекция 2 || Лекция 3 || Лекция 4 >
Аннотация: Понятие GitFlow и стратегии работы с версиями, знакомство с GitHub-подобными системами, CI/CD на базе GitLab.

Git. Что такое система контроля версий?

Система контроля версий (англ. Version Control System) - программное обеспечение хранящееся все версии возможного файла, и дающее возможность получить к ним доступ. Существуют разные системы: git, mercurial, subversion(svn), Team Foundation server (TFS), однако наибольшую популярность завоевала система Git из-за простоты использования и внедрения в другие системы.

Что было до внедрения систем контроля версий и как они используются сейчас.

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

В текущих реалиях cистемы контроля версий являются важнейшей частью процесса Continuous integration, поскольку позволяют производить одновременную разработку, через доступное для всех разработчиков версионирование и через удалённый сервер со всеми версиями. Таким образом любой из разработчиков может получить последнюю версию рабочего кода, соединить её со своей и проверить работоспособность. Также в данный процесс тесно внедрены системы тестирования. Так, в некоторых случаях буквально на каждый коммит могут запускаться юнит-тесты и интеграционное тестирование на CI сервере, которое в автоматическом режим проверит работоспособность и совместимость кода.

Принципы Git

Разберём основные понятия git систем:

  • Репозиторий - обособленное хранилище кода внутри которого будут отслеживаться изменения файлов
  • Ветвь (branch) - отдельная цепочка (ветка) отслеживаемых изменений
  • Мастер branch - главная ветка в репозитории
  • Коммит - зафиксированная точка изменений
  • Удаленный сервер (remote server) - сервер на котором хранится репозиторий
  • Merge (слияние) - процесс слияния двух ветвей
  • tag - ссылка на определенный коммит

Git - это утилита для работы в командной строке (хотя есть и опции для работы через графический интерфейс)

Основные команды:

  • git pull - забрать изменения с удалённого сервера
  • git push - отправить локальные изменения на удалённый сервер
  • git branch - показать текущую ветку/список веток
  • git merge <branch_name> - влить в текущую ветку указанную
  • git add - добавить в текущее состояние изменённые файлы
  • git commit - зафиксировать изменения и сделать коммит
  • git stash - сохранить локальные изменения не создавая коммит и откатиться до состояния удалённого сервера

Пример добавления локальных изменений в удаленный репозиторий:


Для того чтобы забрать изменения с удалённого сервера:

~ git pull origin master

Git flow и Git стратегии

GitFlow - это методология работы с Git или, проще говоря, модель ветвления.

В разработке существуют различные стратегии ветвления для того чтобы все осуществлялось параллельно и без конфликтов.

Одна из самых популярных стратегий представляет собой достаточно простую концепцию:

  • Существует master ветка в которой всегда находится рабочий код
  • Из нее в нужные моменты создаются релиз ветки, из которых собирается результирующий артефакт.
  • Для разработки нового компонента используется feature-ветки которые создаются из мастера, проходят стадии разработки и затем вливаются обратно в мастер. (Опционально master ветка может быть заменена на dev ветку в которой собирается весь разрабатываемый код, и которая в свою очередь перед релизом вливается в master ветку)
  • Для создания срочных патчей создаются Ehotfix-ветки из релиза, разрабатываются и вливаются обратно в релиз, после чего релиз ветка вливается в мастер ветку.

Github-подобные системы

Github, gitlab, bitbucket, gitea, Azure Repos и т.д. - это всё программные продукты которые предоставляют функционал удаленного сервер с веб-интерфейсом для управления git-репозиториями. Однако за последние десять лет сама концепция хостинга git репозиториев сильно разрослась, и в текущий момент это представляет собой огромные комбайны позволяющие выполнять множество действий.

  • Размещение кода
  • Создание Issue (описанных проблем)
  • Создание Pull/Merge Request'ов - Issue с подготовленными ветками для слияния
  • Wiki - база знаний основанная на разметке markdown
  • В некоторых системах - CI-системы для сборки, тестирования и развертывания кода.

Пример pipeline на Gitlab

Gitlab - один из лучших примеров реализации концепции Pipeline as a Code, когда вся конфигурация сборочной линии полностью представлена в виде кода, который легко читается, и есть широкий функционал для автоматизации рутинных действий.


Выводы

Система контроля версий (англ. Version Control System) - программное обеспечение сохраняющее все версии возможного файла, и дающее возможность получить к ним доступ. Система контроля версий значительно ускоряет работу команды с кодом и снижает вероятность ошибок.

< Лекция 2 || Лекция 3 || Лекция 4 >
Рустам Тагаев
Рустам Тагаев

Очень много ошибок в тестах. Другие люди их тоже нашли. Но прошло очень много времени и похоже что ошибки не собираются исправлять. Очень обидно что на такой большой платформе такая медленная реакция.