先决条件
若要执行这些步骤,必须使用 macOS 或 Linux 系统并安装以下工具:
- Subversion
- Git,包括
git-svn
- Git Large File Storage (Git LFS)(请参阅“安装 Git Large File Storage”)
导入 Subversion 存储库
-
在 GitHub.com 上创建一个新存储库。 为避免错误,请勿使用 README、许可或 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 或包含git-svn
包的 Ubuntu 包注册表。 -
若要确认计算机上已安装 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.txt
svn 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 存储库是标准格式(包含“主干”、“分支”和“标记”文件夹),请运行
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
文件的路径。例如,若要将 Logisim 项目从 Sourceforge 克隆到名为 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,然后重试。