Mercurial: Как слиться с ручным управлением изменениями и файлами?
Вопрос
Примечание: на сценарий, который я описываю здесь, не отвечает в Переполнение стека: полностью ручной 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 вернуться к дефолт?
Обратите внимание на следующие осложнения в слиянии, которые я хочу:
- Я должен продолжить работу над обоим дефолт а также Solararcarbranch После слияния.
- Может быть фиксация топливной эффективности в
Car.cpp
а такжеCar.h
в Solararcarbranch что я хочу втянуть дефолт, Однако я не хочу, чтобы все изменения в этих файлах. Итак, я хочу выбрать изменения, которые я хочу включить дефолт Во время слияния (он же ручной слияние). - Я делаю нет хочу
Solar.cpp
а такжеSolar.h
появляясь в дефолт. Анкет Мир, возможно, еще не готов к автомобилю с солнечной энергией. ;-)
Что я узнал:
- Это возможно
hg merge SolarCarBranch
- Это может быть достигнуто путем настройки
kdiff3.premerge=False
вMercurial.ini
- Я не знаю, как это добиться, так как
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
опционные флаги в слияние документов конфигурации слишком.