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

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

hg tag some-tag

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

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

Как Mercurial держит .hgtags синхронно по всем веткам? Я читал Mercurial Tag Design, но он не упоминает никаких особенностей.

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

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

1 ответ

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

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

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

Также:

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

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

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