Подтвердить что ты не робот

Отправка Hg возвращается к SVN

Я начал работу в репозитории 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. Я открыт для переключения, хотя, при необходимости.

4b9b3361

Ответ 1

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

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

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

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

когда XXX является вашим оригинальным заказом SVN (я еще не тестировал его.)

Ответ 2

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

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

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

Ответ 3

Я просто ударил аналогичную проблему, которая в основном была:

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

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

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

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

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