Вытягивайте коммиты в репо после перебазирования

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

По сути, у нас есть проект crons. Я часто вношу в него изменения, и сопровождающий проекта вносит изменения по моему запросу и каждый раз перебазирует.

Обычно это нормально, но может привести к проблемам в двух случаях:

  • Освобождение с двух ветвей одновременно
  • После этого необходимо выпустить дополнительную фиксацию.

Например, я фиксирую ревизию 1000. Сопровождающий извлекает и перебазирует для создания ревизии 1000', но примерно в то же время я осознаю ужасную ошибку и создаю ревизию 1001 (дочернюю от 1000). Поскольку 1000 не существует в целевой ветке, это создает непригодное для использования слияние, и сопровождающий обычно смеется надо мной и говорит мне попробовать еще раз (что требует от меня получения новой проверки основной ветки в 1000' и создания и импорта патча). вручную из другой кассы). Я уверен, что вы можете видеть, как та же проблема может возникнуть, когда я пытаюсь выполнить выпуск из двух разных веток одновременно.

В любом случае, когда в основной ветке появится 1000', можно ли что-нибудь сделать, чтобы добавить 1001 без повторного слияния тех же изменений? Или перебазирование портит это? Независимо от того, есть ли что-нибудь, что я могу сказать, чтобы заставить сопровождающего прекратить перебазирование? Он использует его неправильно?


person Explosion Pills    schedule 26.01.2013    source источник


Ответы (1)


Скажи своему сопровождающему, чтобы он перестал быть козлом**.

Перебазирование — это то, что должно выполняться только вами, тем, кто создал наборы изменений, которые вы хотите перебазировать, и не выполняется для наборов изменений, которые:

  • уже поделился с кем-то другим
  • получил от кого-то другого

Ваш сопровождающий, вероятно, хочет нераспределенную систему управления версиями, такую ​​как Subversion, где наборы изменений следуют прямой линии, а не разветвленной природе DVCS. В этом отношении выбор Mercurial является неправильным, или использование Mercurial является неправильным.

Также обратите внимание, что перебазирование — это один из способов изменения истории, и, поскольку Mercurial не одобряет это (изменение истории), перебазирование доступно только как расширение, а не «из коробки» стандартной конфигурации Mercurial.

Итак, чтобы ответить на ваш вопрос: нет, поскольку ваш сопровождающий настаивает на том, чтобы нарушить природу DVCS, инструменты будут бороться против вас (и против него), и вам будет трудно заставить инструменты сотрудничать с вами.

Скажите своему сопровождающему, чтобы он понял, как на самом деле работает DVCS. Теперь он по-прежнему может настаивать на том, чтобы не принимать новые ветки или головы в своем репозитории, и настаивать на том, чтобы вы извлекали и объединяли перед отправкой одной головы в его репозиторий, но это нормально.

Однако перебазирование общих наборов изменений — нет.

Если вы действительно хотите использовать ребазинг, правильный способ сделать это так:

  1. Вы извлекаете последние изменения из исходного репозитория.
  2. Вы локально вносите множество изменений, исправляете ошибки, добавляете новые функции и так далее.
  3. Затем вы пытаетесь нажать, и вам говорят, что это создаст новые головы в целевом репозитории. Это говорит вам о том, что в целевом репозитории есть новые наборы изменений, которые вы не получили при последнем извлечении, потому что они были добавлены после этого.
  4. Вместо этого вы тянете, это добавит новую голову в ваш локальный репозиторий. Теперь у вас есть заголовок, созданный из ваших новых наборов изменений, и заголовок, извлеченный из исходного репозитория, созданного другими.
  5. Затем вы перебазируете свои наборы изменений поверх тех, которые вы получили из исходного репозитория, по сути, перемещая свои наборы изменений в истории, чтобы казалось, что вы начали свою работу с последнего набора изменений в текущем исходном репозитории.
  6. Затем вы пытаетесь выполнить новый толчок,

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

Однако, поскольку наличие нескольких ветвей прекрасно в DVCS, вам не нужно проходить через все это. Вы можете просто объединиться и продолжить работу. Вот как должен работать DVCS. Перебазирование — это просто дополнительный инструмент, который вы можете использовать, если очень хотите.

person Lasse V. Karlsen    schedule 26.01.2013
comment
Я лично не понимаю, зачем вам когда-либо хотеть перебазировать .. вы просто уничтожаете историю (и весь смысл VCS в том, чтобы иметь историю, на которую вы могли бы посмотреть) - person Explosion Pills; 27.01.2013