2012-01-04 4 views
13

Я использую меркурий с именованными ветвями и замечаю, что при создании новой ветви по умолчанию по умолчанию помечена как неактивная ветвь. Например:Mercurial: сохранить ветку по умолчанию «active»

C:\data\solutions\test-repo>hg branches 
default      0:aeec280e6310 

C:\data\solutions\test-repo>hg branch feature-branch 
marked working directory as branch feature-branch 

C:\data\solutions\test-repo>hg com -m "created new branch" 

C:\data\solutions\test-repo>hg branches 
feature-branch     1:1cb18d7fa554 
default      0:aeec280e6310 (inactive) 

Это проблема, потому что наша система развертывания показывает названные отрасли, которые являются активными, которые могут быть развернуты с.

Как сохранить активную ветку по умолчанию?

ответ

22

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

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

$ hg update feature-branch 
$ hg commit --close-branch -m "passes all tests, ready for merging" 

Это добавит специальный набор изменений, который отмечает руководитель филиала закрытым. Когда все головки на ветке закрыты, сама ветка считается закрытой и исчезнет с hg branches. Я рекомендую закрыть до слияния, пожалуйста see my named branch guide for a longer example.

Поэтому я предлагаю вам изменить систему развертывания, чтобы показать открытые ветки (hg branches) вместо активных ветвей (hg branches --active).

+1

Но как это сохранить активным по умолчанию? Как я вижу, вам нужно обновить значение по умолчанию после создания именованной ветви и выполнить «фиктивный» коммит, иначе ветвь по умолчанию будет отмечена как неактивная. – mslot

+0

@ mslot: Я предложил использовать закрытый/открытый вместо активного/неактивного.Забудьте все о неактивных ветвях и сосредоточьтесь на закрытых ветвях. Чтобы повторно открыть ветвь, вам необходимо сделать фиксацию после того, как набор изменений помечает ее закрытой - это обычно не проблема, поскольку вы хотите повторно открыть ветвь, потому что у вас есть реальное изменение для фиксации на этой ветке. –

+0

Для вашего гида +1, так как это очень полезно и описательно. – glglgl

13

Неактивный означает, что у него нет головы.

В вашем случае график выглядит так:

default:  0 -\ 
feature-branch:  \- 1 --- * 

* означает «рабочий реж

Когда вы делаете больше исправлений в вашей функции (как узлы 2 и 3), это будет аспект :

default:  0 -\ 
feature-branch:  \- 1 --- 2 --- 3 ---- * 

Если вы хотите интегрировать feature-branch в default просто обновить до default

default:  0 -\--------------------- * 
feature-branch:  \- 1 --- 2 --- 3 

, а затем объединить feature-branch в default:

default:  0 -\-------------------/- * 
feature-branch:  \- 1 --- 2 --- 3 -/ 

Тот факт, что кажется «неактивный» не означает, что вы не можете работать с ним. Например, ваши «сценарии развертывания» могут иметь hg update --clean default, которые отлично работают, даже если они выглядят как «неактивные».

Неактивный просто означает, что у него не было голов. Ничего больше. После слияния он станет активным и будет feature-branch, который станет «неактивным».

Не обращайте внимания на его активное/неактивное состояние, просто работайте с ним нормально.

+0

Хотя это хороший пример показа, когда ветка считается неактивной, сказать «без головы» вводит в заблуждение, так как есть * голова. В этом случае глава функциональной ветви 3: 'hg head feature-branch' подтвердит это. Скорее, это бизнес-правило (* different * from 'without head'), по которому 'hg branches' определяет в активном статусе [in]. – user2864740

+0

Правила таковы: когда * все * дети * всех * головы именованной ветви принадлежат * разной * названной ветке (как после слияния, как показано), то она считается неактивной. Создание нового заголовка в одной и той же ветви (например, добавление фиксации на ветку имени) немедленно нарушит правило, и оно станет, по крайней мере, на мгновение, активным снова. – user2864740

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