2010-04-25 2 views
19

Я хотел бы сделать некоторые экспериментальные работы в проекте hg. Поэтому я хотел бы создать ветвь, зафиксировать ее. И если эксперимент работает, я могу объединить его обратно в главную ветку.Как развиваться на ветке в HG?

В мерзавец, я могу сделать

$ git branch experimental 
$ git checkout experimental 
(edit file) 
$ git commit -a 
$ git checkout master 

Я прочитал A Guide to Branching in Mercurial. Он сказал hg branch feature. Но что дальше? Я не следую.

ответ

24
$ hg branch experimental 

(edit file) 
$ hg commit 
$ hg update default 
+0

Мне нужно, чтобы hg зафиксировал все изменения, которые я сделал в «default», прежде чем «hg branch experimental»? – michael

+1

Да, если вы хотите, чтобы ожидающие изменения вошли в ветку по умолчанию. В противном случае ожидающие изменения последуют за вами в ветку, которую вы назвали «экспериментальной», и вы можете их зафиксировать. – sblom

+0

вам понадобится «hg merge experimental» после того, как вы тоже вернетесь к умолчанию. – jacobbaer

8

Если это не большая функция (т. Е. Ветка не обязательно должна иметь имя), это довольно просто.

Предположим, ваш репозиторий находится в редакторе X. Вы работаете над функцией столько, сколько хотите, совершаете, совершаете, совершаете, и если вы довольны результатом, продолжайте, как будто вы знали, что это будет работать все время. ;) Если вы недовольны, сделайте hg update X и продолжите разработку оттуда. Вся работа, которую вы сделали в эксперименте, станет анонимной веткой.

Как ни странно, это appears, что Git не обеспечивает такой способ работы с анонимными ветвями, что может вас смутить.

+1

Кроме того, документация Mercurial, особенно в hg wiki, немного неточна и потенциально запутанна в этой области. То, что вы называете «анонимными ветвями», - это случаи того, что Mercurial называет «головами». «Голова» - это набор изменений без ребенка. Набор изменений всегда относится к одной и только одной именованной ветке; это может быть ветка по умолчанию, имя которой «default». Именованная ветвь всегда имеет хотя бы одну «голову», но может иметь больше. Делая «hg update X» и commit, вы создаете новый заголовок в названной ветви, к которой принадлежит X, но голова не является ветвью в смысле «ветви» hg. –

+1

Я не уверен, что вы правы: Mercurial называет «головами» листовые ревизии ветвей и вызывает ветви «анонимных ветвей», которые явно не указаны. Тот факт, что «именная ветвь» обычно состоит из нескольких анонимных ветвей, никому не помогает легко понять ее, но вот как это работает ... –

+1

Текущая страница 'hg' является самой близкой к окончательной слово на эту тему, и это единственное место, где термин «анонимная ветвь» используется в источнике hg.Глоссарий справочной страницы пытается различать термины «ветвь ветви», «голова хранилища» и «топологическая голова», а также «именованная ветвь» против «анонимной ветви» и «топологическая ветвь». Это, безусловно, может сбивать с толку и трудно объяснить с высокой точностью из-за перегрузки терминов. К счастью, большую часть времени это не имеет большого значения. –

20

Обратите внимание, что git branch является другой от hg branch. Филиалы, созданные с помощью hg branch, являются постоянными и живут в глобальном пространстве имен, тогда как ветви, сделанные с git branch, являются временными. Ближайшим эквивалентом git branch является hg bookmark: закладки можно переименовать и удалить и вести себя как Git-ветви.

Я недавно написал guide for Mercurial bookmarks. Сравните это с named branch guide. В обоих руководствах содержатся примеры использования (названных) ветвей в Mercurial для отслеживания развития. Он показывает, как объединить ветки и как их закрыть или удалить закладку, когда вы закончите.

+0

Полезная прогулка по названным ветвям, хотя полезно также знать об анонимных ветках (как указывает Томислав). –

+1

+1 @MartinGeisler. Ваш филиал проходит отлично. – klabranche

+0

-1: ссылка сломана, если вы ее исправите, я добавлю +1 этот пост. –

Смежные вопросы