SVN迁移Git后推送指定分支、标签失败,报错refspec不匹配
SVN转Git推送失败的解决办法
问题原因
你执行git branch -a看到的remotes/svn/feature_1这类分支是SVN远程跟踪分支,并非本地分支;标签同理,SVN的标签导入后可能仅存在于SVN的远程命名空间下,没有生成本地标签。直接用feature_1这类名字推送,Git找不到对应的本地引用,所以报错。
解决步骤
1. 推送分支
方式一:逐个处理分支
先把SVN远程跟踪分支转为本地分支,再推送:
# 创建并切换到本地feature_1分支,关联SVN的远程跟踪分支 git checkout -b feature_1 remotes/svn/feature_1 # 同理处理其他分支 git checkout -b feature_2 remotes/svn/feature_2
完成后推送所有本地分支到Git远程:
git push origin master feature_1 feature_2 ...
方式二:批量推送所有分支
如果分支数量多,用这条命令一键把所有remotes/svn/下的分支推送到Git远程的同名分支:
git push origin refs/remotes/svn/*:refs/heads/*
2. 推送标签
先检查本地标签列表,如果git tag没有输出,说明需要把SVN的标签转为本地标签:
# 批量将SVN远程标签转为Git本地标签 git for-each-ref --format='%(refname:short)' refs/remotes/svn/tags | while read tag; do git tag "${tag#tags/}" "refs/remotes/svn/$tag"; done
然后推送所有本地标签到Git远程:
git push origin --tags
3. 验证结果
推送完成后,执行以下命令确认远程仓库的分支和标签已同步:
git fetch origin git branch -a git tag -l
内容的提问来源于stack exchange,提问作者Kliver Max
相关产品推荐
相关产品推荐

