先决条件
要执行以下步骤,您必须使用 macOS 或 Linux 系统,并安装以下工具
- Subversion
- Git,包括
git-svn
- Git 大型文件存储 (Git LFS)(参见 "安装 Git 大型文件存储")
导入 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或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.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 <[email protected]>
-
要将您的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
文件的路径。例如,要将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,然后重试。