SVN объединить с переименованным каталогом в филиале - PullRequest
0 голосов
/ 23 мая 2018

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

Теперь предположим, что текущее состояние моего svn:

--r19--------r30----->my.package.baseline(trunk)
    |
    |--r24--r29------>my.newpackage.projectA(branch)
  • r19: создан филиал проекта
  • r24: переименован пакет филиала моей
  • r29: внесены огромные обновления
  • r30: исправлены ошибки и обновлен базовый проект

Если я хочу применить r30 ко всем другим моим веткам, будет ли это работатьхорошо, если я сделаю svn merge, даже если каталог / пакет уже изменился из-за r24?

1 Ответ

0 голосов
/ 24 мая 2018

Если то, что вы спрашиваете, - это то, что вы могли бы зафиксировать, ответ - да.

Если вам повезло, что файлы, которые были изменены в r24 и r29, это просто разные файлы с тем, что изменилось в r30,тогда это будет просто работать без проблем.

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

Мое предложение здесь, хотя, после слияния, сделайте коммит сразу после разрешения конфликта SVN, не беспокойтесь ни о каком логическом конфликте.Вы решаете логический конфликт в отдельном новом коммите.Это избавит вас от некоторых редких неприятностей, когда вы вернетесь в багажник из моего опыта.Как то, что svn делает с слиянием, он изменяет атрибут mergeinfo , для вашего примера mergeinfo в вашей ветке будет выглядеть примерно так:

trunk: r30

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

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

...