Bitbucket/Mercurial: проблема с передачей именованной ветви (после закрытия предыдущей ветви с тем же именем)

Я пытаюсь отправить набор изменений, который содержит именованную ветвь, в репозиторий Mercurial, размещенный на Bitbucket, и я получаю push creates a new remote head (did you forget to merge?) ошибка. Это происходит независимо от того, указываю ли я --new-branch возможность hg push,

(Документация Mercurial рекомендует в таком случае "тянуть и объединять перед нажатием", но когда я запускаю hg incoming он сообщает "изменений не найдено", то есть в репозитории Bitbucket нет ничего, чего нет в моем локальном репо).

Как следует из названия, в моем сценарии есть морщина, которая может иметь отношение к наблюдаемому мной поведению, которое я попытаюсь объяснить ниже:

Название ветви, которую я пытаюсь отправить в репозиторий Bitbucket, фактически совпадает с именем ветви, которую я успешно перенес ранее, но затем закрыл с помощью hg commit --close-branchпотому что я ошибочно создал его с неправильной родительской ревизией.

(Это длинная история, почему новое имя ветки должно быть таким же, как и старое - но это так.)

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

Вот схема истории изменений:

   0         0. Baseline of production code
   |\
   1 \       1. Fixes to production code
   |  \
   2   \     2. More fixes to production code
  /|\  |
 3 | | |     3. Import new feature drop from offshore developer (*),
 | | | |        to named branch "drop1". (But I goofed! Parent
 | | | |        revision should have been r0.)
 | | | |
 4 | | |     4. "hg commit --close_branch" to prune the
   | | |        original "drop1" branch created in error.
   | | |
   | | 5     5. Import new feature drop again,
   | | |        this time with correct parent revision.
   | | |        Named branch via "branch -f drop1"
   | | |        (to shadow the name of the closed branch).
   |  \|
   |   6     6. Merge bug fixes from production into drop1
   |   |
   |   7     7. Fixes to drop1 code
   |
   8         8. Ongoing maintenance of production code

Я был в состоянии передать от r0 до r4 в репозиторий Bitbucket, но пытался подтолкнуть r5 (с или без --new-branch вариант) дает мне:

abort: push creates new remote head 439d23090786 on branch 'drop1'!
(did you forget to merge? use push -f to force)

Итак, вопросы:

  1. У меня есть выбор, кроме как использовать push -f получить r5 в репозиторий Bitbucket?
  2. Возможно ли, что версия Mercurial в Bitbucket не понимает, что оригинальная ветка drop1 была закрыта успешным нажатием r4, что вызвало hg push --new-branch --rev 5 терпеть неудачу?

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

1 ответ

Решение

Вы создаете вторую голову drop1, хотя другая закрыта. Просто используйте -f в качестве сообщения об ошибке.

Другие вопросы по тегам