Mercurial: как объединить ручное управление изменениями и файлами? - PullRequest
4 голосов
/ 10 марта 2010

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

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

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

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

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

В какой-то момент времени я разветвляюсь по умолчанию на SolarCarBranch для параллельной работы на автомобиле, работающем от солнечной энергии:

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

Через некоторое время хранилище выглядит так:

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

Как объединить SolarCarBranch обратно в по умолчанию ?

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

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

Что я выучил:

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

Ответы [ 2 ]

5 голосов
/ 10 марта 2010

Вы действительно близки, и вам не нужно прибегать к пересадке (гадость) или черри в целом. Выключение 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

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

Так же, как и 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

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

2 голосов
/ 10 марта 2010

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

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

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

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

...