Как закрытые ветки влияют на производительность Mercurial? - PullRequest
19 голосов
/ 07 февраля 2012

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

Ответы [ 2 ]

28 голосов
/ 07 февраля 2012

Влияет ли возможность пометить ветви как закрытые с флагом --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"

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

23 голосов
/ 07 февраля 2012

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

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

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

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

или аналогичным образом:

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

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

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

...