Nano Hash - криптовалюты, майнинг, программирование

Как теги в Mercurial автоматически распространяются на все ветки?

Допустим, у меня есть более 50 веток функций в Mercurial. Если я сделаю:

hg tag some-tag

в одной из ветвей функций он, кажется, распространяется на все ветки. Независимо от того, в какой функциональной ветке я нахожусь, hg tags покажет все теги. Это все хорошо и хорошо. Но если я сделаю hg log, он скажет мне, что набор изменений, содержащий изменение на .hgtags, произошел в определенной ветке:

changeset:   4:ea48c727fbcd
branch:      feat1
tag:         tip
user:        Daniel <[email protected]>
date:        Mon Dec 21 20:15:11 2015 +0100
files:       .hgtags
description:
Added tag feat-1.0 for changeset 3c81a17d4b31

Как Mercurial обеспечивает синхронизацию .hgtags во всех ветках? Я прочитал Дизайн тегов Mercurial, но там не упоминается никаких подробностей.

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

Это отставание действительно раздражает, так как я вижу последний тег в файле .hgtags, но hg tags не отображает последний тег. Создание еще одного тега иногда решает проблему (и, возможно, это ошибка в Rhodecode), но я хотел бы знать, как это работает, чтобы лучше понять лежащий в основе механизм.

21.12.2015

  • Какую версию вы используете? Mercurial 3.4 и 3.5 имеют довольно значительные улучшения производительности кэша тегов (а в 3.3 производительность снизилась). 22.12.2015
  • Не обращайте внимания на мой предыдущий вопрос, я неправильно понял, что вы имели в виду под отставанием. Если в hg tags отсутствует что-то, что есть в вашем текущем .hgtags (и тег не был удален в другой ветке или в другой ревизии — так вы иногда можете законно увидеть тег в .hgtags, но не в hg tags), это будет означать, что есть ошибка. К вашему сведению, Mercurial использует кеш, чтобы избежать довольно дорогостоящих вычислений и обновлений, которые появляются по мере поступления новых коммитов; если есть ошибка, это, скорее всего, проблема с кешем тегов. 22.12.2015

Ответы:


1

Цитата из документации:

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

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

Также:

Если есть только одна голова, учитывается только последняя строка, где стоит тег. Если имеется несколько заголовков, предыдущие определения тега используются для определения того, какой заголовок содержит самый последний тег... Если тег указывает на 00000000000000000000000000000000000000000, он считается удаленным.

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

21.12.2015
Новые материалы

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

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

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

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

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..