svn: правильный способ исправления критических ошибок при работе в ветке - PullRequest
0 голосов
/ 20 января 2012

Когда я хочу добавить новую функцию в наш проект, я создаю ветку для этой функции.Всякий раз, когда функция завершена, я объединяю ветку обратно в ствол.

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

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

Мои вопросы: Есть ли способ в SVN для обновления определенных файлов ветви из новых файлов магистрали?Кроме того, как вы думаете, будет ли правильный способ устранения критических ошибок?

РЕДАКТИРОВАТЬ: можно сделать это с клиентом TortoiseSVN?

Ответы [ 3 ]

4 голосов
/ 20 января 2012

Согласно этой странице , вы можете использовать svn merge для перехода от магистрали к ветви, если вы применяете правильный синтаксис.

Что-то вроде следующего:

svn merge -r 1001:1002 https://svn.dev.your/repo/trunk/src .

Где 1001 - это версия перед тем, что вы хотите объединить, 1002 - это версия того, что вы хотите объединить, и URL-адрес, соответствующий вашему транку.

2 голосов
/ 20 января 2012

Итак, как дела?

Вы исправляете это в своей функциональной ветви и объединяете это с транком?

Если так:

Вы можете указать конкретные ревизии, которые вы хотите объединить в другую ветку. Например, если вы исправили ошибку в ревизии 1001 на ветке, вы хотите объединить только эту ревизию.

Вам также может понадобиться использовать флаг --reintegrate. Это используется при слиянии информации с родительской ветвью. Например, если ваша ветвь пришла из транка и вы объединяете информацию из ветки обратно в транк, вы используете опцию --reintegrate.

Если вы уже изменили код в транке и просто хотите записать слияние , вы можете использовать опцию --record-only. Это записывает, что изменение ветви было включено в транк, но фактически не выполняет слияние.


Или, было ли исправление на стволе, и вы хотите, чтобы это было в вашей ветви функций.

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

Опять же, если вы вручную применили патч к своей функциональной ветке, сделайте svn merge, но используйте опцию --record-only. Это позволяет Subversion пометить исправление как объединенное с веткой, но фактически не выполняет слияние. Это предотвращает попытки последующего слияния исправить ваше исправление.

Цель ветвления функции не в том, чтобы позволить вам войти в пещеру и программу, а в том, чтобы предотвратить влияние функции на сборку, пока функция находится в нестабильном состоянии. Я препятствую особенным веткам. Я хочу, чтобы разработчики были осторожны и вносили небольшие изменения, чтобы убедиться, что сборка все еще хороша. Я также хочу, чтобы их развитие было видно всей команде. Если вы создаете ветку из ствола, а затем сливаете код обратно в ствол, вы не увидите историю в ветке с svn log, если вы также не выполните --use-merge-history, и тогда журнал станет немного грязным.

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

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

1 голос
/ 20 января 2012

Как вы думаете, будет ли правильный способ устранения критических ошибок?

Я думаю, что сейчас правильный путь. Если вы спросите меня, как мне решить эту проблему, я подумаю о

  • Создание ветки из ствола для исправления ошибок
  • ... код и коммит в ветку
  • объединить ветвь в ствол и в вашу функциональную ветвь
...