Должны ли сотрудники каждого частного репозитория Github разветвлять репо?

15

Я сейчас работаю над проектом, и у нас есть исходный код в частном репозитории на Github, с каждым из нас как соавтором.

Что нам неясно, так это то, как отделить каждую нашу работу.

Я думаю, что нам нужно сделать это:

  1. Каждый из нас должен раскошелиться на хранилище
  2. Когда мы будем готовы выдвинуть наш код, мы затем отправим запрос на извлечение в репозиторий руководителя проекта, который может одновременно использовать его как возможность для проверки кода.

Когда речь идет о частных репозиториях, это то, для чего предполагается использовать разветвление, или я слишком усложняю ситуацию?

JMK
источник
1
Да. Сделайте это так, как вы предложили здесь, только создайте команду и сделайте репо команды «главным» репо. Все делают PR, в том числе и руководитель проекта.
RubberDuck

Ответы:

7

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

Это может быть уместно, когда есть центральное главное репо и многие участники, которым не доверяют, имеют прямой доступ к этому репо. Это прекрасно работает для проектов с открытым исходным кодом, где каждый может внести свой вклад и отправить запрос на извлечение, который затем проверяется и объединяется группой основных сопровождающих. Использование нескольких репозиториев обеспечивает рабочий процесс на основе запросов на извлечение.

В небольшой, проверенной команде это не обязательно. Чтобы предотвратить попадание разных людей друг на друга, можно придерживаться такой стратегии, как Git Flow: каждая небольшая функция реализована в отдельной ветви функций. Когда функция завершена, она объединяется с основной веткой. Большинство команд связывают это с запросом на извлечение или проверкой кода в соответствии с соглашением, но достаточно доверяют, чтобы пропустить это при необходимости. Принимая во внимание, что отдельные репо приводят к тому, что разработчик публикует свое текущее состояние в своих разветвленных, но видимых для команды репо, в одном общем репо они переносят свои изменения в отдельную ветку функций. Делать всю разработку на master / trunk очень не рекомендуется в большинстве рабочих процессов.

Разница в конечном итоге заключается исключительно в управлении доступом, а не в реализованном рабочем процессе. Вы можете выполнять рабочие процессы на основе запросов на выборке с помощью любой настройки. С точки зрения сырого Git, между разветвлением и ветвью нет большой разницы - любой из этих подходов по существу разделяет историю проекта и позволяет добавлять коммиты, не затрагивая другие ветви / разветвления. Учитывая это, было бы гораздо лучше использовать один репозиторий в доверенной закрытой группе.

Амон
источник
1
Просто чтобы быстро повторить то, что говорит @amon, я работал в организации, где каждый разработчик должен был выходить из основного репо, что, по нашему мнению, было просто ненужным и неуклюжим дополнительным шагом. Я так и не понял, зачем это нужно, но наша оперативная команда не стала бы это обсуждать. Процесс был таким: коммит -> push -> запрос на получение -> ожидание -> еще немного -> попытка привлечь внимание ops-команды к IRC -> перейти к парням ops и попросить их посмотреть на запрос на выборку -> ждать -> код интегрирован -> повторить
DaveyDaveDave
1
Я действительно не одобряю этот рабочий процесс. Я столкнулся с очень серьезными конфликтами слияния с двумя разработчиками, которые сразу обратились к каноническому репо. Не говоря уже о том, что все же лучше, чтобы кто-то еще просмотрел ваш код. Намного проще отправлять запросы на извлечение, если у каждого из вас есть форк, и есть одно каноническое репо проекта. Ага-ага. Я знаю, что это не "распределено". Без разницы. Модель fork & PR работает лучше по моему опыту.
RubberDuck
@RubberDuck, это хорошая точка зрения, я подозреваю, что мой случай был редким в том смысле, что люди, ответственные за запросы на удаление, не могли просматривать код, что делало его бессмысленным. Я бы предложил другие специальные инструменты для проверки кода, например, gerrit мог бы быть более эффективным, но я понимаю, что разветвление может (должно) работать так же хорошо.
DaveyDaveDave
Проблема в том, кто определяет, когда функция готова перейти в мастер? Я также нахожу это грязным, чтобы работать с ветвями; Сотни веток в одном репо, и большинство из них не объединены или наполовину завершены. Почему они вообще существуют, если они даже не готовы к объединению? Управление доступом на 100% соответствует рабочему процессу, этот ответ только наполовину хорош.
Рудольф Олах
5

Это сработает, или вы можете использовать метод ветвления, где каждый участник имеет свои собственные ветви, которые, когда команда соглашается, объединяются с master.

Марго Спринг
источник
Спасибо, собираюсь пойти с другим ответом, так как имеет больше деталей, но да, я согласен :)
JMK