Отправка изменений Hg обратно в SVN - PullRequest
16 голосов
/ 22 октября 2010

Я начал работать в репозитории SVN. Я клонировал подпапку этого файла в локальный репозиторий Hg с hg clone.

После этого я хотел поделиться этим с коллегой, у которого нет доступа к хранилищу SVN. Я создал частный репозиторий BitBucket, и мы время от времени выдвигали изменения, и, следовательно, мне приходилось их извлекать.

hgsubversion делает некоторые неприятные вещи с наборами изменений, такие как смена их коммиттера (и я верю даже хешу). Когда я попытался продвинуться в репозиторий BitBucket, мне пришлось выполнить слияние.

Теперь я не могу отправить изменения обратно в хранилище Subversion из-за нашего любимого друга, abort: Sorry, can't find svn parent of a merge revision..

Каким образом можно было бы получить хранилище Mercurial, нацеленное на BitBucket, с хранилищем Mercurial, нацеленным на svn, оставаясь совместимым с hgsubversion (то есть без импорта ревизий слияния)?

Конечно, был бы полезен некоторый автоматизированный способ сделать это, но если бы не было такого простого / легкого способа сделать это, я был бы благодарен за любое решение.

Я использую hgsubversion, а не hgsvn; то есть расширение, в котором каждый делает hg clone svn://repo/url. Я открыт для переключения, хотя, если необходимо.

Ответы [ 3 ]

21 голосов
/ 23 октября 2010

Когда вы используете Mercurial в хранилище Subversion, вы все равно должны думать, как SVN, поэтому многие функции, входящие в базовый рабочий процесс Mercurial, просто не будут работать. Слияние, как это делает Mercurial, невозможно в хранилище SVN. Если вы объединили свою работу с вытащенной веткой svn, вы получите печально известное сообщение о том, что получаете сейчас: (

Предлагаю вам прочитать ответ durin42 на этот вопрос .

РЕДАКТИРОВАТЬ: Чтобы выйти из текущего беспорядка, я предлагаю вам создать патч (или серию патчей) из точки, которую вы извлекаете из репозитория SVN. Получите новую свежую копию из хранилища Subversion и примените патчи. Я не уверен, что вы сможете сделать это из своего текущего репо. Вы можете изучить команду hg diff.

hg diff -g -r tip -r XXX > patch

с XXX - это исходная проверка SVN (я еще не проверял).

10 голосов
/ 25 октября 2010

Да, hgsubversion меняет имя коммиттера, потому что оно должно отражать имя, назначенное Subversion. Hgsubversion должен , затем также измените хэш набора изменений. Это на самом деле не то, что hgsubversion может решить - это встроено в дизайн Mercurial, что хеш наборов изменений основан на всей информации в наборе изменений и содержит имя коммиттера.

Пожалуйста, прочитайте мое руководство по hgsubversion для получения информации о том, как правильно работать с hgsubversion. Важно помнить, что hgsubversion превращает hg в лучший svn, но Subversion по-прежнему является хозяином. Это означает, что вы должны линеаризовать свою историю, прежде чем отправлять ее обратно в Subversion, чтобы не было слияний или других забавных вещей DVCS.

Если вы хотите воспользоваться преимуществами распределенных функций в Mercurial, то делайте это небольшими итерациями: проведите некоторое сотрудничество в Mercurial, линеаризуйте наборы изменений и вернитесь к Subversion, уничтожьте нелинейную часть ваших клонов, потяните из Subversion. Затем вы можете повторить с новыми итерациями сотрудничества в Mercurial.

0 голосов
/ 11 августа 2015

Я только что столкнулся с подобной проблемой, которая в основном заключалась в следующем:

  • клонирование репозитория SVN с помощью HgSubversion
  • , работа с некоторыми слияниями
  • при попытке вытащитьон вернулся к прежнему репозиторию SVN

и столкнулся с ужасным сообщением Sorry, can't find svn parent of a merge revision.

Вот что я сделал, чтобы исправить это без особых хлопот:

  1. Загрузите TortoiseSVN с по этой ссылке и установите его.
  2. Извлеките репозиторий SVN в новую папку с помощью команды SVN Checkout... из контекстного меню проводника Windows (щелкните правой кнопкой мыши, чтобыдоступ к нему).
  3. Скопируйте содержимое локальной папки HG (исключая только подпапку .hg) в только что созданную папку SVN, перезаписав все файлы.
  4. Щелкните правой кнопкой мыши на этоми сделайте SVN Commit....
  5. Очистите репозиторий HG и извлеките его из обновленного репозитория SVN.

Это займет 2 минуты, и все должно начать работать снова.Вы потеряете некоторую информацию о слиянии и фиксации, но это не должно быть проблемой, так как комбо SVN / HgSubversion не может их отследить.

...