Git SVN迁移时分支子文件夹被拆分为独立远程分支的原因
SVN迁移Git分支被拆分的原因及解决办法
问题原因
git svn识别分支的逻辑是基于SVN的目录提交历史和mergeinfo属性。你的SVN仓库里,1.0/back_end、1.0/front_end这类子目录有独立的提交记录,或者带有svn:mergeinfo属性,git svn会把它们当成独立的分支节点处理,而非将1.0整体视为一个分支。
另外,你使用的--branches="/branches/releases/{1.0,2.0}"规则,会让git svn递归扫描这些目录下的所有子目录,只要发现符合分支特征的路径,就会生成对应的远程分支。
解决办法
你需要调整git svn的分支匹配规则,让它只把1.0、2.0这类顶层版本目录识别为分支,忽略子目录。
方式一:重新初始化仓库
执行以下命令重新初始化,用通配符匹配顶层版本目录:
git svn init -T /branches/releases/trunk --branches="/branches/releases/*" --no-minimize-url [repo_url] git svn fetch --authors-file=authors.txt
如果版本号有明确格式(比如都是x.x),可以用更精确的匹配规则:
git svn init -T /branches/releases/trunk --branches="/branches/releases/[0-9]*.[0-9]*" --no-minimize-url [repo_url] git svn fetch --authors-file=authors.txt
方式二:修改现有仓库配置
如果已经初始化过仓库,直接编辑.git/config文件,找到[svn-remote "svn"]区块,将branches配置行修改为:
branches = branches/releases/*:refs/remotes/origin/*
保存后重新执行fetch命令:
git svn fetch --authors-file=authors.txt
注意:如果之前已经执行过fetch操作,建议删除现有本地git仓库后重新初始化,避免旧的分支缓存造成干扰。
内容的提问来源于stack exchange,提问作者austinw
相关产品推荐
相关产品推荐

