Я начинаю работать с SVN, и многие источники говорят, что объединение в SVN очень сложно по сравнению с инструментами DVCS. В самые последние вопросы я мог бы найти здесь на РЭ с 2012 года.
Иногда упоминается, что причина в том, что SVN до v1.5 не имел метаданных, но сейчас SVN находится в версии 1.8.9.
Учитывая, что SVN сейчас намного более зрелый, чем v1.5, и особенно тот факт, что мы не использовали SVN 1.5, поэтому мы не страдаем от упомянутого недостатка метаданных - есть ли еще много обоснованности в этих аргументах против SVN?
Я понимаю, что у DVCS совершенно другой подход, который часто более желателен, но для тех, кто «должен» использовать SVN по какой-либо причине, слияние больше не является «адом», не так ли?
version-control
svn
merging
Торбен Гундтофте-Бруун
источник
источник
Ответы:
Это хорошо работает, если вы придерживаетесь простых случаев , но есть и некоторые сложные, которые этого не делают.
Ограничения, которые я могу придумать:
Он может найти только самого последнего предка, если он находится на одной из ветвей. Так что если вы создадите
branches/this
и то, иbranches/that
другое,trunk
а затем попытаетесь слитьсяbranches/this
с нимbranches/that
, он не будет знать, что делать. Это означает, что вы можете только объединить ветвь с ее родителем. Вы можете столкнуться с этим, если запустите две ветви функций, а затем поймете, что функции взаимозависимы и нужно их объединить.Хотя он утверждает, что может отслеживать переименования, объединение ветвей, когда файлы были перемещены с одной стороны и изменены с другой, не всегда находит нужные файлы для слияния, а ручное их исправление несколько утомительно, поскольку не оставляет необходимой информации где-либо в рука.
Добавленные файлы иногда вызывают ложные конфликты при последующих слияниях.
Поскольку Subversion не имеет отдельной концепции ветвления, вы можете объединить только поддерево проекта, и это может очень быстро привести к большой неразберихе. Настоятельно рекомендуется всегда объединять целые ветви. К сожалению, по некоторым причинам иногда свойства информации о слиянии появляются в подкаталогах, даже если они кажутся излишними и слияние было правильно выполнено для всей ветви.
Не в последнюю очередь это медленно . Слияния по проекту любого серьезного размера часто занимает несколько минут , где большинство DVCS может сделать это под второй.
источник
По моему опыту, слияние в SVN было «исправлено» в версии 1.6. Я работаю как в Mercurial, так и в SVN, и начиная с версии 1.6 SVN, объединение, по-видимому, занимает примерно одинаковый объем работы на обеих платформах. Единственное исключение может заключаться в том, что вы должны помнить, чтобы предоставить
--reintegrate
опцию при объединении из ветви обратно в транк с использованием SVN.Это только мой опыт работы. Я ничего не знаю о внутренностях SVN.
источник