不丢失提交历史从SVN迁移到GitHub Enterprise的可行方案咨询
可行迁移方案(完整保留SVN提交历史、分支、标签)
方案1:内网环境执行转换后推送(首推,完全符合安全要求)
该方案全程不会对外暴露内网SVN服务,仅由操作终端主动拉取内网SVN数据、主动推送至GitHub Enterprise(以下简称GHE),不会违反网络安全规则:
- 准备一台同时满足两个条件的终端:① 可以访问内网SVN服务器;② 可以访问GHE(如果GHE部署在公网,仅需该终端允许访问公网即可,无需做任何端口映射)
- 该终端安装Git for Windows(默认已集成git-svn组件,无需额外配置)
- 首先生成SVN提交人到Git账号的映射文件,执行命令:
svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2"@企业邮箱后缀>"}' | sort -u > authors.txt
生成后可手动调整该文件内容,确保提交人姓名、邮箱和GHE上的企业账号匹配 - 执行SVN到Git的转换命令,完整拉取所有历史、分支、标签:
git svn clone <内网SVN仓库地址> --no-metadata --authors-file=authors.txt --stdlayout
若你的SVN仓库未使用标准的trunk/branches/tags目录结构,可调整--stdlayout参数指定对应的分支、标签目录路径 - 转换完成后本地会生成完整的Git仓库,可执行
git log、git branch -a、git tag命令校验历史提交、分支、标签是否完整 - 校验无误后,在GHE上创建对应空项目,执行推送命令即可:
git remote add origin <GHE项目仓库地址> git push origin --all git push origin --tags
方案2:SVN全量导出后迁移(适用于无法找到同时连通SVN和GHE的终端场景)
如果你实在找不到同时能访问两边的终端,可以通过SVN全量备份中转迁移:
- 在内网可访问SVN服务器的设备上,执行SVN仓库全量导出命令(不要直接导出工作区zip/tar,会丢失所有历史):
svnadmin dump <SVN服务器上仓库的本地物理路径> > svn_full_dump.svndump - 将导出的
.svndump备份文件拷贝到可访问GHE的终端上,本地搭建临时SVN服务加载该备份:# 创建本地临时SVN空仓库 svnadmin create local_svn_temp # 导入备份文件 svnadmin load local_svn_temp < svn_full_dump.svndump - 后续步骤和方案1一致,用
git svn clone本地临时SVN仓库地址完成转换,再推送至GHE即可
重要提醒
直接将SVN工作区打包为zip/tar上传的方式仅能保留最新版本代码,会完全丢失所有提交历史、分支、标签信息,不符合你的需求,不建议使用。
内容的提问来源于stack exchange,提问作者uddi baba
相关产品推荐
相关产品推荐

