Mercurial: как переключиться на именованную ветку, если у тега такое же имя? - PullRequest
6 голосов
/ 20 января 2011

В данный момент я просто играю с Mercurial, и это, возможно, никогда не станет проблемой, но я просто создал репозиторий и добавил некоторые изменения. Я пометил его в одной точке, а затем создал именную ветвь в другой. И тег, и ветвь имеют одинаковые имена. Если я делаю hg update name, он переключается на помеченную версию. Есть ли способ переключиться на ветку, кроме как с помощью номера ревизии на ветке?

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

Ответы [ 2 ]

3 голосов
/ 20 января 2011

Вы получаете ревизию ветки, анализируя вывод hg branches.

Рассмотрим эту ситуацию (ветвь и тег с именами popular):

$ hg tags
tip                            3:afb4026bfe32
popular                        1:cea974d8cfc4
$ hg branches
default                        3:afb4026bfe32
popular                        2:aa7ede2bb3f6

В оболочках, похожих на bash, вы получаете ревизию branch popular с:

$ hg branches | grep popular | awk -F ':' '{print $2}'

Получение ревизии ревизия работает аналогично, используя hg tags.

Теперь ваш скрипт может обновиться до ветви /рассматриваемый тег.

2 голосов
/ 20 января 2011

Я думаю, вы могли бы сделать это с:

hg update -r "limit(heads(branch(name)),1)"

, которая использует функцию revsets (см. hg help revsets в более новом Mercurial).

Но если бы это был я, я бы просто удалил тег после избиения человека, который его создал, по голове и шее.

...