Контекст workflow
Тема дорожной карты · Изучи Git
Git-контекст в CI-раннерах играет важную роль в автоматизации процессов сборки и развертывания. Эти переменные окружения предоставляют информацию о текущем коммите, ветке и событии, что позволяет эффективно управлять процессами разработки. Например, в GitHub Actions переменные GITHUB_SHA, GITHUB_REF, GITHUB_REF_NAME, и GITHUB_EVENT_NAME содержат ключевые данные для управления процессами. В GitLab аналогичные переменные включают CI_COMMIT_SHA, CI_COMMIT_REF_NAME и CI_PIPELINE_SOURCE. Эти переменные могут использоваться для тегирования Docker-образов, выбора целей деплоя, фильтрации задач по ветке или генерации строк версий. Однако следует быть осторожными с detached-HEAD в CI, так как GITHUB_SHA может указывать на merge-коммит, а не на вершину вашей ветки. Чтение документации платформы поможет лучше понять, что представляет собой каждый коммит.
Как это работает
Контекст workflow позволяет переписывать историю ветки, переигрывая коммиты на новую базу. Команда git rebase main берёт коммиты вашей ветки и переигрывает их поверх текущего основного коммита — это обеспечивает линейную историю без merge-коммитов. Interactive rebase (git rebase -i) позволяет squash, редактировать, переставлять или удалять коммиты. Однако rebase деструктивен, так как коммиты получают новые SHA. Поэтому никогда не следует выполнять rebase на ветке, на которой основана работа других разработчиков.
Когда применять
Rebase локальной ветки на основную ветку до открытия pull request (PR) позволяет поддерживать чистую историю коммитов и уменьшает количество "merge main into branch"-коммитов. Interactive rebase также полезен для squash WIP-коммитов и очистки сообщений перед push. Если ветка уже была запушена, можно использовать опцию --force-with-lease, чтобы безопасно перезаписать коммиты. Однако rebase основных веток, таких как main или develop, или любых общих веток, следует избегать.
Типичные ошибки
Одной из распространённых ловушек при работе с контекстом workflow является rebase общих веток и force-push, что может привести к тому, что все клоны будут сломаны. Другой распространённой ошибкой является использование interactive rebase и разрешение конфликтов на каждом шаге, что может привести к длинной цепочке конфликтов. В некоторых случаях merge может быть проще. Также часто разработчики теряют коммиты в путанице rebase, но reflog может помочь вернуть их.