Mercurial: конкретные примеры проблем с использованием hg pull --rebase - PullRequest
3 голосов
/ 21 сентября 2010

Я изо всех сил пытаюсь найти ртутный рабочий процесс, который соответствует тому, как мы работаем.

В настоящее время я отдаю предпочтение клону для каждой функции, но это совершенно новое мышление, переходящее от Subversion. У нас также будут проблемы с текущими расходами на настройку среды.

Использование hg pull --rebase, кажется, дает нам больше похожий на Subversion рабочий процесс, но, читая вокруг, я опасаюсь его использовать.

Мне кажется, я понимаю концепции и вижу, что переписывание истории не является идеальным, но я не могу придумать сценарии, которые я лично считаю неприемлемыми.

Я хотел бы знать, какие «худшие» сценарии может создать hg pull --rebase либо теоретически, либо из опыта. Я хотел бы получить конкретные примеры, а не мнения о том, следует ли вам «переписывать» историю. Не то чтобы я был против людей, имеющих мнения, просто кажется, что их уже много в интернете, без примеров, подтверждающих их;)

Ответы [ 2 ]

10 голосов
/ 21 сентября 2010

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

Основная проблема, с которой я сталкиваюсь при hg pull --rebase, - это возможность разорвать слияние без каких-либо способов отменить.Модель DVCS основана на идее явного отслеживания истории и перебазирования подрывает эту идею, говоря, что все мои изменения произошли после всех ваших изменений, даже если мы действительно работали над ними одновременно.И поскольку я не знаю, каковы ваши изменения (потому что я основывал свой код на более ранних наборах изменений), мне труднее знать, что мой код, помимо вашего, не сломает что-либо.Вы также теряете возможности ветвления, выполняя ребазинг, который и является основной идеей DVCS.

Наш рабочий процесс (который мы создали всю систему хостинга Mercurial ) основан на сохранении несколькихклоны или филиалы, как мы их называем.Каждый разработчик или небольшая команда имеет свой собственный репозиторий ветвей, который является просто клоном "центрального" репозитория.Все мои новые функции и исправления ошибок включены в мой личный репозиторий.Я могу проверить этот код и, как только он будет готов, я могу объединить его с центральным репозиторием.

Это дает мне несколько приятных преимуществ.Во-первых, я не буду ломать сборку, так как все мои изменения находятся в их собственном репо, пока они не будут «готовы».Во-вторых, я могу сделать еще один репозиторий, если мне нужно сделать отдельную функцию или если у меня есть что-то более продолжительное, например, для следующей основной версии.И в-третьих, я легко могу внести изменения в центральное хранилище, если есть ошибка, которую нужно быстро исправить.

Тем не менее, есть несколько разных способов использования этого рабочего процесса.Самое простое, с которого я начал, это просто сохранение отдельных клонов.Так что у меня будут website-central, website-tghw и т. Д. Это работает хорошо, тем более что вы можете толкать и тянуть между ними локально.Совсем недавно я начал держать несколько голов в одном репо, используя расширение remotebranches для управления ими и hg nudge , чтобы не толкать все сразу.

Конечно, некоторым людям этот рабочий процесс не очень нравится, обычно потому, что его сервер Mercurial затрудняет создание серверных клонов.В этом случае вы также можете использовать именованные ветви , чтобы упростить свои функции.К сожалению, они не так гибки, как ветки Git (именно поэтому мы предпочитаем репозитории веток), но они хорошо работают, когда вы понимаете, как закрывать ветки, и почему вы не можете по-настоящему избавиться от них, когда начинаете.

Это становится немного длиннее, поэтому я завершаю его, поощряя вас использовать превосходное ветвление и слияние, которые обеспечивает Mercurial (через SVN).Существует определенная кривая обучения, но как только вы ее освоите, это действительно облегчит задачу.

2 голосов
/ 22 сентября 2010

Исходя из комментариев к вопросу, ваша основная проблема заключается в том, что у вас есть разработчики, работающие над несколькими функциями / исправлениями / проблемами одновременно и имеющие незавершенную работу в своем рабочем каталоге вместе с некоторой завершенной работой, которая готова быть отправленной обратно в центральное хранилище.

Есть действительно хороший обмен, который хорошо освещает проблему и ведет к нескольким путям.

http://thread.gmane.org/gmane.comp.version-control.mercurial.general/19704

Существуют способы, с помощью которых вы можете обойтись без внесенных вами изменений, например, имея отдельный клон для обработки слияний , но я бы советовал использовать распределенный способ работы и фиксировать так часто, как вам нравится - если вы действительно чувствуете необходимость, вы можете объединить последние несколько локальных коммитов в один набор изменений (например, с помощью MQ) перед нажатием.

...