Вопрос

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

Сегодня я прочитал про MQ (Mercurial Queues - главы 12 и 13).Думаю, я понял концепцию MQ, поэтому мой вопрос:

Есть ли какое-либо преимущество MQ перед (именованными) ветвями в Mercurial (для моего сценария)?

Это было полезно?

Решение

Основным преимуществом MQ перед именованными ветвями являются:

  • Вы можете пересмотреть свои патчи.Это позволяет редактировать историю и поддерживать четкую и логичную серию исправлений поверх исходного кода:если вы заметили ошибку в патче, вы обновляете его вместо того, чтобы делать новый коммит.

  • Изменения в ваших патчах будут четко отделены от изменений, внесенных в исходную версию.Когда вы объединяете две ветви, вы смешиваете два потока развития.Это затрудняет просмотр внесенных вами изменений без просмотра изменений, поступающих из восходящей ветки.

  • Имена патчей являются временными.Когда ты hg qfinish примененный патч, в коммите не осталось и следа имени патча.Таким образом, вы можете использовать MQ без предварительной координации с вышестоящим репозиторием, поскольку они никогда не заметят MQ.

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

  • У вас нет постоянного названия ветки в наборах изменений.Люди иногда рассматривать именованные ветки как одноразовые и расстраиваются, когда понимают, что именованная ветка зафиксирована в истории.(На самом деле вы можете установить имя ветки с помощью hg branch прежде чем выкладывать патчи, так что с этим моментом не так уж и плохо.)

Недостатками MQ являются:

  • Это дополнительный инструмент для обучения.Это мощно, но также дает вам больше возможностей выстрелить себе в ногу.Бег hg qdelete действительно будет удалить патч и так можно выкинуть данные.(Я думаю, это нормально, но к нам в список рассылки пришел пользователь Git с жалобой на это.)

  • Вы значительно усложняете сотрудничество с другими.Ты может повернуть .hg/patches в репозиторий и перемещать патчи между репозиториями, но это сложно сделать, если у вас больше одного разработчика.Проблема в том, что вы в конечном итоге объединяете патчи, если один и тот же патч обновляют несколько человек.

  • У вас нет постоянного названия ветки в наборах изменений.Если вы правильно используете именованные ветки и используете стабильные, долговременные имена ветвей, то при использовании MQ вы упустите это.

Другие советы

Хороший вопрос.По-разному.Лично я не любит систему разветвления Mercurial, и я стараюсь избегать ее, когда смогу (используя толкнутые закладки вместо ветки).

MQ - отличный инструмент, с большой силой и великими подводными камнями.Вы также можете рассмотреть возможность использования pbranch .

MQ - отличный инструмент, если вам нужно производить и поддерживать патч-набор для проекта, что-то вроде добавления функции-X в проект и хранение патчей, обновляемых с помощью Upstream Code.

Закладки (или филиалы, если хотите) хороши для задачи короткого развития, которые требуют объединения в верхний код.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top