Mercurial, "Ветвление с закладками" - PullRequest
8 голосов
/ 01 декабря 2010

Я прочитал этот документ: Руководство по ветвлению с Mercurial , в частности, раздел под названием Ветвление с закладками .

Там написано:

Теперь у вас есть две закладки (по сути, тег) для ваших двух веток в текущем наборе изменений.

Чтобы переключиться на одну из этих веток, вы можете использовать hg update feature, чтобы обновить набор изменений наконечника этой ветки и отметить себя как работающего в этой ветке. Когда вы делаете коммит, он перемещает закладку во вновь созданную ревизию.

Я попробовал это, но в итоге обе закладки одновременно переместились.

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

Хотя тестирование показывает иное.

Есть идеи?

Пример:

> hg init
> echo 1 >test.txt
> hg commit -m "initial" --addremove
adding test.txt

> hg bookmark main
> hg bookmark feature
> hg log
changeset:   0:c56ceb49ee20
tag:         feature
tag:         main
tag:         tip
user:        Lasse V. Karlsen <lasse@vkarlsen.no>
date:        Tue Nov 30 23:06:16 2010 +0100
summary:     initial

> hg update feature
0 files updated, 0 files merged, 0 files removed, 0 files unresolved

> echo 2 >test2.txt
> hg commit -m "feature 1" --addremove
adding test2.txt

> hg log
changeset:   1:9f2f5869b57b
tag:         feature                             <---- both were moved
tag:         main                                <----
tag:         tip
user:        Lasse V. Karlsen <lasse@vkarlsen.no>
date:        Tue Nov 30 23:06:45 2010 +0100
summary:     feature 1

changeset:   0:c56ceb49ee20
user:        Lasse V. Karlsen <lasse@vkarlsen.no>
date:        Tue Nov 30 23:06:16 2010 +0100
summary:     initial

Ответы [ 2 ]

16 голосов
/ 01 декабря 2010

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

С BookmarksExtension :

По умолчанию, когда несколько закладок указывают на один и тот же набор изменений, онибудут все двигаться вперед вместе.Можно получить более похожий на Git опыт, добавив следующий параметр конфигурации в ваш .hgrc

[bookmarks]
track.current = True

В вашем примере это сохранит закладку main вредакция 0.

Если опция track.current включена, текущая активная закладка помечается звездочкой в ​​выводе hg bookmarks.

ОБНОВЛЕНИЕ: СВ Mercurial 1.8 по умолчанию используется только перемещение текущей закладки, т.е. вышеупомянутая опция больше не нужна [1] .

3 голосов
/ 01 декабря 2010

Если вы прочитали описание BookmarksExtension , там написано:

Закладки - это ссылки на коммиты, которые автоматически обновляются при создании новых коммитов.

и

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

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

hg init foo
# edit, edit, edit
hg commit -A -m "root"
hg bookmark main
# edit, edit, edit ...
hg commit -m "main 1"
hg update 0
# edit, edit edit
hg bookmark feature
hg commit -m "feature 1"
...