Обзор кода Gerrit или модель Github для вилки и вытягивания?

64

Я начинаю программный проект, который будет разработан командой И сообществом. Раньше меня продавали на Gerrit, но теперь модель запросов на разветвление и извлечение Github, кажется, почти предоставляет больше инструментов, способов визуализации фиксаций и простоты использования.

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

user1366476
источник

Ответы:

84

Основное различие между рабочими процессами Gerrit и GitHub заключается в том, как моделируются изменения.

В Gerrit каждый коммит - это изменение, которое стоит само по себе. Хотя Gerrit покажет вам взаимосвязи между коммитами, обзоры выполняются на основе коммитов. Команды, которые умеют разбивать большие изменения на маленькие, автономные коммиты, скорее всего, будут иметь больше успеха с Герритом. Однако, поскольку модель Геррита включает в себя последовательные ревизии определенного коммита, она поощряет рабочие процессы Git, к которым многие разработчики не привыкли, такие как внесение изменений в более ранний коммит и повторное его выдвижение или объединение растущего набора коммитов из тематической ветви в один совершить.

В Github запрос на выборку моделирует отношения между двумя ветвями. Ожидаемый рабочий процесс на Github - зафиксировать одно или несколько изменений в ветке темы (часто в развилке репозитория, но не обязательно) и создать запрос на извлечение между этой веткой и веткой «upstream». В этом случае проверяется набор коммитов, который продолжает расти по мере продолжения обзора. Результатом является набор изменений, которые затем можно объединить атомарно, когда они будут завершены. Запросы извлечения могут быть эффективными при отслеживании изменений с большей областью действия, которая может быть реализована в течение нескольких коммитов. Запросы на извлечение также поддерживают рабочие процессы SCM, к которым привыкло больше разработчиков, например, ответ на комментарий к отзыву путем отправки последующего коммита в той же ветке.

Большим преимуществом в пользу Github является количество разработчиков, знакомых с ним, по сравнению с Gerrit. Gerrit может быть популярен среди опытных пользователей Git, но его использование без трения требует среднего или продвинутого знания git, а также терпимости к крутой кривой обучения.

Преимущество Геррита в более глубоких отношениях с Git. Pull-запросы Github достаточно далеки от стандартной модели данных Git, поэтому для создания запросов Pull необходимо использовать веб-интерфейс Github или его собственный API. Интерфейс Gerrit для создания и обновления изменений - это сам протокол git.

Мартин Аткинс
источник
8
Спасибо Мартин, это интересный ответ. Я давно хотел посмотреть на Геррита, но думаю, я отложу это на полку. Если это поощряет редактирование истории и фиксацию изменений, я не хочу иметь с этим ничего общего. * 8 '(
Марк Бут
15
Просто чтобы прояснить (я часто использую Gerrit на своем рабочем месте), что Мартин говорит здесь: «Gerrit ... поощряет рабочие процессы Git ... такие как внесение изменений в более ранние коммиты и их повторное нажатие или подавление растущего набора коммитов. ..в одну фиксацию "совершенно правильно. Мое пояснение заключается в том, что комментарий @ MarkBooth о «истории редактирования» не соответствует словам Мартина. Внесении изменений и дополнений фиксаций (пока еще на Геррит, а не еще слились происхождения / мастер) вообще не связаны с «историей редактирования». На самом деле, этот рабочий процесс прекрасно работает. «Плохое» редактирование истории, на которое ссылается Марк Бут, - это повторное перемещение отредактированных историй в origin / master.
ликетический
2
Спасибо за разъяснения @likethesky, но у меня есть более буквальное толкование «истории редактирования», и, насколько я понимаю, все, что приводит к наборам изменений, которые содержат контент, который вы явно не зафиксировали, - это «история редактирования». Однако я понимаю, что это довольно драконовская интерпретация, которой придерживаются немногие. * 8 ')
Марк Бут
2
Справедливо. :-) Не уверен, что я понимаю, что вы подразумеваете под "наборами изменений, которые содержат контент, который вы явно не фиксировали", поэтому, пожалуйста. подробно ... Я предполагаю, что вы не говорите, что вы никогда не делаете временные (локальные или совместно используемые членами команды через удаленные ветви) коммиты типа "WIP: это попытка решить обсуждаемый нами вопрос об архитектуре", за которым следует более полезный сквош / поправка с надписью «Выпуск 123: переработан XYZ для повышения устойчивости и упрощения горизонтального масштабирования» в качестве окончательного сообщения о фиксации для этой работы. Но в любом случае, конечно, вы можете использовать git любым способом, который сделает вас счастливым!
ликетический
7
Это фантастический ответ. Кроме того, я обнаружил, что запросы на получение данных GitHub способствуют меньшим, более итеративным фиксациям и часто заканчиваются гораздо более описательным журналом git, который показывает не только рабочий продукт, но и рабочий процесс. Обзор кода Геррита способствует созданию более чистой истории хранилища (фактических коммитов слияния очень и очень мало) с более крупными и полированными коммитами.
Тофир