Как переключить репозитории svn с помощью git -svn?
У меня есть несколько проектов git, созданных как клоны репозиториев SVN с использованием git -svn. Мы перенесли наши хранилища SVN на нового провайдера, чтобы теперь URL-адрес изменился. Как обновить удаленный SVN-адрес моего клонирования git?
Одна из возможностей заключается в том, что я повторно клонируюсь из нового SVN-репозитория, но я бы предпочел не делать этого, поскольку процесс может занять несколько дней, когда вы тянете всю историю.
Другой способ поставить этот вопрос: где git хранит информацию о местонахождении удаленного репозитория SVN, с которым вы работаете? То есть где появляется информация о URL-адресе, когда вы вводите "git svn info"?
Ответы
Ответ 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