политика рабочего процесса в git-ветке - PullRequest
3 голосов
/ 12 июня 2019

Я новичок в Git и немного разбираюсь в Git.
В моей компании в настоящее время есть 1 программа, и программа делится на 5 продуктов.каждый продукт обрабатывается другой командой.

В настоящее время в моей компании git есть 5 веток, таких как:

  • dev = эта ветка предназначена для разработчика для сборки программы (dev.program.com)
  • test (альфа) = эта ветвь предназначена для тестирования тестером программы (test.program.com)
  • staging (бета) = эта ветка предназначена для тестирования программы тестером (двойная проверка ошибок) и клиентской программы.(stg.program.com)
  • staging-trx = дубликат подготовки и для разработчика, чтобы убедиться, что нет ошибок при конфликте при выборе вишни из стадии подготовки до ее передачи в производство.(stg-trx.program.com)
  • master = объединить с staging-trx и готово к производству (master.program.com)

Это наш рабочий процесс.

  1. разработчик заканчивает сборку программы, разработчик фиксирует и помещает файлы в тестовую ветвь, после чего тестер выполняет стресс-тестирование в тестовой среде.
  2. после завершения тестировщиковстресс-тест, разработчик делает тянуть, вишня выбирает зафиксированный файл из тестовой ветви и вставляет в промежуточную ветку.после этого тестер выполнит тестирование флэш-памяти.
  3. после того, как тестеры завершат тестирование флэш-памяти, разработчик сделает тягу, извлечет выделенный файл из промежуточной ветви и вставит в ветвь staging-trx, после чего разработчик объединит промежуточную версию-trx в главную ветку.

Но у меня есть некоторые проблемы.

Допустим, в одной команде есть 2 разработчика (Энди и Роберт), которые отвечают за продукт A.

  • Роберт обрабатывает новую функцию и исправляет ошибку
  • Энди обрабатывает исправленные ошибки

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

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

Итак, есть ли решение для этого случая?

1 Ответ

3 голосов
/ 12 июня 2019

Это обычно то, что gitworkflow адрес

gitworkflow

Вместо слияния A с B, B к C, C к Dи так далее, вы объединяете только ветки feature.

Каждый разработчик (или группа разработчиков) работает над веткой feature и объединяет ее с dev для интеграционного тестирования.

Но когда дело доходит до слияния с дополнительным этапом жизненного цикла разработки (тестирование в вашем случае, затем подготовка, qa, любое имя, которое вы хотите), вы не объединяете dev с test

Вы объединяете выбранные feature ветви (которые изначально были объединены в dev) с нужной вам веткой (тестирование, подготовка и т. Д.)

Таким образом, вы выбираете толькоподмножество функций, которые вы считаете готовыми и работающими вместе, в отличие от попытки вернуть «не готовые» функции из dev, а затем объединить dev в test.

I detailэта модель далее здесь и иллюстрирует это здесь

Один важный момент: ветвь dev (для объединения ветвей feature) имеет значение transient :он создается / уничтожается для каждого нового выпуска (в отличие от одной фиксированной вечной ветви dev, время от времени объединяемой с master).

Вы воссоздаете столько веток интеграции, сколько необходимо для тестирования функций вместе (dev, test, staging и т. Д.).
Затем, когда все готово, вы объединяете только правильные ветви feature в * 1048.* (или любую другую ветку release), удалите ветку dev и заново создайте ее для следующего выпуска.

Повторим:

Ветвь feature объединена несколько развремя:

  • один раз до dev для начального тестирования интеграции,
  • , затем та же самая ветвь feature снова объединяется в test напрямую (где может произойти вторая сборка)вам не нужно перестраивать в feature),
  • , затем снова объединять непосредственно в staging (каждый раз, потому что ветвь feature считается готовой перейти к следующему этапу разработки жизненного цикла)

Вы не выбираете вишню из (например) test в staging.
Вы объединяете ветвь feature, которая прошла test вследующий шаг в жизненном цикле интеграции (слияние feature с веткой staging)


В настоящее время Роберт все еще строит новую функцию, и эта новая функция повлияет на некоторые файлы и основные изменения в коде.
Так что Энди не может сделать какой-либо пересмотр кода, чтобы исправить ошибку, потому что почти всекод изменился.

Да, Энди может в ветке hotfix посвятить себя поддержке последнего кода, выпущенного в производство.
В этой ветке могут участвовать и Роберт, и Энди, и онибудет нести ответственность за применение их фиксаций исправлений к dev, если указанное исправление там необходимо (так как код изменился, возможно, это исправление ошибки больше не актуально в dev)

делает Эндислить из горячей ветки для проверки?потому что наш последний шаг - test => staging => staging trx => master

Весь смысл этого ответа - проиллюстрировать, что вам не нужно объединяться с *От 1103 * до B до C.
Для ветви hotfix вы редко объединяете ее где-либо еще, поскольку ветви dev или test имеют код, который значительно изменился со времени последнего выпуска.Вы только cherry-pick исправление фиксирует, что вам нужно вернуться к dev или test.


После того, как feature имеетЯ был уже в среде production, я уничтожу эту ветку feature, верно?

Ну ... да, "уничтожение" ветви feature удалит указатель на эту ветку.
Но фактические коммиты, которые были частью упомянутой ветви, все еще будут видны из коммитного слияния, сделанного в master.Это нормально, и может быть полезно для отладки этой функции позже: вместо большого финального коммита слияния вы можете позже проверить коммиты от второго родителя указанного коммита слияния: это коммиты из старой ветви функций.


В то время как новая ветвь feature A уже находится в ветке test, и тестер все еще проводит стресс-тестирование новой feature A, в работе есть ошибки, и Энди исправит ошибку feature B в hotfixРазветвление.

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

Вам понадобится вторая test ветка, выделеннаядля тестирования исправлений (хотя я бы выполнил эти тесты непосредственно на hotfix) и затем вернулось к master, чтобы обновить производство.
Суть: когда вы идентифицируете параллельную разработку (как в «тестировании ветвей функций» и «тестировании исправления»), требуются отдельные ветви .

Но, опять же, для исправлений ошибок, это типично для "аварийного пути", для которого у вас есть более короткий рабочий процесс ветвления и выделенная ветвь test-hotfix (назовите ее как хотите) для этого типа сценария.

Другой подход состоит в том, чтобы просто сбросить test ветвь и слить обратно только те ветви, которые вам нужны в срочном порядке (feature B в этом случае): test, merge Bдо постановки и т.д. ... вплоть до master.
Наконец, когда B готов, вы можете использовать ту же ветку тестирования, чтобы добавить (объединить) feature A обратно и продолжить тест на A в среде, в которой B уже был проверен.

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

...