Mercurial: Как слиться с ручным управлением изменениями и файлами?

StackOverflow https://stackoverflow.com/questions/2414759

  •  19-09-2019
  •  | 
  •  

Вопрос

Примечание: на сценарий, который я описываю здесь, не отвечает в Переполнение стека: полностью ручной Mercurial Merge.

Я объясню свой запрос с примером. Предположим, что я начинаю ртутный репозиторий, чтобы разработать автомобиль:

C:\Car$ dir
Car.cpp
Car.h

Я работаю над дизайном автомобиля довольно долго, и репозиторий выглядит как:

r0-r1-...-r100-(default)

В какой -то момент времени я ветвь дефолт к Solararcarbranch Работать на солнечном автомобиле параллельно:

C:\SolarCar$ dir
Car.cpp
Car.h
Solar.cpp
Solar.h

После еще некоторого времени репозиторий выглядит как:

r0-r1-...-r100-...-r200-(default)
            \--r101-...-r201-(SolarCarBranch)

Как мне слияние Solararcarbranch вернуться к дефолт?

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

  1. Я должен продолжить работу над обоим дефолт а также Solararcarbranch После слияния.
  2. Может быть фиксация топливной эффективности в Car.cpp а также Car.h в Solararcarbranch что я хочу втянуть дефолт, Однако я не хочу, чтобы все изменения в этих файлах. Итак, я хочу выбрать изменения, которые я хочу включить дефолт Во время слияния (он же ручной слияние).
  3. Я делаю нет хочу Solar.cpp а также Solar.h появляясь в дефолт. Анкет Мир, возможно, еще не готов к автомобилю с солнечной энергией. ;-)

Что я узнал:

  1. Это возможно hg merge SolarCarBranch
  2. Это может быть достигнуто путем настройки kdiff3.premerge=False в Mercurial.ini
  3. Я не знаю, как это добиться, так как premerge=False все еще слияет/копии Solar.cpp а также Solar.h в дефолт не прося у меня разрешения.
Это было полезно?

Решение

Вы действительно близки, и вам не нужно прибегать к пересадке (Yuck) или на выбору вишни в целом. Выключение Premerge - это первый шаг, а затем просто удалите файлы, которые вам не нужны в основной ветви после слияния, но перед совершением. Вам придется сделать это только один раз.

Вот настройка:

o  changeset:   3:343d531512a3
|  branch:      solar
|  tag:         tip
|  parent:      1:cb26642f8db5
|  user:        Ry4an Brase <ry4an@msi.umn.edu>
|  date:        Wed Mar 10 11:16:48 2010 -0600
|  files:       afile
|  description:
|  solar-change
|
|
| @  changeset:   2:c5d14e34db07
| |  parent:      0:56465175b2fc
| |  user:        Ry4an Brase <ry4an@msi.umn.edu>
| |  date:        Wed Mar 10 11:05:44 2010 -0600
| |  files:       other-main-file
| |  description:
| |  moremain
| |
| |
o |  changeset:   1:cb26642f8db5
|/   branch:      solar
|    user:        Ry4an Brase <ry4an@msi.umn.edu>
|    date:        Wed Mar 10 11:04:32 2010 -0600
|    files:       solar-only
|    description:
|    solar-initial
|
|
o  changeset:   0:56465175b2fc
   user:        Ry4an Brase <ry4an@msi.umn.edu>
   date:        Wed Mar 10 11:04:14 2010 -0600
   files:       afile
   description:
   initial

Вы можете видеть, что изменения 1 добавляет файл в солнечную ветвь - файл, который мы не хотим по умолчанию. Хотя изменения 3 настраивают файл, который также существует в основном, афиле, и мы хотим вручную контролировать, происходит ли это изменение.

Ну действуй hg update default ; hg merge -r solar. Анкет Инструмент слияния появится afile И мы решаем линию по линии или кусочке, если хотим эти изменения. После сохранения hg stat:

% hg stat
M afile
M solar-only

И мы видим, что только для солнечной энергии в очереди за то, что он по умолчанию. Просто удалите егоif).

% hg rm -f solar-only

В настоящее время hg stat показывает это как удалено:

% hg stat
M afile
R solar-only

И когда мы совершаем, у нас будет то, что мы хотим в новом наборе изменений.

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

Ваше первое условие, чтобы продолжить работу над обеими ветвями, удовлетворяется просто не закрывая ветвь (что вы делаете с --close-branch вариант на hg commit).

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

Третье условие удовлетворяется идеей, которая при условии, что вы не смешиваете изменения как на своем обычном автомобиле, так и на вашем солнечном автомобиле в одном и том же коммите, вы можете безнаказанно отменять смены из солнечной ветви и не должны беспокоиться о Смешивая типы ваших автомобилей.

Вы можете посмотреть на internal опционные флаги в слияние документов конфигурации слишком.

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