Если мы обнаруживаем ошибку в какой-либо ветке, мы исправляем ее (проверьте Новый выпуск на фото). Но мы также хотели бы перенести это исправление в старый выпуск и 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?