Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Значит ли способность отмечать ветки как закрытые флагом --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

вместо merge-before-close:

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

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

Ответ 2

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

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

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

  • Лицо A: "У меня 100 веток, и я хочу избавиться от них!"
  • Лицо B: "Вы не можете. Вы можете скрыть их, но ветки Меркуриала навсегда".
  • A: "Но в git у меня есть 1000 ветвей и избавляться от них, когда захочу!"
  • B: "Да, в Mercurial они называются закладками".

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

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

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

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