Mercurial: создайте ветку без предварительного внесения изменений

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

В Subversion я могу создать ветку без внесения изменений (скопировав trunk в путь под tags) — возможно ли это сделать и в Mercurial?

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

Мой рабочий процесс для этого:

  • Создать ветвь функции.
  • Поработайте над этой функциональной веткой.
  • Создайте ветку релиз-кандидата.
  • Объедините функции, чтобы выпустить ветку-кандидата.
  • Развертывание, тестирование, исправление, развертывание, тестирование, исправление ветки-кандидата на выпуск.
  • Слияние ветки-кандидата на релиз со стволом.

Спасибо заранее.


person Neil Barnwell    schedule 25.01.2011    source источник
comment
Растет мнение, что именованные ветки не подходят для изменений на уровне функций в Mercurial, потому что их нельзя удалить, их можно только скрыть. Многие люди предпочитают резервировать именованные ветки для долгоживущих концепций, таких как «стабильная» и «экспериментальная», и использовать анонимные ветки, закладки или клоны-как-ветки для функций и ошибок. Вот отличная статья: stevelosh.com/ blog/2009/08/a-guide-to-branching-in-mercurial   -  person Ry4an Brase    schedule 25.01.2011


Ответы (3)


Это зависит от того, что вы подразумеваете под веткой.

Именованную ветку можно создать, дав ей имя, а затем зафиксировав ее, она станет новым набором изменений в истории, но вам не нужно явно изменять какие-либо файлы в рабочей папке, чтобы разрешить фиксацию. .

hg branch NEWNAME
hg commit -m "Created branch NEWNAME"

Вы также можете сделать это с помощью диалогового окна TortoiseHg.

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

person Lasse V. Karlsen    schedule 25.01.2011
comment
Чтобы ответить на ваш вопрос, следующее изменение будет фактически результатом слияния. TortoiseHg не позволит зафиксировать результат слияния где-либо, кроме одного из двух входов для слияния, если только мы не создадим сначала ветку. Тем не менее, процесс названной ветки, который вы описали выше, очень хорошо решает мою проблему, спасибо. - person Neil Barnwell; 25.01.2011

Вы можете проверить расширение закладок (которое скоро станет частью ядра Mercurial).
Если вы знакомы с тем, как работают ветки в git, то это почти то же самое.

И так же, как ветки в git, вы можете создать закладку, ничего не делая.

$ hg bookmark my-feature
person Idan K    schedule 25.01.2011

После создания ветки не забудьте нажать ее с помощью:

hg push --new-branch
person eldjon    schedule 10.06.2016