Прежде чем он появится, я уже рассмотрел несколько тем по этой теме, включая следующие:
Я смотрю на переход на Mercurial (из Subversion) для нашей группы разработчиков. Прежде чем я это сделаю, я делаю обычный список плюсов/минусов.
Один из моих "профи" заключается в том, что слияние в Mercurial превосходит, но пока я не могу найти убедительных доказательств этого. А именно, на HgInit.com есть выражение, которое я не смог проверить:
Например, если я немного изменил функцию и затем переместил ее в другое место, Subversion действительно не помнит эти шаги, поэтому, когда приходит время для слияния, может показаться, что новая функция просто появилась из синий. В то время как Mercurial будет помнить эти вещи отдельно: функция изменена, функция перемещена, а это означает, что если вы также немного изменили эту функцию, гораздо более вероятно, что Mercurial успешно сменит наши изменения.
Это было бы чрезвычайно неотразимой функциональностью, но, насколько я могу судить, это просто горячий воздух. Я не смог проверить вышеуказанное утверждение.
Я создал репозиторий Mercurial, сделал Hello World и затем клонировал его. В одном я модифицировал функцию, совершил ее, а затем переместил, а затем зафиксировал ее. В другом я просто добавил еще одну выходную строку в функцию и зафиксировал ее.
Когда я сливаюсь, я получаю в основном тот же конфликт слияния, который я получал бы с помощью Subversion.
Я получаю, что mercurial может отслеживать файл переименования лучше и что есть другие преимущества DVCS, кроме слияния, но меня интересует этот пример. Является ли Джоэл Спольский вне базы, или я что-то упускаю?
Я не имею опыта в этой области, но похоже, что Mercurial хранит больше информации, которая могла бы, теоретически, лучше сходить на слияние (если бы разработчики также часто проводили проверки). Например, я считаю возможным, чтобы Mercurial получал контекстуальные изменения от сравнения нескольких изменений, например, меняю функцию, проверяю, перемещаю функцию, проверяю, а Mercurial связывает эти две части.
Однако слияние Mercurial, похоже, фактически не использует преимущества добавленной информации и, похоже, работает так же, как Subversion. Правильно ли это?