跳至主要内容

导入 Subversion 仓库

您可以通过将 Subversion 仓库转换为 Git,然后将 Git 仓库推送到 GitHub,来导入 Subversion 仓库。

先决条件

要执行以下步骤,您必须使用 macOS 或 Linux 系统,并且已安装以下工具。

导入 Subversion 仓库

  1. 在 GitHub 上创建一个新仓库。为避免错误,请不要在新仓库中初始化 README、许可证或 .gitignore 文件。您可以在项目推送到 GitHub 后再添加这些文件。更多信息请参阅 创建新仓库

  2. 要确认机器上已安装 Git,请运行 git --version

    输出应类似于 git version 2.40.0

  3. 要确认机器上可使用 git svn,请运行 git svn --version

    输出应类似于 git-svn version 2.40.0 (svn 1.14.2)

    如果您能够成功运行 git,但运行 git svn 时出现错误,可能需要单独安装 git svn。我们建议使用 Homebrew 或 Ubuntu 软件包仓库,这些仓库都提供 git-svn 包。

  4. 要确认机器上已安装 Git LFS,请运行 git lfs --version

    输出应类似于 git-lfs/3.1.4 (GitHub; darwin arm64; go 1.18.1)

  5. 检出您的 Subversion 仓库。

    例如,要从 Sourceforge 检出 Logisim 开源项目,请运行 svn checkout https://svn.code.sf.net/p/circuit/code/trunk

  6. 进入 Subversion 仓库所在的目录。

  7. 要获取 Subversion 项目中的作者列表并将其存储到 authors.txt,请运行以下脚本。

    Shell
    svn log -q | grep -e '^r' | awk 'BEGIN { FS = "|" } ; { print $2" = "$2 }' | sed -E 's/^ *//' | sort | uniq > authors.txt
    
  8. 更新您的 authors.txt 文件,将 Subversion 仓库中使用的作者名称映射为您希望在 Git 仓库中使用的名称,格式如下:

    octocat = The Octocat <octocat@github.com>
    
  9. 要将 Subversion 仓库转换为 Git 仓库,请使用 git svn

    • 如果您的 Subversion 仓库采用标准布局,包含 “trunk”、 “branches” 和 “tags” 文件夹,请运行 git svn clone -s URL PATH/TO/DESTINATION --authors-file PATH/TO/AUTHORS.TXT,将 URL 替换为 Subversion 仓库的 URL,将 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 仓库不是标准布局,您可以自定义 git svn 以适配您的仓库。更多信息请参阅 Git 文档中的 git-svn

  10. Git 将检出每个 SVN 修订版,并将该修订版转换为 Git 提交。如果仓库文件数量众多或历史记录庞大,此过程将耗费较长时间。

    对于大型仓库,命令可能会卡住。如果出现这种情况,您可以通过按 Ctrl+C 终止命令,然后进入新目录并运行 git svn fetch,从中断处继续。

  11. 进入新创建的 Git 仓库所在的目录。

  12. 要将 GitHub 仓库添加为远程仓库,请运行 git remote add origin URL,将 URL 替换为您之前创建的 GitHub 仓库的链接,例如 https://github.com/octocat/example-repository.git

  13. 要将仓库推送到 GitHub,请运行 git push --mirror origin

    如果仓库中包含任何超出 GitHub 文件大小限制的文件,推送可能会失败。请通过运行 git lfs import 将大文件迁移到 Git LFS,然后重新尝试。

延伸阅读

© . This site is unofficial and not affiliated with GitHub, Inc.