You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不丢失提交历史从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 18:54:04