2015-11-19 3 views
3

Я пытаюсь найти хороший рабочий процесс, когда два или более человека нажимают патч-набор на тот же набор изменений в Gerrit.Множество разработчиков, нажавших на одно и то же изменение

Я пытаюсь выполнить это с помощью команд командной строки Git (без git-review, IDE и т. Д.).

Снятие последнего патча с сервера Gerrit для конкретных изменений достаточно просто, но оттуда я не уверен.

Я думаю, что этот процесс будет:

  • принести последний патч-набор для изменения с сервера
  • перебазироваться против последнего патч набора
  • толчка

Но во время перебазирования он отмечает все входящие изменения как конфликт, даже если они не были изменены локально.

Возможно, это связано с тем, что последний загруженный патч-код не доступен локально локально.

Может ли кто-нибудь предложить, как несколько разработчиков могут работать с одинаковыми изменениями?

EDIT: Ответ на этот вопрос показаны с методами, описанными в: How to change a patchset and push it as a new one?

+0

Могу ли я спросить, почему? Обычно изменение принадлежит одному человеку, который несет за это ответственность.Если вам нужно несколько разработчиков, которые на самом деле работают на нем, это звучит для меня так, как изменение слишком велико и сложно, чтобы быть одним изменением. – poke

+1

Я знаю, что разные места работают по-разному, но в некоторых местах, где я работал, у нас есть разработчик программного обеспечения и дизайнер стилей/тегов по одной и той же проблеме, каждый из которых дает свой собственный опыт. На самом деле нецелесообразно делать эти отдельные изменения, потому что работа представляет собой одно изменение, и работа человека не стоит отдельно. –

+0

@poke, Удаленное парное программирование, в котором разработчики фиксируют ошибку вместе, является прецедентом, когда четко определенные небольшие изменения могут иметь несколько разработчиков, которые нажимают патч-наборы в один и тот же набор изменений –

ответ

1

Ваша проблема gerrit сама. Набор изменений в gerrit представляет собой единый код git, который переписывается всякий раз, когда изменяется набор изменений в рамках процесса обзора. Таким образом, вы получите историю, как это:

reviewed branch head --- changeset A, first revision 
        \-- changeset A, second revision 
         \- changeset A, third revision 

Теперь, когда рабочий процесс вы набросал в вашем вопросе, вы пытаетесь создать эту историю:

reviewed branch head --- changeset A, first revision --- changeset A, second revision 

Любое изменение, которое присутствует в обоих пересмотров будет конфликтовать с самим собой если вы сделаете это.

gerrit способ обойти это, чтобы принести последнюю ревизию ревизии, изменить набор изменений, а затем вставьте его в качестве новой редакции ревизии, заменив предыдущую ревизию, в надежде, что ни один разработчик не работал тот же набор изменений в то же время. Последняя часть - это то, где рабочий процесс на основе gerrit не может выполнить то, что тривиально делать с чистым git: разработчики не могут работать параллельно в одном наборе изменений. Это резко контрастирует с чистым git, где все разработчики могут свободно создавать новые коммиты, ветви и слияния, однако они, пожалуйста, и git может объединить все части. Но для этого, транзакции должны быть постоянными в git, принципе, который нарушен рабочим процессом gerrit.

Если вы спросите меня, то лучше всего избегать использования gerrit. Основной рабочий процесс нарушен, и вы намного лучше используете чистый git так, как он используется разработчиками Linux.

Смежные вопросы