Mercurial Слияние только определенных наборов изменений - PullRequest
12 голосов
/ 08 апреля 2010

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

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

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

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

Я хочу передать это branchA и default, как мне поступить?

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

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

Ответы [ 5 ]

23 голосов
/ 23 июня 2012

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

Эта команда использует логику слияния Mercurial для копирования отдельных изменений. из других веток без слияния ветвей в графе истории. Это иногда называют «бэкпорт» или «сбор вишни». От по умолчанию, graft скопирует пользователя, дату и описание из источника Изменения.

11 голосов
/ 15 января 2011

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

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

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

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

5 голосов
/ 08 апреля 2010

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

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

3 голосов
/ 08 апреля 2010

То, что нужно, это не слияние, а вишня. Вы можете использовать https://www.mercurial -scm.org / wiki / TransplantExtension , но помните об упомянутых там осложнениях.

0 голосов
/ 08 апреля 2010

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

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