Как обрабатывать слияния с помощью hgsubversion?

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

Как мне поддерживать ветвь функции в актуальном состоянии с тем, что происходит в ветке по умолчанию (hg speak) или транке (svn говорят)?

Так что я использовал hg up feature чтобы обновить до ветви функции, затем hg pull который дал мне наборы изменений в ветке по умолчанию. Так я и сделал hg merge defaultтот совершил слияние, потом попробовал hg push отправить мои изменения в Subversion. И Mercurial сказал: "Извините, не могу найти svn-родитель ревизии слияния".

3 ответа

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

[extensions]
rebase =

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

$ hg rebase --svn

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

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, а затем переместил бы свою работу в ветку репозитория "по умолчанию" с помощью команды "трансплантат" (упакованное расширение). Если вы хотите, чтобы несколько функций параллельно выполнялись с помощью h / hg-subversion, используйте отдельные клоны (они настолько дешевы), поскольку это больше соответствует тому, как Subversion думает о ветвях.

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

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

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

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