Я сравню 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/ для получения дополнительной информации.