Как сдвинуть ревизии с ртутного до подрывного? - PullRequest
1 голос
/ 13 февраля 2011

Привет, я преобразовал локальный svn-репозиторий в mercurial, внес несколько изменений в hg и хочу теперь вернуть изменения в svn.
Может кто-нибудь посоветовать, как это сделать?

Iнашел https://www.mercurial -scm.org / wiki / WorkingWithSubversion # With_Convert_extension но, к сожалению, я не сделал преобразование, как описано там (только hg преобразовал в локальном репо) и не работалс MQ либо.

Есть ли шанс отодвинуть отдельные ревизии в Subversion, или все, что я могу сделать, - внести локальные изменения в изменения?

Ответы [ 3 ]

3 голосов
/ 13 февраля 2011

Я думаю, вы могли бы использовать hgsubversion .

Я бы попробовал сделать это:

  1. Клонировать репозиторий SVN с помощью hgsubversion.
  2. Попробуйте перенести изменения из старого хранилища в новое.Это может оказаться сложным.Вот некоторые решения:
    • Добавление изменений из одного репозитория Mercurial в другой , в котором используются команды export и import или расширение transplant.
    • Возможно, вы можете использовать hg pull --force для извлечения наборов изменений из этого несвязанного репозитория.(см. Как объединить два проекта в Mercurial? ) Но затем после этого вам нужно будет запустить merge, что может привести к ошибкам при переносе изменений в SVN.Поэтому, возможно, вы можете попробовать использовать расширение rebase или mq.
    • Может быть, вы сможете использовать расширение mq для генерации нескольких патчей в старом репозитории, скопировать их в новый,и затем примените их.
    • Если все остальное терпит неудачу, вы можете «вручную» применить каждый набор изменений, один за другим, повторно выполнив изменения, которые вы сделали ранее.(Будет полезна команда hg diff -c rev_id)
  3. Со всеми изменениями в вашей копии hgsubversion, просто push их, и они будут добавлены в репозиторий SVN.
  4. ...?
  5. Прибыль!
1 голос
/ 13 февраля 2011

Это не так сложно, как думают люди.В долгосрочной перспективе я предлагаю вам использовать hgsubversion, как предлагают другие ответы, но есть довольно простое краткосрочное решение.

  1. Проверьте все в своем репозитории hg repo
  2. hg up-r [последняя ревизия, конвертированная из svn]
  3. Извлечь из svn в чистый каталог
  4. Скопировать каталог .hg из репозитория hg в svn checkout
  5. Проверьте все эти svn изменения в вашем репозитории hg (не забудьте добавить / удалить файлы ... этот шаг займет немного времени, так как hg должен сканировать все на этот раз)
  6. Объедините две головы, которые вы сейчас используете, используя hg(при условии, что svn продвинулся впереди вас)
  7. Проверьте сборку (если необходимо), вернув изменения в исходное репозиторий hg и протестировав их там (идея состоит в том, чтобы сохранить ваше hg + svn repo в чистотепоэтому отсутствующие / добавленные файлы легко обнаружить в соответствующих инструментах)
  8. Проверьте все изменения, используя svn (не забудьте добавить / удалить файлы)

Как только вы это сделаетена самом деле это не так уж сложноd использовать обе системы друг на друге ... но hgsubversion, вероятно, является лучшим решением, если вам нужен этот долгосрочный период.Я лично использую вышеупомянутую систему, потому что hgsubversion не обрабатывает некоторые довольно странные вещи, которые мы делали с нашим репозиторием SVN в прошлом.

РЕДАКТИРОВАТЬ: я делаю предположение с этим решением, что ствол SVNпродвинулся впереди вас;если это не так, эта процедура становится намного проще.Если вы хотите объединить каждую ревизию hg по отдельности, не должно быть причин, по которым вы не можете этого сделать, просто потребуется немного больше работы.

  • Слияние hg rev 1 с подсказкой svn... совершить в SVN
  • Слить HG Rev 2 с подсказкой SVN ... совершить в SVN
  • Объединить HG ...
1 голос
/ 13 февраля 2011

Я лично использую Mercurial на работе для работы с нашим хранилищем Subversion.Я настоятельно рекомендую вам клонировать с помощью hgsubversion, так как он может фиксировать обратно в хранилище subversion при выполнении простого push.Единственное, что вам нужно научиться делать перебазирование ваших изменений, так как вы не можете использовать функцию слияния mercurial (Subversion просто не может понять, что у набора изменений могут быть два родителя).полезно, если вы хотите удалить репозиторий Subversion и заменить его на Mercurial.К сожалению, это невозможно отодвинуть назад (если вы не хотите начать играть с разницей)

Однако, если вы клонируете репозиторий SVN с помощью hgsubversion, вы, вероятно, (при условии отсутствия слияний) сможете получить измененияВы уже сделали на своем текущем преобразованном ртутном депо в это.В случае слияния вам придется «линеаризовать» его перед передачей изменений.

...