Как перемещать исправления ошибок между ветвями в DVCS?

Если мы обнаруживаем ошибку в какой-либо ветке, мы исправляем ее (проверьте Новый выпуск на фото). Но мы также хотели бы перенести это исправление в старый выпуск и Main ветвь разработки:

a-->b-->c              (Old release)
|    
A-->B-->C-->D           (Main release)
    |
    1-->2-->bugfix-->4  (New release)

svn помните в svn: merge properties (из svn 1.6, 2009), ревизию с какими ветвями слились. Так что в следующий раз, если вы объедините область ревизий, ранее объединенные ревизии были пропущены из патча слияния.

Что делать с современной DVCS?

Мне нужно сделать простой патч и применить его к каждой ветви, или есть помощь от DVCS?

Примечание : Я не могу просто объединить новую ветвь с Main , поскольку предыдущие изменения также перемещаются в Main ветвь.

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

Меня интересует ответ на схему именованных веток и схему с несколькими репозиториями.

PS. Энди предлагает найти общего родителя для всех веток на какую ошибку влияет, обновите ее, примените исправление к ошибке и переместите исправление в затронутые ветки.

Обновляя старый набор изменений и внося изменения, вы создаете новую ветку. Я рекомендую создать именованную ветку (назовите ее bugID ), чтобы позже вы могли легко вернуться к ней.

Есть проблема с поиском общего родителя для всех веток, в которых мы заинтересованы исправить ошибку.

Первое решение (предлагающее Энди ) - использовать $ hg / git / bzr blame и внимательно проверять вывод всех затронутых файлов. Это включает в себя первое исправление ошибки в некоторых новейших наборах изменений, прежде чем вы обнаружите виноват , какой набор изменений вносит ошибку. Затем вам нужно перебазировать исправление (патч) для общего родительского набора изменений.

Другое решение - использовать $ hg / git / bzr bisect (вы также можете вручную выполнить обновления, чтобы найти первую ревизию в котором введена ошибка). Это может быть обширным, но более истинным решением, позволяющим вносить исправления в любые ветки, в которых присутствует ошибка.

Я думаю, что лучше сначала найти сначала BAD набор изменений, а затем исправить ошибку, вместо того, чтобы сначала исправить ошибку, а затем найти первый набор изменений BAD (кроме случая, когда вы уже знаете, как исправить ошибку). Также наличие различий, которые вводят, может помочь понять, почему это происходит.

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

Интересный вопрос возникает, если спросить, как функция обратного переноса из ветки разработки в ветку выпуска. Как видите, вы должны зафиксировать набор изменений функций, начиная с набора изменений, который был перед веткой выпуска. Но когда вы разрабатываете функцию, вы можете не знать, где вам нужна функция резервного копирования. С svn: merge VCS запомните для вас все бэкпорты. Как насчет DVCS?

8
задан gavenkoa 15 July 2011 в 17:18
поделиться