Как выполнить «слияние hg», не затрагивая рабочий каталог?

Предположим, что:

  • У меня есть репо MyRepo.
  • В моем рабочем каталоге есть незафиксированные изменения.
  • Я извлекаю из Repo1, и это создает ветку в MyRepo
  • Я хочу объединить то, что у меня уже было в моем репо, с тем, что я только что вытащил.

Как описано здесь, процесс слияния изменяет состояние рабочего каталог.

В моем сценарии я не хочу терять незафиксированные изменения, которые находятся в моем рабочем каталоге, потому что в этот момент я заинтересован в изменении состояния MyRepo; не состояние моего рабочего каталога.

Есть ли способ пройти процесс слияния, включая разрешение конфликтов вручную, не затрагивая содержимое моего рабочего каталога? Может ли этот процесс выполняться только во временных файлах? Или мне следует отложить свои изменения, выполнить слияние, а затем убрать с полки, чтобы восстановить мой рабочий каталог до состояния до слияния?


person Sylvain    schedule 09.03.2010    source источник


Ответы (5)


Используйте shelve или attic, чтобы временно сохранить изменения во время слияния.

person Macke    schedule 09.03.2010
comment
Ваши ссылки не работают. - person BrainStorm.exe; 07.10.2016

Вы не можете этого сделать. Как говорится в документации, слияние действительно является операцией рабочего дерева. Разрешение конфликтов без проверки результата - это безумие. Либо отложите, либо зафиксируйте изменения, а затем выполните слияние. Если вы не хотите, чтобы фиксация была видна где-либо, вы можете зафиксировать изменение, обновить предыдущую ревизию, объединить новую ветвь, применить временно зафиксированный патч и удалить эту временную ветвь.

person Lukáš Lalinský    schedule 09.03.2010
comment
+1 к стеллажу. Похоже, это самый простой способ продолжить слияние, не влияя на текущие изменения. - person gavinb; 10.03.2010
comment
Спасибо @ Lukáš Lalinský, у меня похожая проблема. Когда вы сказали либо отложить, либо зафиксировать изменения, а затем выполнить слияние, под полкой вы имели в виду использование расширения полки? или что-то другое? - person Amelio Vazquez-Reina; 23.10.2011
comment
Да, я хотел использовать расширение полки. - person Lukáš Lalinský; 24.10.2011

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

person Nate Heinrich    schedule 09.03.2010

Я новичок в Mercurial, но не могли бы вы клонировать из своего локального репозитория и скопировать свою рабочую копию в клон? Затем вы могли бы выполнить слияние в оригинале? Вы бы сохранили состояние вашей рабочей копии в клоне, будучи свободным, чтобы разрешить изменение исходной рабочей копии.

Сначала проверьте это. Я никогда не делал этого в hg.

person Sniggerfardimungus    schedule 09.03.2010

Просто сделай это в клоне.

  1. Клонируйте MyRepo в MyRepo-merger, который удалит все зафиксированные изменения, но не ваши незафиксированные.
  2. Внутри MyRepo-merger сделайте тягу из Repo1.
  3. Внутри MyRepo-merger делайте все, что хотите
  4. Внутри MyRepo-merger нажмите либо на Repo1, либо на исходный MyRepo

Возврат к MyRepo не изменит рабочий каталог MyRepo, так что это безопасное действие.

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

person Ry4an Brase    schedule 09.03.2010