Как закрытые ветки влияют на производительность Mercurial?

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

2 ответа

Решение

Имеет ли возможность помечать ветви как закрытые --close-branch пометить коммиты, как-то повлияет на это утверждение производительности?

Маркировка ветви закрыта hg commit --close-branch просто создает новую ревизию с close=1 маркер в метаданных набора изменений. Команды как hg branches а также hg heads будет знать, не показывать эту ветку / голову. Эти команды используют кеш веток для ускорения, и мы ожидаем, что кеш будет хорошо масштабироваться с количеством ветвей.

Однако есть некоторые операции, которые имеют сложность, линейную по количеству топологических головок. Это включает в себя протокол обнаружения, используемый до версии 1.9. Новый протокол обнаружения в версии 1.9 по-прежнему будет обмениваться топологическими заголовками в своих "выборках", но размер выборки ограничен 200 наборами изменений.

Могут быть и другие пути кода, которые по-прежнему линейно масштабируются по количеству заголовков, и поэтому мы предлагаем закрыть до слияния:

$ hg update bug-123
$ hg commit --close-branch -m "All fixed"
$ hg update default
$ hg merge bug-123

вместо слияния перед закрытием:

$ hg update default
$ hg merge bug-123
$ hg update bug-123
$ hg commit --close-branch -m "All fixed"

Последний подход оставляет повисшую головку на графе (топологическую головку).

Закрытие ветки, вероятно, не повлияет на производительность, но это не главное. Влияние на производительность невелико, и, конечно, я не рекомендовал избегать использования постоянных имен веток для коротких линий разработки. Вот соответствующая цитата из вики:

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

Причина, по которой MG и я (мы являемся основными ответчиками в обоих ваших связанных вопросах), заключается в том, что мы снова и снова наблюдаем за тем, как люди действительно раздражаются, когда узнают, что названия веток в Mercurial постоянны. Вот обычный обмен, который действует в IRC несколько раз в неделю:

  • Человек А: "У меня есть 100 веток, и я хочу от них избавиться!"
  • Человек Б: "Вы не можете. Вы можете скрыть их, но ветви Меркурия вечны".
  • A: "Но в git у меня есть тысячи веток, и я могу избавиться от них, когда захочу!"
  • Б: "Да, в Mercurial это называется закладками".

или аналогично:

  • Человек С: "Я назвал ветку" глупый маркетинг функций, который заставил меня добавить ", и я хочу внести это изменение без нажатия на название ветви".
  • Человек Б: "Вы не можете. Вы можете объединить его с настройками по умолчанию, но это имя является постоянным в наборе изменений. Вам нужно будет заново создать набор изменений, чтобы избавиться от него!"
  • C: "Но в git мои названия веток только локальные!"
  • Б: "Да, в Mercurial это называется закладками".

Если вам нужны постоянные, навсегда имена веток в ваших изменениях (и MG, моему соавтору по обоим этим вопросам, нравится именно это), то во что бы то ни стало используйте их, и не беспокойтесь о производительности. Но не беспокойтесь о том, как ваши инструменты представляют ветви: как и сам Mercurial, инструменты обычно создаются с учетом количества наборов изменений, а не количества ветвей. Поэтому они часто делают наивные вещи, например, помещают все имена ветвей в одно выпадающее меню. Эта проблема GUI будет в конечном итоге исправлена, когда именованные ветви станут более популярными.

Превосходное руководство Стива Лоша по ветвлению в Mercurial отлично справляется с изложением ваших (четырех!) Вариантов. Выберите то, что вам нравится, и будьте уверены, что есть множество людей, которым нравится тот, который вы выбрали, и по крайней мере у некоторых из них больше ветвей, чем у вас когда-либо будет.

Другие вопросы по тегам