2010-08-02 1 views
4

Может ли кто-нибудь рекомендовать шаблоны рабочих процессов/использования, которые уменьшают стоимость/сложность слияний при использовании Agile с SVN?Хороший способ ограничить стоимость слияния для функции Филиалы в SVN

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

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

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

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

Слияния на нашем пути, и я пытаюсь определить, есть ли какая-то проблема процесса, когда мы режем против зерна SVN и вызывают проблемы. Я ищу лучшую стратегию управления филиалами, которая уменьшает усилия.

Может ли кто-нибудь рекомендовать хорошие статьи, стратегии или инструменты?

ответ

0

Несколько вещей, которые я могу думать о том, что помощь уменьшить возможные конфликты:

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

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

0

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

3

Я бы рекомендовал:

  • Держите функцию ветви синхронно со стволом. Сделать это обычной задачей, это не требует времени, если вы делаете это каждые пару дней. Когда вы готовы отбросить работу на багажник, убедитесь, что она получает здоровую дозу QA и использует слияние . Reintegrate запрашивает свойство svn: mergeinfo в файлах и папках, чтобы гарантировать, что изменения, синхронизированные с соединительной линии, в вашу ветвь функции не синхронизируются назад (циклические слияния).

  • Убедитесь, что вы только отделились от ствола, не отключайте ветви от других ветвей. У нас были случаи, когда свойство COPY-TO в переименованном файле не отслеживалось, когда файл был объединен. Это может привести к тому, что SVN не удалит все правильно, и эта проблема усугубляется, если у вас есть каскадные ветви.

  • В прошлом у нас были серьезные проблемы с svn: mergeinfo: были ошибки в системе, когда она была впервые представлена, и в итоге она помещала mergeinfo практически в каждый файл и папку. Это вызвало у нас больше вреда, чем пользы при слиянии, оно просто сбилось с толку, поэтому мы решили очистить mergeinfo от каждого файла и папки отдельно от корневой папки нашего репозитория. Затем это действует как хорошее резюме активности отрасли. Если вы это сделаете, вы не получите все возможности перемещения/перемещения файлов SVN-отслеживания, но у нас было так много проблем, что в итоге оказалось, что нужно быстрее вручную разрешать конфликты деревьев, где это необходимо. Примечание: эта политика является спорным. Я не рекомендую делать это, если вам это действительно нужно, но это сработало для нас.

  • Говоря о перемещении папки/файла, не сходите с ума, реструктурируя свою кодовую базу. Перемещайте файлы и папки только в том случае, если это действительно необходимо, и если вы обеспечиваете связь с изменениями в своей команде.

  • То же самое касается переименования, не переименовывая материал без уважительной причины. Имена файлов в репозитории чувствительны к регистру, но файлы Windows не чувствительны к регистру. Поэтому, если вы измените файл с 'foo.txt' на 'Foo.txt', а затем вернитесь к 'foo.txt', во время слияния SVN попытается удалить, добавить, а затем снова добавить файл. Он думает, что он другой, но файловая система будет жаловаться, и он выйдет из слияния. Это очень неприятные случаи.

  • Следуя замечаниям Sander Rijken: наряду с тем, чтобы убедиться, что у вас нет локальных изменений, также рекомендуется регулярно удалять любые незарегистрированные файлы. Если у вас есть файл, плавающий вокруг которого попытка слияния для записи через SVN может запутаться. У нас есть несколько рубиновых сценариев для подобных случаев.

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

  • Наконец, убедитесь, что вы постоянно обновляете свои клиенты SVN.

  • О да, и наличие хорошего инструмента для слияния может сделать весь процесс намного менее болезненным. Я использую Araxis, но я слышал, что инструмент слияния в SmartSVN тоже хорош.

+0

Некоторые замечательные советы, спасибо, что нашли время, чтобы написать все. –

Смежные вопросы