Применить файл Mercurial Bundle к другой ревизии - PullRequest
3 голосов
/ 28 сентября 2011

TLDR : У меня есть пакет HG с родителем X, но ревизия X не существует в моем репо. Тем не менее, я уверен , что файлы ревизии Y идентичны ревизии X. Как применить комплект?

Справочная информация:

Я использую hgsubversion для взаимодействия с репозиторием SVN.

Были некоторые изменения, которые я не хотел совершать. hgsubversion не поддерживает частичные нажатия.

Раньше я обходил эту проблему вручную, создавая временные файлы экспорта / исправления или вручную восстанавливая файлы .orig (результат hg revert).

В этом случае я зафиксировал изменения, которые я не хотел нажимать, затем использовал hg strip, затем нажал, затем попытался использовать hg unbundle .hg/strip-backup/file.

Проблема : hgsubversion заменяет исходный набор изменений новым, который он импортирует из SVN после его фиксации. Результат: идентификатор набора изменений изменится. Это проблема, потому что теперь hg unbundle больше не работает, так как зависит от присутствия родительского набора изменений (но он был удален).

По иронии судьбы, hgsubversion сам использует strip и, таким образом, имеет файл резервной копии, который я могу использовать, чтобы удалить новую версию, добавить удаленную старую версию, затем применить пакет с моими ревизиями, экспортировать патч, удалить оба и восстановить ревизию SVN. Но это звучит ... чрезвычайно больно и глупо. Что лучше я могу сделать?

(hg transplant не похоже, что пакет не имеет родителя в репо)

Ответы [ 2 ]

3 голосов
/ 03 октября 2011

Фактически невозможно использовать пакет без точных родительских наборов изменений пакета.Пакеты состоят из компактных двоичных дельт, которые могут быть применены только к точному двоичному источнику.Нет доступного «контекста», который позволил бы Mercurial угадать, как применить их к другим ревизиям, как это делает патч.В ядре Mercurial это никогда не является проблемой, поскольку наборы изменений никогда не удаляются, но такие расширения, как hgsubversion и mq нарушают правила.

(Если вы можете восстановить удаленные наборы изменений из резервного набора в .hg / strip-backup, затем вы можете отменить изменения и снова удалить их.)

0 голосов
/ 29 декабря 2011

Справочная информация : после нажатия проблема с hgsubversion, успешно выдвигающей только 1 ревизию , я ленился в своих коммитах (частичные коммиты возможны, если вы обновляете до последней ревизии, которую хотите подтолкнуть), и в конечном итоге начал все совершать. Поэтому я убил пуш и в первый раз он не сохранил мои последующие ревизии.

Я попытался восстановить, но не смог найти родительский коммит. Для меня работало восстановление файла ...-backup.hg (в стрип-бэкапе тоже был файл ...-temp.hg).

Странная вещь (именно поэтому я отвечаю на это) состоит в том, что он только дал мне предупреждение о том, что родитель не находится там (я понятия не имею, почему) ...

warning: ignoring unknown working parent d5663567bc4b!
adding changesets
adding manifests
adding file changes
added 21 changesets with 1255 changes to 941 files
(run 'hg update' to get a working copy)

Кстати, я использую Mercurial версии 2.0

...