含尾随空格的SVN标签致git svn fetch失败,如何跳过该标签?
解决git svn迁移时带尾随空格标签的报错问题
问题场景
接手了一个10年历史的SVN仓库,在Windows环境用git 2.38.1执行git svn fetch迁移到GitHub时遇到报错,原因是SVN曾经存在一个名称末尾带空格的标签(后来已被移除,但git svn仍会处理历史记录),Windows文件系统不允许创建结尾带空格的目录,报错信息如下:
$ git svn fetch Found possible branch point: https://REDACTED/tags/REDACTED%20Rev%20D => https://REDACTED/tags/REDACTED%20REV%20D%20, 4255 Found branch parent: (refs/remotes/origin/tags/REDACTED Rev D ) 6900fc84b93ff8d331aae85af70b5afdc333f6f0` fatal: Unable to create 'C:/SrcRoot/REDACTED/.git/svn/refs/remotes/origin/tags/REDACTED Rev D /index.lock': Invalid argument read-tree 6900fc84b93ff8d331aae85af70b5afdc333f6f0: command returned error: 128
可行解决方法
1. 配置git svn忽略特定标签
打开本地仓库的.git/config文件,找到[svn-remote "svn"]段落,添加ignore-paths规则,精准匹配带尾随空格的标签路径:
[svn-remote "svn"] url = https://REDACTED fetch = trunk:refs/remotes/origin/trunk branches = branches/*:refs/remotes/origin/* tags = tags/*:refs/remotes/origin/tags/* ignore-paths = ^tags/REDACTED Rev D $
注意正则里的$要对应标签名末尾的空格,保存后重新执行git svn fetch即可跳过该标签。
2. 手动修改git svn的本地追踪记录
如果配置忽略无效,直接操作git svn的本地状态文件:
- 进入路径
.git/svn/refs/remotes/origin/tags - 删除已创建的带尾随空格的标签文件夹(如果存在)
- 编辑该目录下的
.git-svn文件,找到对应这个标签的记录行,删除或注释掉 - 重新执行
git svn fetch,git svn会跳过这条已移除的追踪记录
3. 借助WSL绕过Windows文件系统限制
Windows不允许文件名结尾带空格,但Linux系统支持:
- 把仓库复制到WSL的Linux环境中
- 安装git和git-svn工具
- 在WSL里执行
git svn fetch完成迁移 - 把迁移好的git仓库复制回Windows,再推送到GitHub
内容的提问来源于stack exchange,提问作者Alan
相关产品推荐
相关产品推荐

