Подтвердить что ты не робот

Возможны ли зависимые запросы на тяги в Гитхубе?

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

Пример:

  • Запрос Pull 1: создание интерфейсов: интерфейс A и B и реструктуризация кода
  • Запрос Pull 2 ​​: интерфейс. Реализация и тесты (зависит от запроса pull1).
  • Запрос Pull 3: реализация интерфейса B и тесты (зависит от запроса pull2)
  • Запрос Pull 4: смешанный тест реализации (зависит от 2 + 3)

Есть ли способ в Github для одновременного хранения всех четырех запросов на тягу с зависимостями?

4b9b3361

Ответ 1

Насколько я понимаю, это невозможно, и, на мой взгляд, это один из главных недостатков GitHub по сравнению с другими инструментами для проверки кода. Gerrit автоматически настраивает зависимые проверки кода, когда вы нажимаете коммиты, которые зависят друг от друга, а в Phabricator это более болезненно, но все же возможно.

Также хорошо иметь в виду, что есть несколько способов, которыми люди используют PR GitHub. Обычный способ совместной работы с открытым исходным кодом состоит в том, чтобы разветкить репо и отправить запрос на повторное репо, но в других случаях (например, в рамках организации) вы можете подавать запросы на получение различий для всех в одном и том же репозитории. Я думаю, что в пределах одного репозитория более разумно получить что-либо в соответствии с зависимыми запросами на получение, так как вы можете настроить структуру коммитов/ветвей в этом репо.

Вот сообщение в блоге, которое описывает, как получить некоторые преимущества зависимых запросов на получение, которые, я думаю, требуют, чтобы все коммиты были в одном репо: http://graysonkoonce.com/stacked-pull-requests-keeping-github-diffs-small/

Резюме:

  • Чтобы отправить 5 зависимых запросов на извлечение, создайте иерархию ветвей с 5 уровнями и отправьте каждый PR как тот филиал, основанный на предыдущей ветки.
  • Чтобы обновить обзор 2 из 5, отправьте обновление в ветвь 2, затем выполните 3 операции слияния, чтобы интегрировать изменения в обзоры 3, 4 и 5.
  • Вам необходимо сразу внести все изменения, поскольку GitHub не поддерживает обновление целевой ветки PR. В этом примере все 5 обзоров кода были представлены как один коммит. GitHub теперь поддерживает обновление базовой ветки PR, поэтому PR могут быть добавлены по одному за раз.

Этот подход, кажется, работает хорошо для гигантских изменений, которые лучше всего анализировать небольшими порциями (хотя поддержание иерархии ветвей с глубоким n-уровнем является git rebase -i по сравнению с чем-то вроде git rebase -i), но на самом деле он не git rebase -i "конвейер проверки кода", где вы можете иметь зависимые различия на разных этапах проверки и получать более ранние из них по мере их просмотра.

Некоторые другие интернет-ресурсы, которые, кажется, также называют ограничение:

https://www.quora.com/Is-there-a-good-system-for-adding-multiple-pull-requests-to-GitHub

https://muffinresearch.co.uk/how-do-you-deal-with-dependent-branches-on-github/

Насколько я понимаю, люди, использующие PR на GitHub, обычно просто пытаются структурировать свой рабочий процесс, чтобы не полагаться на обзоры зависимого кода. Некоторые примеры:

  • Вместо того, чтобы разбивать изменение на независимо проверяемые инкрементные шаги, отправьте его в виде монолитного обзора кода, который сразу приземлится. GitHub по-прежнему позволяет разбивать рецензии кода на несколько коммитов, которые может просматривать рецензент, но они не могут быть одобрены/получены независимо.
  • Постарайтесь структурировать свою работу так, чтобы вы вносили изменения в несвязанные части кода и помещали их в независимые ветки, которые вы можете использовать для подачи независимых PR. Вы все еще можете сохранить локальную ветвь со всеми изменениями, примененными с помощью выбора вишни или других подходов.
  • Если у вас есть изменения, которые зависят от выдающегося PR, просто подождите, пока PR будет принят и объединен, прежде чем отправлять новый PR. Вы могли бы где-нибудь упомянуть, что у вас есть другой PR, который зависит от этого, и, возможно, это побудит рецензента кода перейти к этому ранее.