Распределенные системы контроля версий объединяют детали легкости - PullRequest
1 голос
/ 17 июня 2010

Я только что прочитал блог-пост Джоэла о распределенных системах контроля версий и не могу понять основную идею. Он говорит, что SVN думает с точки зрения версий, а Mercurial думает с точки зрения изменений. И, по словам Джоэла, это решает проблемы слияния.

Я слышал эту идею несколько раз и до сих пор не задумал ее. Как я знаю, механизм слияния SVN также основан на изменениях (diffs). Так в чем же разница? У меня нет опыта работы с распределенными системами контроля версий, но я активно использую ветвление / слияние SVN и у меня не было с этим серьезных проблем. Конечно, иногда возникают конфликты слияния (когда один фрагмент кода был изменен в обеих ветвях). Но я не вижу способа, как эта проблема может быть решена автоматически с помощью какой-либо системы контроля версий.

Ответы [ 2 ]

1 голос
/ 17 июня 2010

В SVN вы говорите о том, что какие-то конфликты деревьев не могут быть обработаны Subversion, и слияние завершится неудачно.По сравнению с git, hg и bzr это действительно git, hg или bzr могут справиться с этими ситуациями, а SVN на данный момент не может.Я рекомендую прочитать о проведенном бакалавриате , которое было проведено, и, конечно, в то же время некоторые из этих проблем были решены.

0 голосов
/ 17 июня 2010

Я сравню SVN с Mercurial, так как это единственная DVCS, которую я использовал до сих пор. SVN использует файлы и создает копии каждого файла для каждой следующей версии, в то время как Mercurial собирает наборы изменений. У вас есть полная версия файла 1.0 в SVN, и у вас есть еще одна копия полной версии файла 1.1. В Mercurial у вас есть полный файл один раз в версии 1.0. Тогда у вас есть правила, такие как «добавить 2 строки здесь и удалить 3 строки там», чтобы создать версию 1.1. Mercurial просматривает всю историю и применяет изменения к вашей локальной копии во время обновления, но нигде не сохраняет ваш полный файл версии 1.1.

Однако описанная вами проблема технически не решается и в Mercurial. Я попробовал очень простой пример: пусть два человека добавляют одновременно одну строку в конце одного и того же файла. Первый совершает и толкает без проблем. Второе необходимо вытащить и обновить первым, чтобы принять последние изменения. И вот конфликт слияния, который раздражает! Mercurial не знает, хочет ли второй человек добавить еще одну строку или хочет изменить строку, только что добавленную первым человеком. Это то же самое, что SVN здесь - вы должны объединить вручную ... Так что никакой магии нет совсем

Вы можете прочитать http://hginit.com/ для получения дополнительной информации.

...