如何用 git-svn 把 Subversion 仓库转换为 Git 并推送到 GitHub
2026/9/14 11:22:24 网站建设 项目流程

如何用 git-svn 把 Subversion 仓库转换为 Git 并推送到 GitHub

【免费下载链接】docsThe open-source repo for docs.github.com项目地址: https://gitcode.com/GitHub_Trending/do/docs

如果你手上有一个 Subversion(SVN)仓库,想把它连同提交历史一起迁移到 GitHub,官方文档给出的命令行路径是:先用git-svn把 SVN 仓库转换成 Git 仓库,再把生成的 Git 仓库推送到 GitHub。这条路径要求你在 macOS 或 Linux 系统上操作,并且本机上已安装 Subversion、Git(包含git-svn组件)以及 Git Large File Storage(Git LFS)。完整步骤以文档 Importing a Subversion repository 为准。

准备工作:确认三个工具都已可用

在开始转换之前,逐一确认环境满足要求:

git --version

输出应类似git version 2.40.0

git svn --version

输出应类似git-svn version 2.40.0 (svn 1.14.2)。如果你能正常执行git但执行git svn报错,说明git-svn没有随 Git 一起装上,需要单独安装;文档建议使用自带git-svn包的 Homebrew 或 Ubuntu 包管理器。

git lfs --version

输出应类似git-lfs/3.1.4 (GitHub; darwin arm64; go 1.18.1)。如果仓库中有大文件,这一步不能跳过。

在 GitHub 上创建空仓库

先在你的 GitHub 上创建一个新仓库作为迁移目标。为避免推送时出错,不要用 README、license 或 .gitignore 文件初始化这个新仓库,这些文件可以在项目推送完成后再补充。

导出 Subversion 仓库的作者列表

git-svn转换时需要一份作者映射文件,把 SVN 仓库里的作者名对应到 Git 仓库中想使用的名字。分两步完成:

  1. 进入你的 Subversion 仓库目录,运行下面的脚本生成authors.txt

    svn log -q | grep -e '^r' | awk 'BEGIN { FS = "|" } ; { print $2" = "$2 }' | sed -E 's/^ *//' | sort | uniq > authors.txt
  2. 编辑authors.txt,把每行改成SVN作者名 = 想要的Git作者名 <邮箱>的格式。例如:

    octocat = The Octocat <octocat@github.com>

    这个文件决定了转换后每条提交显示的作者,如果跳过这一步,Git 仓库里的作者信息将没有对应的邮箱。

用 git svn clone 转换仓库

如果你的 Subversion 仓库是标准布局(包含trunkbranchestags目录),使用-s参数克隆:

git svn clone -s URL PATH/TO/DESTINATION --authors-file PATH/TO/AUTHORS.TXT

各参数含义:

  • URL:Subversion 仓库的地址;
  • PATH/TO/DESTINATION:要把仓库克隆到的本地目录;
  • PATH/TO/AUTHORS.TXT:上一步生成并编辑好的authors.txt的路径。

文档中的示例是把 Sourceforge 上的 Logisim 项目克隆到本地logisim目录:

git svn clone -s https://svn.code.sf.net/p/circuit/code logisim --authors-file path/to/authors.txt

如果你的 Subversion 仓库不是trunk/branches/tags的标准布局,git svn也支持自定义处理方式,参见 Git 官方文档中的 git-svn 说明。

转换过程中 Git 会逐个检查 SVN 版本并把它变成 Git 提交,仓库文件多或历史长时这个过程会持续很久。文档特别提示:大型仓库上命令可能看似卡住,此时可以用Ctrl+C终止命令,进入新建的目录后执行git svn fetch,即可从中断处继续拉取。

把转换结果推送到 GitHub

  1. 进入git svn clone生成的 Git 仓库目录。

  2. 添加 GitHub 仓库作为远程:

    git remote add origin URL

    其中URL替换为你在准备阶段创建的那个 GitHub 仓库的地址,例如https://github.com/octocat/example-repository.git

  3. 推送整个仓库:

    git push --mirror origin
  4. 推送完成后到 GitHub 仓库页面核对:提交历史、分支应都已同步。

推送失败时检查大文件

如果仓库中包含超过 GitHub 文件大小限制的文件,git push --mirror可能会失败。此时把大文件迁移到 Git LFS 后重试:

git lfs import

执行后重新运行git push --mirror origin

相关文档

  • 导入源码总览:Importing source code
  • 命令行导入方式的其他来源:Using the command line to import source code
  • 2 GB 推送限制排查(仅 GitHub.com / GitHub Enterprise Cloud 适用):Troubleshooting the 2 GB push limit

【免费下载链接】docsThe open-source repo for docs.github.com项目地址: https://gitcode.com/GitHub_Trending/do/docs

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询