Скажи своему сопровождающему, чтобы он перестал быть козлом**.
Перебазирование — это то, что должно выполняться только вами, тем, кто создал наборы изменений, которые вы хотите перебазировать, и не выполняется для наборов изменений, которые:
- уже поделился с кем-то другим
- получил от кого-то другого
Ваш сопровождающий, вероятно, хочет нераспределенную систему управления версиями, такую как Subversion, где наборы изменений следуют прямой линии, а не разветвленной природе DVCS. В этом отношении выбор Mercurial является неправильным, или использование Mercurial является неправильным.
Также обратите внимание, что перебазирование — это один из способов изменения истории, и, поскольку Mercurial не одобряет это (изменение истории), перебазирование доступно только как расширение, а не «из коробки» стандартной конфигурации Mercurial.
Итак, чтобы ответить на ваш вопрос: нет, поскольку ваш сопровождающий настаивает на том, чтобы нарушить природу DVCS, инструменты будут бороться против вас (и против него), и вам будет трудно заставить инструменты сотрудничать с вами.
Скажите своему сопровождающему, чтобы он понял, как на самом деле работает DVCS. Теперь он по-прежнему может настаивать на том, чтобы не принимать новые ветки или головы в своем репозитории, и настаивать на том, чтобы вы извлекали и объединяли перед отправкой одной головы в его репозиторий, но это нормально.
Однако перебазирование общих наборов изменений — нет.
Если вы действительно хотите использовать ребазинг, правильный способ сделать это так:
- Вы извлекаете последние изменения из исходного репозитория.
- Вы локально вносите множество изменений, исправляете ошибки, добавляете новые функции и так далее.
- Затем вы пытаетесь нажать, и вам говорят, что это создаст новые головы в целевом репозитории. Это говорит вам о том, что в целевом репозитории есть новые наборы изменений, которые вы не получили при последнем извлечении, потому что они были добавлены после этого.
- Вместо этого вы тянете, это добавит новую голову в ваш локальный репозиторий. Теперь у вас есть заголовок, созданный из ваших новых наборов изменений, и заголовок, извлеченный из исходного репозитория, созданного другими.
- Затем вы перебазируете свои наборы изменений поверх тех, которые вы получили из исходного репозитория, по сути, перемещая свои наборы изменений в истории, чтобы казалось, что вы начали свою работу с последнего набора изменений в текущем исходном репозитории.
- Затем вы пытаетесь выполнить новый толчок,
Конечным результатом является то, что целевой репозиторий и ваш собственный репозиторий будут иметь более линейную историю наборов изменений, а не ветку, а затем слияние.
Однако, поскольку наличие нескольких ветвей прекрасно в DVCS, вам не нужно проходить через все это. Вы можете просто объединиться и продолжить работу. Вот как должен работать DVCS. Перебазирование — это просто дополнительный инструмент, который вы можете использовать, если очень хотите.
person
Lasse V. Karlsen
schedule
26.01.2013