Close

准备

将项目从 SVN 迁移到基于 Git 的版本控制的第一步是准备迁移主管的本地计算机。在此阶段,您将下载方便的实用程序脚本,挂载区分大小写的文件系统(如有必要),并将作者信息从 SVN 映射到 Git。

以下所有步骤都应在迁移主管的本地计算机上执行。


下载迁移脚本


Git 附带了导入 SVN 存储库的大部分必要工具,但是,Atlassian 已将一些缺失的功能整合到一个方便的 JAR 文件中。此文件将是迁移不可或缺的一部分,因此请务必从 Atlassian 的 Bitbucket 帐户下载 svn-migration-scripts.jar。本指南假设您已将其保存在主目录中。免责声明:对于 svn 迁移,您需要一个区分大小写的文件系统,这在 NTFS 上不起作用,我们建议在 Linux 计算机上使用。

下载完成后,最好验证脚本,以确保安装了 Java 运行时环境GitSubversiongit-svn 实用程序。打开命令提示符并运行以下命令:

java -jar ~/svn-migration-scripts.jar verify

如果您没有迁移流程所需的程序,这将在控制台中显示一条错误消息。继续操作之前,请确保已安装所有缺失的软件。

数据库
相关资料

如何移动完整的 Git 存储库

Bitbucket 徽标
查看解决方案

了解 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 的目录,这是您要进行转换的地方。之后,您可以跳到下一节。

Git 迁移:挂载磁盘镜像

如果您运行的是 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 对应用户名的文本文件。

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 的持续更新。

人们通过满是工具的墙进行协作

Bitbucket 博客

Devops 示意图

DevOps 学习路径

与 Atlassian 专家一起进行 Den 功能演示

Bitbucket Cloud 与 Atlassian Open DevOps 如何协同工作

注册以获取我们的 DevOps 新闻资讯

Thank you for signing up