Первое, чему должны научиться новые конвертеры Mercurial, - это получить возможность совершать неполный код.Subversion научил нас, что вы не должны совершать испорченный код.Теперь пришло время отказаться от этой привычки.Фиксация часто дает вам большую гибкость в вашем рабочем процессе.
Основная проблема, с которой я сталкиваюсь при hg pull --rebase
, - это возможность разорвать слияние без каких-либо способов отменить.Модель DVCS основана на идее явного отслеживания истории и перебазирования подрывает эту идею, говоря, что все мои изменения произошли после всех ваших изменений, даже если мы действительно работали над ними одновременно.И поскольку я не знаю, каковы ваши изменения (потому что я основывал свой код на более ранних наборах изменений), мне труднее знать, что мой код, помимо вашего, не сломает что-либо.Вы также теряете возможности ветвления, выполняя ребазинг, который и является основной идеей DVCS.
Наш рабочий процесс (который мы создали всю систему хостинга Mercurial ) основан на сохранении несколькихклоны или филиалы, как мы их называем.Каждый разработчик или небольшая команда имеет свой собственный репозиторий ветвей, который является просто клоном "центрального" репозитория.Все мои новые функции и исправления ошибок включены в мой личный репозиторий.Я могу проверить этот код и, как только он будет готов, я могу объединить его с центральным репозиторием.
Это дает мне несколько приятных преимуществ.Во-первых, я не буду ломать сборку, так как все мои изменения находятся в их собственном репо, пока они не будут «готовы».Во-вторых, я могу сделать еще один репозиторий, если мне нужно сделать отдельную функцию или если у меня есть что-то более продолжительное, например, для следующей основной версии.И в-третьих, я легко могу внести изменения в центральное хранилище, если есть ошибка, которую нужно быстро исправить.
Тем не менее, есть несколько разных способов использования этого рабочего процесса.Самое простое, с которого я начал, это просто сохранение отдельных клонов.Так что у меня будут website-central
, website-tghw
и т. Д. Это работает хорошо, тем более что вы можете толкать и тянуть между ними локально.Совсем недавно я начал держать несколько голов в одном репо, используя расширение remotebranches для управления ими и hg nudge , чтобы не толкать все сразу.
Конечно, некоторым людям этот рабочий процесс не очень нравится, обычно потому, что его сервер Mercurial затрудняет создание серверных клонов.В этом случае вы также можете использовать именованные ветви , чтобы упростить свои функции.К сожалению, они не так гибки, как ветки Git (именно поэтому мы предпочитаем репозитории веток), но они хорошо работают, когда вы понимаете, как закрывать ветки, и почему вы не можете по-настоящему избавиться от них, когда начинаете.
Это становится немного длиннее, поэтому я завершаю его, поощряя вас использовать превосходное ветвление и слияние, которые обеспечивает Mercurial (через SVN).Существует определенная кривая обучения, но как только вы ее освоите, это действительно облегчит задачу.