Является ли неудобство, связанное с объединением в SVN до v1.5, к настоящему времени устаревшим, когда нехватка метаданных больше не имеет места?

11

Я начинаю работать с SVN, и многие источники говорят, что объединение в SVN очень сложно по сравнению с инструментами DVCS. В самые последние вопросы я мог бы найти здесь на РЭ с 2012 года.

Иногда упоминается, что причина в том, что SVN до v1.5 не имел метаданных, но сейчас SVN находится в версии 1.8.9.

Учитывая, что SVN сейчас намного более зрелый, чем v1.5, и особенно тот факт, что мы не использовали SVN 1.5, поэтому мы не страдаем от упомянутого недостатка метаданных - есть ли еще много обоснованности в этих аргументах против SVN?

Я понимаю, что у DVCS совершенно другой подход, который часто более желателен, но для тех, кто «должен» использовать SVN по какой-либо причине, слияние больше не является «адом», не так ли?

Торбен Гундтофте-Бруун
источник
3
@ TorbenGundtofte-Bruun - у меня сейчас нет времени, чтобы дать такой ответ, но я скажу «не бойся SVN». У него есть ограничения, но есть и у DVCS.
kdgregory

Ответы:

15

Это хорошо работает, если вы придерживаетесь простых случаев , но есть и некоторые сложные, которые этого не делают.

Ограничения, которые я могу придумать:

  • Он может найти только самого последнего предка, если он находится на одной из ветвей. Так что если вы создадите branches/thisи то, и branches/thatдругое, trunkа затем попытаетесь слиться branches/thisс ним branches/that, он не будет знать, что делать. Это означает, что вы можете только объединить ветвь с ее родителем. Вы можете столкнуться с этим, если запустите две ветви функций, а затем поймете, что функции взаимозависимы и нужно их объединить.

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

  • Добавленные файлы иногда вызывают ложные конфликты при последующих слияниях.

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

  • Не в последнюю очередь это медленно . Слияния по проекту любого серьезного размера часто занимает несколько минут , где большинство DVCS может сделать это под второй.

Ян Худек
источник
+1, отличный ответ. Вопрос об общем предке - это то, на что мне нужно обратить внимание. У вас есть ссылки на эти факты?
Довал
1
@Doval: опыт.
Ян Худек
возможно также стоит упомянуть, что у svn нет отдельной концепции тегов
jk.
Что касается вашей первой марки (спасибо за очень четкое объяснение!), Не может ли это быть решено с помощью ветви накопления, которая имеет ту же точку ветвления, что и ветви функций? (основано на Vance98 ) Действительно ли проблема возникает, когда две ветви функций имеют разные точки ветвления?
Торбен Гундтофте-Брюн
@ TorbenGundtofte-Bruun: самый последний общий предок не должен быть точкой ветвления. Вы можете найти его самостоятельно и указать Subversion применить изменения между конкретными версиями колышков. Но проблема в том, что это большая работа, и вы должны понимать, что должны это делать, потому что Subversion не обязательно поднимает руки, говоря, что не может слиться. Вместо этого он может найти общего предка, который не самый последний и порождает множество конфликтов.
Ян Худек
1

По моему опыту, слияние в SVN было «исправлено» в версии 1.6. Я работаю как в Mercurial, так и в SVN, и начиная с версии 1.6 SVN, объединение, по-видимому, занимает примерно одинаковый объем работы на обеих платформах. Единственное исключение может заключаться в том, что вы должны помнить, чтобы предоставить --reintegrateопцию при объединении из ветви обратно в транк с использованием SVN.

Это только мой опыт работы. Я ничего не знаю о внутренностях SVN.

Чарльз Э. Грант
источник
2
1.8, к счастью, может, наконец, обнаружить сам случай «реинтеграции». Но это только заботится о самых последних общих предках на локальных или удаленных. Это все еще не может найти это на третьей ветви.
Ян Худек