Согласование Branch-per-task и исправление ошибки, когда ошибка была исправлена и объединена с транком, но на самом деле ошибка была недостаточно "исправлена"
Я недавно переключился с CVS на Plastic для контроля версий. Мы используем Jira для отслеживания проблем, а пластиковые ветви - для связи наборов изменений с открытыми проблемами. Благодаря этому переключателю я также применил подход к разработке для каждой задачи. Это привело к интересной дилемме, когда дело доходит до исправления ошибок, которые были повторно открыты (новый тестовый случай обнаружил, что ошибка не была полностью исправлена после итерации / выпуска для тестирования)
Я исправил ошибку, выполнил свои тесты (доступные в то время) против нее, и она прошла. Я объединил код и разработал вторую функцию, которая затрагивала тот же файл. Оба изменения были сделаны в разных ветках, и оба были успешно объединены в основную ветку сборки. Новая сборка идет в QA, и они обнаруживают немного другой способ воспроизвести ту же проблему (новый контрольный пример) и заново открыть ошибку. Исходная ветка ошибок не включает новые функции, добавленные в один и тот же файл, потому что они находятся в разных ветках (например, исправления ошибки 1 являются частью ветви функции 2 [так как эта ветка была создана после того, как оригинальное исправление было объединено с веткой сборки], но новый код функции 2 отсутствует в ветке ошибок 1)
Учитывая этот сценарий: Каков наилучший метод исправления ошибок, когда ошибка была вновь открыта, и вы используете подход ветвления на задачу?
- Было бы лучше клонировать ошибку в Jira, чтобы создать новую проблему
номер, создать новую ветку и исправить проблему, как будто она новая?
[это будет по существу основывать новое исправление на комбинации
оригинальное исправление + новая функция] (затруднит ли это слияние
между версиями, если вам пришлось отслеживать несколько исправлений для одного и того же
вопрос?) - Было бы лучше вернуться к первоначальной ветке, где
исходная проблема была исправлена, и исправьте ее заново, затем снова объедините,
с разрешением конфликтов каждый раз, когда такое происходит?
Замечания:
- Ветви создаются для связи с системой отслеживания ошибок (Jira), поэтому имена ветвей включают номер выпуска.
- Из-за этой ссылки я не могу создать 2 ветки с одинаковыми именами, если у них нет разных родителей. Таким образом, я мог бы создать вторую ветку из оригинальной, но не из ветки сборки (которая является родителем исходной проблемы)
Похоже, что метод ветвления на задачу вызовет многократное разрешение конфликта между исправлением ошибки и функцией, пока оба не будут полностью протестированы и разрешены, так как нет объединения этих ветвей задачи - только в магистраль, они оба будут непрерывно "Устарели" друг с другом.
Держу пари, что это не будет обычным явлением для одного разработчика, но это может происходить чаще с большими командами, даже если это не определенно между ошибкой и функцией (возможно, две функции могут влиять на один и тот же файл)), вызывая дополнительное разрешение конфликтов в течение жизненного цикла сборки / тестирования перед выпуском)
Этот процесс работает почти противоположно тому, как команда использовала CVS в прошлом, поэтому я пытаюсь найти "правильный" способ сделать это, чтобы минимизировать боль при продвижении с новой моделью. Раньше я просто собирался получить последние изменения из последней сборки и внести новое исправление - таким образом, избегая любых проблем разрешения конфликтов (но я не получаю преимущества ветвления на задачу).
Теперь мне нужно подумать о том, в какой ветке было сделано "оригинальное" исправление, и если это правильное место, где "новое" исправление должно идти, чтобы синхронизировать систему отслеживания проблем со списком изменений.
1 ответ
Есть несколько альтернатив и решений для ситуации, которую вы спрашиваете, я собираюсь объяснить мой любимый вариант для каждой ситуации, которую я могу придумать:
(1) 2 ветви интегрированы в "ветвь релиза" AKA "/main", и вы не хотите их вычитать.
В этой ситуации вам нужно создать новую задачу в Jira, связать ее с задачей, которая вызвала проблему, и установить ее как регрессию, если это так.
Теперь, когда у вас есть новое задание в Jira, вы можете создать новое отделение в Plastic. Эта новая ветвь будет основана на последнем cset / label в ветке "/ main".
Разработайте исправление и интегрируйте его в следующем выпуске, когда на нем будет все зелёное.
(2) Задачи не могут оставаться в "ветке Release", и они должны быть вычтены
Вы выполните вычитающее объединение наборов изменений, созданных в ветви "/ main", поэтому "ветвь релиза" будет возвращена к устойчивой точке.
Задача Jira вновь открывается, даже переоценивается.
Разработчик продолжит работу в ветке задач, чтобы привести код в соответствие с новыми требованиями.
Как только задача завершена, начинается обычный цикл ветвления на задачу.
Надеюсь, поможет!