Что делает Git лучше, чем Subversion для слияния?


person Brandon Montgomery    schedule 18.11.2010    source источник
comment
Я думаю, что многие споры о слиянии SVN исходят от поклонников DVCS. Слияние - одна из вещей, которые SVN значительно улучшил по сравнению с CVS, но плохая репутация CVS (заслуженно) может отразиться на SVN. В нашей команде мы очень много объединяем SVN, и я не знаю проблем.   -  person sbi    schedule 18.11.2010
comment
Очень похоже: stackoverflow.com/questions/2613525 /   -  person kolobos    schedule 18.11.2010


Ответы (2)


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

Subversion говорит: «Хорошо, сначала у меня была эта версия, а потом была эта версия». А затем, когда пришло время объединить, он берет две версии, сравнивает их и делает обоснованные предположения о том, как их объединить. Git, mercurial и подобные SCM, скажем, хорошо, сначала у меня ничего не было, затем кто-то внес это изменение, а затем кто-то другой внес это изменение и т.д. Когда наступает время слияния, в основном все, что им нужно сделать, это применить изменения в правильном порядок, исправляя номера строк здесь и там и принимая во внимание переименование файлов, но в основном это все.

У Subversion на самом деле недостаточно информации для интеллектуального слияния: она видит только различия, но не их происхождение.

person tdammers    schedule 18.11.2010
comment
Не удалось Subversion просмотреть версии и найти ту же информацию? - person Lasse V. Karlsen; 18.11.2010
comment
@Lasse: Конечно, есть. В чем разница между r1 и r2, если не различия между r1 и r2? Этот аргумент действительно ускользает от меня. - person sbi; 18.11.2010
comment
Что ж, если Subversion смотрит только на исходный файл, а затем на окончательный результат, он потеряет все промежуточные шаги, где DVCS, по крайней мере, использует эти шаги для выполнения слияния. Но мой вопрос в том, почему Subversion не смогла проанализировать промежуточные версии, чтобы найти эти шаги. Я все еще ищу хорошее объяснение того, откуда происходит волшебство слияния DVCS. - person Lasse V. Karlsen; 18.11.2010
comment
О производительности было бы мое предположение. Когда вы отслеживаете версии, обход их всех в поисках изменений обходится дорого. - person tdammers; 18.11.2010
comment
Я куплю это, но тогда аргумент заключается не в том, что DVCS лучше, чем CVCS при слиянии, а в том, что реализации, которые мы обычно выбираем, лучше. Другими словами, Git и Mercurial лучше, чем Subversion, но Subversion могла бы быть столь же хорошей, если бы она просто действовала по-другому, но при этом оставалась централизованной VCS. - person Lasse V. Karlsen; 18.11.2010
comment
@Lasse: из-за представления Subversion о ветвях как папках (ветвление - это копирование), что, по ИМХО, неверно и имеет далеко идущие последствия. - person Jakub Narębski; 18.11.2010
comment
В Subversion есть несколько плохих дизайнерских решений, но они не имеют прямого отношения к его централизации. - person tdammers; 18.11.2010
comment
Объектная модель Git основана на снимках версий, а не на наборах изменений. См. git-scm.com/book/en/v2/Git -Internals-Git-Objects - person Max Nanasy; 22.01.2015

Линус Торвальдс выступал с докладом на git, доступен на YouTube и заслуживает просмотра. В нем он отклоняет все решения для управления версиями, кроме git, а затем объясняет, почему git великолепен.

Лично мне было неприятно смириться с git, и я профессионально использую SVN каждый день. Я думаю, что svn достаточно быстр и выполняет ветвление и слияние достаточно хорошо для моих нужд.

Но я не эксперт в области управления версиями!

person Community    schedule 18.11.2010
comment
Ну, он вроде как объясняет, что git великолепен, но не столько, сколько как git удается быть великим. Например, он говорит, что git отслеживает весь проект, а не отдельные файлы. Тем не менее, простые эксперименты с перемещением текста в другие файлы параллельно с его изменением, по-прежнему вызывают конфликты слияния. - person Lasse V. Karlsen; 18.11.2010