准备
将项目从 SVN 迁移到基于 Git 的版本控制的第一步是准备迁移主管的本地计算机。在此阶段,您将下载方便的实用程序脚本,挂载区分大小写的文件系统(如有必要),并将作者信息从 SVN 映射到 Git。
以下所有步骤都应在迁移主管的本地计算机上执行。
下载迁移脚本
Git 附带了导入 SVN 存储库的大部分必要工具,但是,Atlassian 已将一些缺失的功能整合到一个方便的 JAR 文件中。此文件将是迁移不可或缺的一部分,因此请务必从 Atlassian 的 Bitbucket 帐户下载 svn-migration-scripts.jar
。本指南假设您已将其保存在主目录中。免责声明:对于 svn 迁移,您需要一个区分大小写的文件系统,这在 NTFS 上不起作用,我们建议在 Linux 计算机上使用。
下载完成后,最好验证脚本,以确保安装了 Java 运行时环境、Git、Subversion 和 git-svn 实用程序。打开命令提示符并运行以下命令:
java -jar ~/svn-migration-scripts.jar verify
如果您没有迁移流程所需的程序,这将在控制台中显示一条错误消息。继续操作之前,请确保已安装所有缺失的软件。
相关资料
如何移动完整的 Git 存储库
查看解决方案
了解 Bitbucket Cloud 的 Git
如果您收到无法确定版本的警告,请运行 export LANG=C
(*nix) 或 SET LANG=C
(Windows),然后重试。
如果您在运行 OS X 的计算机上执行迁移,还会看到以下警告:
You appear to be running on a case-insensitive file-system. This is unsupported, and can result in data loss.
我们将在下一节中讨论这个问题。
挂载区分大小写的磁盘镜像
迁移到 Git 应在区分大小写的文件系统上完成,以避免损坏存储库。如果您在 OS X 计算机上执行迁移,则会出现问题,因为 OS X 文件系统不区分大小写。
如果您没有运行 OS X,您要做的就是在您的本地计算机上创建一个名为 ~/GitMigration
的目录,这是您要进行转换的地方。之后,您可以跳到下一节。
如果您运行的是 OS X,则需要使用 svn-migration-scripts.jar
中包含的 create-disk-image
脚本挂载区分大小写的磁盘镜像。它需要两个参数:
1. 要创建的磁盘镜像的大小(以千兆字节为单位)。您可以使用任何您喜欢的大小,只要它比您要迁移的 SVN 存储库大即可。
2. The name of the disk image. This guide uses GitMigration
for this value.
例如,以下命令创建了一个名为 GitMigration
的 5GB 磁盘镜像:
java -jar ~/svn-migration-scripts.jar create-disk-image 5 GitMigration
磁盘镜像已安装在您的主目录中,因此您现在应该在本地计算机上看到一个名为 ~/GitMigration
的目录。它是一个区分大小写的虚拟文件系统,也是您存储转换后的 Git 存储库的地方。
提取作者信息
SVN 仅记录每个修订版本的作者的用户名。但是,Git 会存储作者的全名和电子邮件地址。这意味着您需要创建一个将 SVN 用户名映射到 Git 对应用户名的文本文件。
运行以下命令以自动生成此文本文件:
cd ~/GitMigration
java -jar ~/svn-migration-scripts.jar authors <svn_repo_uri> > authors.txt
请务必将
替换为要迁移的 SVN 存储库的 URI。例如,如果您的存储库位于 https://svn.example.com
,则可运行以下命令:
java -jar ~/svn-migration-scripts.jar authors https://svn.example.com > authors.txt
这将创建一个名为 authors.txt
的文本文件,其中包含 SVN 存储库中每个作者的用户名以及生成的姓名和电子邮件地址。它应该类似于下方的内容:
j.doe = j.doe <j.doe@mycompany.com>
m.smith = m.smith <m.smith@mycompany.com>
将等号右边的部分变更为相应用户的全名和电子邮件地址。例如,您可以将上述作者变更为:
j.doe = John Doe <john.doe@atlassian.com>
m.smith = Mary Smith <mary.smith@atlassian.com>
摘要
现在您已经有了迁移脚本、磁盘镜像(仅限 OS X)和作者信息,您可以将 SVN 历史记录导入到新的 Git 存储库中。下一阶段将解释这种转换的工作原理。
分享此文章
下一主题
推荐阅读
将这些资源加入书签,以了解 DevOps 团队的类型,或获取 Atlassian 关于 DevOps 的持续更新。