Базовая модель работы Mercurial - очень простые анонимные ветви, которые образуют ориентированный ациклический граф (DAG), и, поскольку такие имена ветвей не имеют большого значения, вы будете иметь с ними дело намного меньше.Именованные ветви существуют в основном для организационных целей (ветки релизов и т. Д.), Для которых, я бы сказал, глобальное пространство имен имеет больший смысл или, по крайней мере, менее нежелательно.
Git имеет более сложную и управляемую модель ветвления, чемMercurial, где даже ваши локальные изменения обрабатываются как отдельная именованная ветвь, и, сталкиваясь с таким множеством именованных ветвей, вы должны представить пространства имен для управления ими.По той же причине, по которой Git использует концепцию ускоренного слияния, что неприменимо к Mercurial, поскольку вы не создали бы отдельную ветку.
Обе эти концепции добавляют дополнительную сложность, ив то же время блокируйте полезные функции, такие как сохранение имени ветви вместе с коммитом.Это связано с тем, что вы не можете хранить ветви пространства имен без некоторого глобального пространства, а git не имеет ни одного.
Недостаток аргумента для пространств имен, на который ссылается VonC выше, заключается в том, что предполагается, что существует проблема, если мы с вами оба создаемветвь называется «х».Нет, точно так же, как нет проблемы, когда вы создаете именованную ветвь, объединяете ее, а затем создаете другую с тем же именем.Правильно выбранное имя описывает, что делает ветвь, независимо от того, кто автор, и если вам нужно больше дифференцировать, автор хранится вместе с названием ветки, и все это является постоянным.
Я думаю,Это было очень хорошее решение проекта Mercurial, чтобы сохранить имя ветки вместе с коммитом.Так же, как сообщение о коммите и автор, контекст работы (ветка) является важной и полезной метаинформацией.Намного легче видеть поток наборов изменений при проверке истории, потому что вы можете видеть контекст, в котором они были созданы. В Git я понял, что без этой информации история быстро превращается в беспорядок беспорядочных строк, которые трудно сделатьголовы или хвосты.Я думаю, что наличие этого стоит компромисса с отсутствием пространства имен.
Я думаю, вы могли бы сказать, что философское различие заключается в том, что Mercurial рассматривает именованные ветви как постоянные метаданные, которые дают некоторую дополнительную информацию о строкеcommit, тогда как для Git ветки - это неуправляемая система управления для разработчиков поверх DAG.Между прочим, Mercurial также имеет их под названием «закладки» (начиная с версии 1.8 - основная функция), но на самом деле они скорее инструмент отслеживания и обрабатываются как метки, а не как ветви.