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

Как переключить репозитории svn с помощью git -svn?

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Следуя того же url [1], но с обновленным решением становится намного проще.

Внутри .git/config в разделе [svn-remote] установите rewriteRoot на старый URL-адрес и установите url на новый 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