如何使用git-svn切换svn存储库?

时间:2011-05-12 09:01:11

标签: git svn git-svn

我使用git-svn创建了许多作为SVN存储库克隆的git项目。我们已将SVN存储库迁移到新的提供程序,因此URL现已更改。如何更新git clone的远程SVN URL?

一种可能性是我从新的SVN存储库中重新克隆,但是我不想这样做,因为这个过程可能需要几天才能完成整个历史记录。

提出这个问题的另一种方法是,git在哪里存储有关您正在使用的远程SVN存储库位置的信息?即当您输入'git svn info'时,URL信息来自何处?

2 个答案:

答案 0 :(得分:24)

我在git wiki中找到了一个页面,它完全回答了我的问题:

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

  
      
  • 编辑.git / config中的svn-remote url URL以指向新域名
  •   
  • 运行git svn fetch - 这需要从svn获取至少一个新版本!
  •   
  • 将svn-remote网址更改回原始网址
  •   
  • 运行git svn rebase -l以执行本地rebase(包含上次提取操作所带来的更改)
  •   
  • 将svn-remote网址更改回新网址
  •   
  • 运行git svn rebase现在应该再次运行!
  •   
     

这只有在git svn fetch步骤实际获取时才有效   什么! (花了一些时间才发现......我不得不放入假人   修改我们的svn存储库以实现它!)

答案 1 :(得分:11)

遵循same url [1],但使用更新的解决方案,它变得更加容易。

.git/config部分的[svn-remote]内,将 url 设置为网址,然后设置 { {1}} 网址:

rewriteRoot

同样可以通过指南中的[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> 报告了相同的旧URL,但新URL为Repository Root:

git svn info

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