Да, сходство имен неудачно. Для каждой команды есть pre-X и post-X, а затем есть независимый хук precommit, который запускается перед фактической фиксацией.
отаю в команде, в которой у нас есть код в ртутном репозитории с несколькими подкаталогами:
main/
main/subrepo1/
main/subrepo1/subrepo2/
Поведение Mercurial по умолчанию таково, что когдаhg commit
выполняется в «main», любые ожидающие изменения в подпапках «subrepo1» и «subrepo2» также будут зафиксированы. Аналогично, когда нажата «main», любые исходящие коммиты в «subrepo1» и «subrepo2» также будут отправлены.
Мы находим, что люди часто непреднамеренно фиксируют и продвигают изменения в своих подпапках (потому что они забыли, что сделали изменения, иhg status
по умолчанию не показывает рекурсивные изменения). Мы также обнаруживаем, что такие глобальные коммиты / толчки почти всегда случайны в нашей команде.
Mercurial 1.7 недавно улучшил ситуацию сhg status -S
а такжеhg outgoing -S
, которые показывают изменения в суб-репозиториях; но тем не менее, это требует от людей внимания.
Есть ли способ в Mercurial сделатьhg commit
а такжеhg push
прервать, если есть изменения / коммиты в подпапках, которые иначе были бы зафиксированы / отправлены?