SVN: поддержка транка и одной ветки исправления ошибок - PullRequest
1 голос
/ 21 мая 2011

Я опишу сценарий, который я пытаюсь достичь. Меня интересует, возможно ли это с помощью Subversion:

  1. Я работаю над приложением, которое публикуется для общественности.
  2. Он создается с использованием CI-сервера Jenkins и автоматически загружается на веб-сервер для загрузки.
  3. Я продолжаю основную работу по разработке магистрали . Основные релизы приходят из багажника, но они не очень часто (2-3 раза в месяц).
  4. После выпуска я хочу иметь возможность быстро исправлять любые ошибки, поэтому у меня есть ветвь исправления ошибок , которая вышла из последней основной версии. Здесь исправления могут быть решены и выпущены довольно быстро (в течение дня).
  5. После каждого основного выпуска я хочу, чтобы эта ветка исправления ошибок как-то была перенесена в ствол. Другими словами, я не хочу постоянно создавать новые ветки выпуска по соображениям практичности: CI-сервер сохраняет тот же URL-адрес SVN, не требует больших проверок и т. Д.

Вопросы

  1. Возможен ли перебазирование без необходимости слияния из магистрали в ветку исправлений после каждого выпуска? Я беспокоюсь о различных конфликтах деревьев, так как я делаю много рефакторинга кода.
  2. Это просто сделать?
  3. Есть ли альтернативные стратегии? Я знаю, что могу переключить логику и продолжить основную работу по разработке на ветке, но я хочу избежать этого, потому что большинство изменений кода происходит на транке, и это требует меньших усилий по объединению.
  4. Mercurial - лучший вариант для такого сценария?

Ответы [ 2 ]

0 голосов
/ 23 мая 2011

Я нашел хотя бы часть ответа в этом SO-ответе: Что вы должны делать со старыми ветками SVN?

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

0 голосов
/ 21 мая 2011

то, что вы делаете, является правильным подходом, ваша проблема - объединить изменения обратно в транк .. затем просто объединить их.

Во-первых, когда вы отпустите, создайте ветку в этой точке - это вашекод для выпущенной версии.Вы можете исправлять ошибки прямо на нем, если хотите, что звучит так, как вам лучше всего работать.Когда вы вносите туда исправление, просто объедините изменения непосредственно со стволом.Вам не нужно перебазировать (или реинтегрировать) или что-то еще, просто возьмите ревизии, которые изменились, и объедините их в ствол почти так, как они сделаны.Это очень просто - вы выполняете простейшее слияние, которое SVN предоставляет (объединяет диапазон ревизий), просто выбираете ревизии, которые содержат изменения, которые вы хотите, и объединяете их в транк.

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

Mercurial мог бы быть лучше в этом - я бы рекомендовал попробовать, создать репозиторий, добавить несколько файлов, создать ветку, серьезно реорганизовать ваши файлы, а затем внести небольшое изменение и объединить его обратно.Посмотрим, не окажетесь ли вы в результате с аналогичными проблемами, которые возникают с SVN (поскольку вы пытаетесь проделать большую работу, и я не думаю, что какой-либо компьютер будет слишком хорош в таких масштабных изменениях).

Конечно, лучший ответ - перестать так много заниматься рефакторингом кода, который выглядит как другой продукт!

...