Как я могу создать ртутный хук, который предотвращает появление новых голов?

У меня есть несколько репозиториев, которые были преобразованы из SVN, и в дальнейшем мы хотим убедиться, что когда люди отправляют в репозиторий, они не могут создавать дополнительные головы. на вики-странице TipsAndTricks есть несколько хуков, которые предотвратить отправку, если есть несколько головок, но как я могу создать хук, который предотвращает отправку новых головок?

Кажется, что правильный способ сделать это - сравнить количество головок из ревизии 0:parent, а затем сравнить 0:tip, но я не могу найти способ сделать это. hg heads -r $HG_NODE показывает мне только количество голов после того, как пользователь нажал первую фиксацию.


person Asa Ayers    schedule 03.12.2010    source источник


Ответы (5)


По умолчанию hg push предотвращает добавление дополнительных головок, для чего требуется флаг -f. Вы можете написать расширение Mercurial, чтобы оно игнорировало этот флаг, эффективно отключая отправку новых головок.

Тем не менее, я бы поставил под сомнение целесообразность механического запрета новых головок. Вместо этого я бы обучил вашу команду правильному слиянию перед пушем, в то же время позволяя им делать это в тех редких случаях, когда это имеет смысл, тем более что Mercurial уже предупредил вас.

person tghw    schedule 03.12.2010
comment
Я видел предотвращение нескольких головок, представленных как обычный крючок в нескольких местах. Он есть в советах и ​​рекомендациях на вики и используется Mozilla и NetBeans. Это кажется доказательством того, что это неплохая идея. Если бы я начинал новый проект, я бы использовал один из них. Но они не обрабатывают мои преобразованные репозитории так, как мне нужно. - person Asa Ayers; 05.12.2010
comment
Обучение людей слиянию перед пушем не решает проблему. Кто-то другой всегда мог подтолкнуть что-то новое между вашим слиянием и вашим пушем. - person Kylotan; 06.12.2010
comment
@Kylotan: Тогда вы получите предупреждение о том, что вы нажимаете новую голову, и hg порекомендует вам потянуть и объединиться перед нажатием. Вам все равно придется использовать флаг -f. - person tghw; 07.12.2010

Вики Mercurial — Советы и рекомендации — Предотвратите отправку, которая может создать несколько голов

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

person alexandrul    schedule 06.12.2010

Проверьте эту ссылку. Он автоматизирует процесс разрешения нескольких головок

Mercurial Hook: запретить несколько заголовков

person Luis Lobo Borobia    schedule 06.12.2010

Это лучший вариант: https://www.mercurial-scm.org/wiki/TipsAndTricks#Prevent_a_push_that_would_create_multiple_heads

Лично я использую: http://hg.python.org/hooks/file/default/checkheads.py

person gavenkoa    schedule 15.01.2014
comment
Я обнаружил некоторое ограничение cheackheads.py, см. /" title="сливается между двумя ветвями в двух направлениях по любой веской причине или полностью для">stackoverflow.com/questions/32402715/ - person gavenkoa; 07.09.2015

Используйте hg ci -m 'Closed branch feature-x' --close-branch, чтобы закрыть все головки, кроме одной, а затем примените обычный хук с одной головкой.

person Asa Ayers    schedule 06.12.2010