Как закрытые ветки влияют на производительность 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 отлично справляется с изложением ваших (четырех!) Вариантов. Выберите то, что вам нравится, и будьте уверены, что есть множество людей, которым нравится тот, который вы выбрали, и по крайней мере у некоторых из них больше ветвей, чем у вас когда-либо будет.