Подтвердить что ты не робот

Mercurial Слияние только определенных наборов изменений

Хорошо, поэтому мы недавно превратились из SVN в Mercurial.
Обычно мы используем TortoiseHG.

В нашем одном репозитории мы имеем все наши проекты, С++/.NET/ASP. У нас около 100 проектов, все из которых используются в общих библиотечных проектах.


Поэтому было бы довольно сложной задачей создать несколько репо для каждого проекта.


Теперь у нас есть ветвь default, и пусть скажем branchA.
Я работаю над branchA и добавляю к нему свои uber-изменения, и я меняю общую библиотеку, скажем, метод расширения

Я хочу зафиксировать это с помощью branchA и default, как бы я это сделал?

Однако я не хочу, чтобы все мои изменения из branchA были объединены в default, и я не хочу, чтобы все остальные изменения от default

Надеюсь, это достаточная информация!

4b9b3361

Ответ 1

Есть способ избежать этой проблемы. Вы можете внести все свои изменения в отдельные ветки функций из некоторой базовой версии, как правило, тег последней версии или какой-либо другой стабильной точки S.

Таким образом, ваше изменение X будет на его собственной ветке, которая может быть объединена с другими ветвями (слияния M1 и M2) без введения нежелательных наборов изменений:

-----S--o----o---M1----o---> default
     |          /
     |---------X   feature or bugfix
     |          \
     \--o---o----M2----o-----> BranchA 

Это требует только обычных операций hg merge; нет необходимости в патчах, Transplant или MQ.

Ответ 2

Просто, чтобы немного улучшить содержимое: есть команда трансплантат, которая реализует выбор вишни в Mercurial.

Эта команда использует Mercurial merge logic для копирования отдельных изменений из других ветвей без объединения ветвей в графе истории. Это иногда называют "backporting" или "cherry-picking". От по умолчанию, графт скопирует пользователя, дату и описание из источника Изменения.

Ответ 3

Если вы разделяете общий код в своем собственном репозитории, вы можете использовать subrepos для включения его в каждый проект.

Кстати, я бы рекомендовал иметь отдельный репозиторий для каждого проекта, особенно если их так много.

Ответ 5

Вы описываете "выбор вишни" или "частичное слияние", что в настоящее время невозможно с Mercurial. У вас есть несколько вариантов:

  • Отделите свой общий код в своем собственном репозитории.
  • Создайте разницу ваших изменений, которые вы внесли в свой общий код, и примените их к ветке default.