Как переключить svn репозитории с помощью git-svn? - PullRequest
21 голосов
/ 12 мая 2011

У меня есть несколько проектов git, созданных как клоны репозиториев SVN с использованием git-svn.Мы перенесли наши SVN-репозитории в нового провайдера, поэтому URL-адрес изменился.Как я могу обновить удаленный URL SVN моего клона git?

Одна из возможностей состоит в том, что я повторно клонирую из нового репозитория SVN, но я бы предпочел не делать этого, так как этот процесс может занять несколько дней при извлечении всей истории.

Другой способЗадайте этот вопрос: где git хранит информацию о расположении удаленного репозитория SVN, с которым вы работаете?Т.е. откуда берется информация об URL при вводе 'git svn info'?

Ответы [ 2 ]

24 голосов
/ 12 мая 2011

Я нашел страницу в git wiki, которая точно отвечает на мой вопрос:

https://git.wiki.kernel.org/index.php/GitSvnSwitch

  • Отредактируйте URL-адрес svn-remote в файле .git / config, чтобы он указывал на новое доменное имя
  • Запустить git svn fetch - для этого нужно получить хотя бы одну новую ревизию из svn!
  • Изменить URL-адрес svn-remote обратно на исходный URL
  • Запустите git svn rebase -l, чтобы выполнить локальную перебазировку (с изменениями, внесенными во время последней операции выборки)
  • Изменить URL-адрес svn-remote обратно на новый URL-адрес
  • Запуск git svn rebase теперь должен работать снова!

Это будет работать только в том случае, если шаг git svn fetch действительно выбирает что-нибудь! (Мне потребовалось время, чтобы обнаружить это ... Я должен был положить в манекен внесение изменений в наш SVN-репозиторий, чтобы это произошло!)

11 голосов
/ 10 ноября 2016

После того же URL-адреса [1] , но с обновленным решением это становится намного проще.

Внутри .git/config, в разделе [svn-remote] установите url на новый URL и установите rewriteRoot на старый URL:

[svn-remote "svn"]
    url         = https://new.svn-server.net/svn/root
    rewriteRoot = https://old.svn-server.net/svn/root

То же самое можно сделать с помощью команд git config ... из руководства:

$ git config --local --replace-all svn-remote.<name>.rewriteRoot `git config --local --get svn-remote.<name>.url`
$ git config --local --replace-all svn-remote.<name>.url <new_url>

Тогда это просто работает, для меня мне не нужно делать никаких фиктивных изменений, даже если на новом сервере нет новых версий. Интересно, что git svn info сообщает тот же старый URL-адрес, но с новым URL-адресом в качестве корня репозитория:

$ git svn info
Path: .
URL: <old-url>
Repository Root: <new-url>

[1] https://git.wiki.kernel.org/index.php/GitSvnSwitch

...