Как обрабатывать слияния с hgsubversion? - PullRequest
7 голосов
/ 16 апреля 2010

Я пытаюсь внести свой вклад в проект, который использует Subversion.Я использовал Mercurial и его расширение hgsubversion для клонирования репо.Моя работа происходит в ветви функций.

Как мне поддерживать ветвь функций в актуальном состоянии, учитывая то, что происходит в ветви по умолчанию (hg speak), то есть в стволе (svn speak)?* Таким образом, я использовал hg up feature для обновления до ветви функций, затем hg pull, которая дала мне наборы изменений в ветви по умолчанию.Поэтому я сделал hg merge default, подтвердил слияние, а затем попытался hg push отправить мои наборы изменений в Subversion.И Mercurial сказал: «Извините, не могу найти svn-родитель ревизии слияния».

Ответы [ 3 ]

5 голосов
/ 09 сентября 2010

Я наконец-то понял, как отключить мой репозиторий после события, подобного описанному в вопросе, чтобы я мог продолжить работу без необходимости клонировать родительский репозиторий (который, очевидно, довольно медленный операция, когда вы тянете из Subversion!). Если «наконечник» Subversion превосходит вас так, что вы больше не можете толкать, просто убедитесь, что у вас есть встроенное расширение «rebase», активированное в вашем Mercurial через строку $ HOME / .hgrc, например:

[extensions]
rebase =

И тогда вы сможете запускать эту команду, когда ваш репозиторий заклинивает:

$ hg rebase --svn

Если я правильно понимаю, это уничтожит вашу текущую ветку, которая забрала вас из Subversion HEAD, и перестроит ее на вершине "tip" в Mercurial, которая соответствует HEAD в Subversion. Оттуда вы можете продолжать работать и успешно делать толчки снова. До сих пор это всегда работало для меня; дайте мне знать, если у вас возникнут какие-либо проблемы!

1 голос
/ 16 апреля 2010

Mercurial как несколько разных режимов ветвления: http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/

То, что вы описываете, это «именованные ветви», которое наиболее популярно, когда вы работаете с репо, доступ к которому осуществляется только через Mercurial (или hg-git).

Однако, когда вы используете hg-subversion, чтобы вы вносили изменения в / из Subversion, у которой только номинально есть ветви, лучше хранить все ваши ртутные изменения в названной ветви по умолчанию, и используя шаблон «клоны и ветви» (который я предпочитаю в любом случае).

В частности, это сообщение Sorry, can't find svn parent of a merge revision. не является потомком ревизии, имеющей прямое совпадение в подрывной деятельности.

Если бы я был вами, я бы откинулся от svn, а затем переместил бы свою работу в ветку репозитория «по умолчанию» с помощью команды «трансплантат» (упакованное расширение). Если вы хотите, чтобы несколько функций параллельно с / hg-subversion использовали отдельные клоны (они такие дешевые), так как это больше соответствует тому, как Subversion думает о ветвях.

0 голосов
/ 07 мая 2010

Мне нужно было выяснить это для себя и записать это здесь:

http://notebook.3gfp.com/2010/05/pushing-a-new-feature-from-a-mercurial-repo-into-an-svn-repo/

Я еще не выяснил, как закрыть ветку в subversion и чтобы корректный график ртути выглядел.

...