Расскажите пожалуйста, как можно правильно организовать командную работу в распределенной системе контроля версий?
Допустим есть центральный репозиторий.
Есть локальные репозитории у каждого из разработчиков.
В процессе работы разработчик создает большое количество мелких промежуточных коммитов. При этом зачастую проекты на этих коммитах не собираются или не работают.
Так же разработчик кучу мелких веток и по завершении работы на ними вливает их в основную ветку.
Еще у него висит куча тупиковых незавершенных веток.
По умолчанию команда push проталкивает всю это гору ревизий на центральный сервер. Даже если эта гора ревизий добавляет в проект одну фичу. Проталкиваются даже тупиковые ветки.
Если изменения выкладывают несколько разработчиков, центральный репозиторий быстро превращается в помойку.
Можно попытаться ограничить разработчиков, и требовать чтобы они коммитили только когда завершают работу над фичей. Но тогда теряются все достоинства работы с распределенной системой. Зачем мне свой репозиторий, если я не могу творить с ним что хочу?
Поделитесь пожалуйста опытом, как вы решаете эту проблему?
Возможно можно как-то вести некую основную ветку и сливать в нее только завершенные фичи, без промежуточных коммитов? И на центральном репозитории держать только эту ветку.
Или есть какой то другой способ?
В первую очередь, интересует решение этой проблемы для Mercurial. Но если есть системы, в которых эта проблема решается просто и естественно, было бы тоже интересно узнать.