Для небольшой разработки программного обеспечения я хотел бы, чтобы изменения следовали определенному процессу, в результате чего ветвь интеграции содержала бы только «полные» изменения.Идея проистекает из сообщения в моем блоге о получении полезных журналов истории от Mercurial.Однако речь идет не только о создании журналов, но и о структурированном способе работы.
Таким образом, идея заключается в том, что в хранилище будет ветвь "интеграции", которая не будет напрямую разрабатываться, вместо какой-либо работыбудет выполняться в другой ветви, а после завершения будет объединен с веткой интеграции - ниже приведен грубый пример с комментариями фиксации в фигурных скобках:
O {Implemented new feature X}
|\
| O {...}
| |
| O {...}
|/
O {Fixed bug 002}
|\
| O {...}
|/
O {added tag "Release 1.0"}
|
O {Fixed bug 001}
|\
| O {...}
|/
O -- integration branch
/
O -- default branch
Ветка "интеграции" разрешает только объединение-to и помечены.
Это похоже на то, как мы занимаемся разработкой на работе (в серверной системе, не поддерживающей DVCS), где вы вносите изменения в свою рабочую ветку и когда завершаете (и проверяете, тестируете), ...) вы объединяете эти изменения в ветку интеграции для формального тестирования и выпуска.
В любом случае, мой вопрос - как бы я реализовал политику внесения изменений только в рабочей ветке, в то время как вветвь интеграции мы разрешаем только слияние или тегирование?
Моя первоначальная мысль - добавить хук на pre-commit
( не precommit
или pretxncommit
, так как я считаю, что они запускаются, когда вы, например, создаете тег).Хук будет проверять, что, если вы были в ветви интеграции, есть два родителя, что означает, что это результат слияния, и потерпит неудачу, если это не так.
Однако, насколько я понимаю,хуки не копируются при клонировании репозитория.Поскольку это будет специфический для проекта параметр, его не следует устанавливать на уровне пользователя.Итак, как бы я мог запретить пользователю клонировать репозиторий (таким образом теряя хуки), вносить изменения непосредственно в ветку интеграции, а затем нажимать?
hg clone main_repo
hg update integration_branch
(make changes without starting a new branch)
hg commit -m "I made some changes"
hg push
Кроме того, как я могу применить это при использовании системынапример, Bitbucket?
Кроме того, разве это не правильный подход к рабочему процессу при использовании DVCS?