先决条件
要按照这些步骤操作,您必须使用 macOS 或 Linux 系统,并已安装以下工具:
- Subversion
- Git,包括
git-svn - Git 大型文件存储 (Git LFS)(请参阅“安装 Git 大型文件存储”)
导入 Subversion 仓库
-
在 GitHub 上创建一个新仓库。为避免错误,请不要使用自述文件、许可证或 gitignore 文件初始化新仓库。项目推送到 GitHub 后,您可以添加这些文件。更多信息,请参阅“创建新仓库”。
-
要确认 Git 是否已安装在您的机器上,请运行
git --version。输出应类似于
git version 2.40.0。 -
要确认您的机器上是否可用
git svn,请运行git svn --version。输出应类似于
git-svn version 2.40.0 (svn 1.14.2)。如果您能够成功运行
git,但在运行git svn时遇到错误,则可能需要单独安装git svn。我们建议使用 Homebrew 或 Ubuntu 包注册表,其中包含git-svn包。 -
要确认 Git LFS 是否已安装在您的机器上,请运行
git lfs --version。输出应类似于
git-lfs/3.1.4 (GitHub; darwin arm64; go 1.18.1)。 -
检出您的 Subversion 仓库。
例如,要从 Sourceforge 检出 Logisim 开源项目,请运行
svn checkout https://svn.code.sf.net/p/circuit/code/trunk。 -
进入 Subversion 仓库的目录。
-
要获取 Subversion 项目中的作者列表并将列表存储在
authors.txt中,请运行以下脚本:Shell svn log -q | grep -e '^r' | awk 'BEGIN { FS = "|" } ; { print $2" = "$2 }' | sed 's/^[ \t]*//' | sort | uniq > authors.txtsvn log -q | grep -e '^r' | awk 'BEGIN { FS = "|" } ; { print $2" = "$2 }' | sed 's/^[ \t]*//' | sort | uniq > authors.txt -
更新您的
authors.txt文件,使用以下格式将 Subversion 仓库中使用的作者名称映射到您要在 Git 仓库中使用的名称:octocat = The Octocat <octocat@github.com> -
要将 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。
-
-
Git 将检出每个 SVN 修订版并将修订版转换为 Git 提交。如果您的仓库有很多文件或很多历史记录,此过程将花费很长时间。
对于大型仓库,命令可能会冻结。如果发生这种情况,您可以使用 Ctrl+C 终止命令,移动到新目录,然后运行
git svn fetch来从中断处继续。 -
进入新创建的 Git 仓库的目录。
-
要添加您的 GitHub 仓库作为远程仓库,请运行
git remote add origin URL,将URL替换为您之前创建的 GitHub 仓库的 URL,例如https://github.com/octocat/example-repository.git。 -
要将仓库推送到 GitHub,请运行
git push --mirror origin。如果您的仓库包含任何大于 GitHub 文件大小限制的文件,则推送可能会失败。通过运行
git lfs import将大型文件移动到 Git LFS,然后重试。