Очень много ошибок в тестах. Другие люди их тоже нашли. Но прошло очень много времени и похоже что ошибки не собираются исправлять. Очень обидно что на такой большой платформе такая медленная реакция. |
Git - операции с системой контроля версий
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) - программное обеспечение сохраняющее все версии возможного файла, и дающее возможность получить к ним доступ. Система контроля версий значительно ускоряет работу команды с кодом и снижает вероятность ошибок.