Сведения об очередях слияния
Очередь слияния помогает повысить скорость, автоматив объединение запросов на вытягивание в занятую ветвь и гарантируя, что ветвь никогда не прерывается несовместимыми изменениями.
Очередь слияния предоставляет те же преимущества, что и ветвей "Требовать актуальности" перед объединением защиты ветвей, но не требуется автор запроса на вытягивание для обновления ветви запроса на вытягивание и ожидания завершения проверки состояния, прежде чем пытаться объединиться.
Использование очереди слияния особенно полезно для ветвей, которые имеют относительно большое количество запросов на вытягивание каждый день от многих разных пользователей.
После того как запрос на вытягивание прошел все необходимые проверка защиты ветви, пользователь с доступом на запись в репозиторий может добавить запрос на вытягивание в очередь. Очередь слияния обеспечит передачу изменений запроса на вытягивание всех обязательная проверка состояния при применении к последней версии целевой ветви и всех запросов на вытягивание, уже входящих в очередь.
Очередь слияния может использовать GitHub Actions или собственный поставщик CI для выполнения необходимых проверка для запросов на вытягивание в очереди слияния. Дополнительные сведения см. в разделе Документация GitHub Actions.
Дополнительные сведения о слиянии запроса на вытягивание с помощью очереди слияния см. в разделе "Слияние для запроса на вытягивание с очередью слияния".
Настройка рабочих процессов непрерывной интеграции (CI) для очередей слиянием
Примечания:
- Очередь слияния не может быть включена при правилах защиты ветви, использующих подстановочные знаки (
*
) в шаблоне имени ветви. - Очередь слияния ожидает отправки необходимых проверок, прежде чем она сможет продолжить слияние. Необходимо обновить конфигурацию CI, чтобы активировать и сообщить о событиях группы слиянием при необходимости в очереди слиянием.
- Проверки очередей слиянием и запросов на вытягивание объединяются и настраиваются в соответствии с правилами защиты ветви или наборами правил. Дополнительные сведения см. в разделе Управление очередью слияния.
Активация проверок группы слияния с помощью GitHub Actions
Событие необходимо использовать merge_group
для активации рабочего процесса GitHub Actions при добавлении запроса на вытягивание в очередь слияния.
Примечание. Если репозиторий использует GitHub Actions для выполнения необходимых проверка на запросы на вытягивание в репозитории, необходимо обновить рабочие процессы, чтобы включить merge_group
событие в качестве дополнительного триггера. В противном случае проверки состояния не будут активированы при добавлении запроса на вытягивание в очередь слияния. Слияние завершится ошибкой, так как обязательная проверка состояния не будет сообщаться. Событие merge_group
отличается от pull_request
событий и push
событий.
Рабочий процесс, сообщающий о проверке, которая требуется для защиты целевой ветви, будет выглядеть следующим образом:
on:
pull_request:
merge_group:
Дополнительные сведения о событии merge_group
см. в разделе "События, инициирующие рабочие процессы".
Активация проверок группы слиянием с сторонними поставщиками CI
При использовании сторонних поставщиков CI необходимо обновить конфигурацию CI, чтобы запуститься при отправке ветвь, которая начинается с специального префикса gh-readonly-queue/{base_branch}
. Это временные ветви, созданные от вашего имени очередью слияния, и содержат разные sha
от запроса на вытягивание.
Управление очередью слияния
Администраторы репозитория могут требовать очередь слияния, включив параметр защиты ветви "Требовать очередь слияния" в правилах защиты для базовая ветвь. Дополнительные сведения см. в разделе Управление правилом защиты ветвей.
После включения параметра "Требовать очередь слияния" можно также получить доступ к следующим параметрам:
-
Метод слияния: выберите метод, используемый при слиянии запросов на вытягивание в очереди: слияние, перебазирование или скваш.
-
Параллелизм сборки: максимальное количество веб-перехватчиков для отправки (между
1
и100
), регулирование общего объемаmerge_group
параллельных сборок CI. Это влияет на скорость слияний, которые может завершить очередь слияния. -
Только слияние неисправных запросов на вытягивание. Этот параметр определяет способ объединения групп очередей слиянием для объединения запросов на вытягивание.
Включено? Description Да Все запросы на вытягивание должны соответствовать необходимым проверкам, которые необходимо объединить. No Запросы на вытягивание, не прошедшие обязательные проверки, можно добавить в группу до тех пор, пока последний запрос на вытягивание в группе прошел необходимые проверки. Если последний запрос на вытягивание в группе прошел необходимые проверки, это означает, что проверки прошли для объединенного набора изменений в группе слиянием. Если этот флажок не выбран, может оказаться полезным, если у вас есть периодические сбои теста, но не требуется, чтобы ложные отрицательные значения удерживали очередь. -
Время ожидания проверки состояния: выберите время ожидания очереди ответа от CI, прежде чем предположить, что проверки завершились сбоем.
-
Ограничения слиянием: выберите минимальное и максимальное количество запросов на вытягивание для слияния в базовая ветвь одновременно (между
1
и100
), а время ожидания после чего очередь должна перестать ожидать больше записей и объединиться с меньшим числом.
Примечание. Ограничения слияния не объединяют merge_group
сборки. Ограничения слияния влияют только на слияние в базовая ветвь один или несколько merge_group
проверок сборки.
Ограничение слияния | Вариант использования |
---|---|
Максимальное количество запросов на вытягивание для слияния | Можно указать максимальный размер группы, который полезен при слиянии с базовая ветвь активировать развертывание, и вы хотите убедиться, что вы не развертываете слишком много изменений одновременно. |
Минимальные запросы на вытягивание для слияния | Можно указать минимальный размер группы, который полезен, если слияние с базовая ветвь активирует длинную сборку или развертывание CI, и вы не хотите хранить следующие записи в очереди. |
Время ожидания | Вы можете указать время ожидания для достижения минимального размера группы, что позволяет небольшим группам объединяться, если в пределах указанного периода времени больше нет PR. |
Как работают очереди слияния
Так как запросы на вытягивание добавляются в очередь слияния, очередь слияния гарантирует, что они объединяются в порядке первого в первом запуске, где всегда удовлетворены необходимые проверки.
Очередь слияния создает временные ветви с специальным префиксом для проверки изменений запроса на вытягивание. При добавлении запроса на вытягивание в очередь слияния изменения в запросе на вытягивание группируются в merge_group
последнюю версию base_branch
, а также изменения из запросов на вытягивание перед ним в очереди. GitHub объединяет все эти изменения в base_branch
после проверки, необходимые защитой base_branch
ветви.
Сведения о методах слияния см. в разделе "Сведения о слиянии запросов на вытягивание".
Успешный CI
При добавлении нескольких запросов на вытягивание в очередь слияния и при успешном выполнении временных merge_group
ветвей они объединяются. В следующем сценарии два запроса на вытягивание успешно добавляются в очередь и объединяются в целевую ветвь.
- Пользователь добавляет запрос на вытягивание #1 в очередь слияния.
- Очередь слияния создает временную ветвь с префиксом
main/pr-1
, который содержит изменения кода из целевой ветви и запроса на вытягивание #1.merge_group
Событиеchecks_requested
типа веб-перехватчика отправляется, и очередь слияния ожидает ответа от поставщика CI. - Пользователь добавляет запрос на вытягивание #2 в очередь слияния.
- Очередь слияния создает временную ветвь с префиксом
main/pr-2
, который содержит изменения кода из целевой ветви, запроса на вытягивание #1 и запроса на вытягивание #2 и отправки веб-перехватчиков. - Когда API GitHub получает успешные ответы CI для
merge_group
ветвей иmain/pr-2
временная ветвь будет объединена в целевую ветвьmain/pr-1
main/pr-2
. Целевая ветвь теперь содержит оба изменения из запроса на вытягивание #1 и #2.
Сбой CI
После группировки запроса на вытягивание с последней версией целевой ветви и изменения перед ним в очереди, если произошел сбой обязательная проверка состояния или конфликтует с базовая ветвь, запрос на вытягивание будет удален из очереди. На временной шкале запроса на вытягивание отобразится причина удаления запроса на вытягивание из очереди.
В следующем сценарии описывается, что происходит, когда CI сообщает о состоянии сбоя в одном запросе на вытягивание.
- Пользователь добавляет запрос на вытягивание #1 в очередь слияния.
- Очередь слияния создает временную ветвь с префиксом
main/pr-1
, который содержит изменения кода из целевой ветви и запроса на вытягивание #1.merge_group
Событиеchecks_requested
типа веб-перехватчика отправляется, и очередь слияния ожидает ответа от поставщика CI. - Пользователь добавляет запрос на вытягивание #2 в очередь слияния.
- Очередь слияния создает временную ветвь с префиксом
main/pr-2
, который содержит изменения кода из целевой ветви, запроса на вытягивание #1 и запроса на вытягивание #2 и отправки веб-перехватчиков. - Когда API GitHub получает состояние
main/pr-1
сбоя, очередь слияния автоматически удаляет запрос на вытягивание #1 из очереди слияния. - Очередь слияния повторно создает временную ветвь с префиксом
main/pr-2
только для хранения изменений из целевой ветви и запроса на вытягивание #2. - Когда API GitHub получает успешные ответы CI для
merge_group
ветви, временная ветвьmain/pr-2
будет объединена в целевую ветвьmain/pr-2
без запроса на вытягивание #1.
Переход в верхнюю часть очереди
При добавлении запроса на вытягивание в очередь слияния можно переместить запрос на вытягивание в верхней части очереди.
Примечание. Помните, что переход к верхней части очереди слияния приведет к полному перестроению всех запросов на вытягивание, так как переупорядочение очереди приводит к разрыву графа фиксации. В значительной степени использование этой функции может замедлить скорость слияний для целевой ветви.
В следующем сценарии описывается, что происходит при переходе пользователя к очереди.
- Пользователь добавляет запрос на вытягивание #1 в очередь слияния.
- Очередь слияния создает временную ветвь с префиксом
main/pr-1
, который содержит изменения кода из целевой ветви и запроса на вытягивание #1.merge_group
Событиеchecks_requested
типа веб-перехватчика отправляется, и очередь слияния ожидает ответа от поставщика CI. - Пользователь добавляет запрос на вытягивание #2 в очередь слияния.
- Очередь слияния создает временную ветвь с префиксом
main/pr-2
, который содержит изменения кода из целевой ветви, запроса на вытягивание #1 и запроса на вытягивание #2 и отправки веб-перехватчиков. - Пользователь добавляет запрос на вытягивание #3 в очередь слияния с параметром перехода, который представляет разрыв в графе фиксации.
- Очередь слияния создает временную ветвь с префиксом
main/pr-3
, который содержит изменения кода из целевой ветви и запроса на вытягивание #3, а также отправляет веб-перехватчики. - Очередь слияния повторно создает временные ветви с префиксом
main/pr-1
иmain/pr-2
содержит изменения из запроса на вытягивание #3 и отправляет веб-перехватчики.