SVN到GIT迁移的完整教程

时间:2020-02-23 14:41:54  来源:igfitidea点击:

我已经在SVN上工作了很长时间,最近我开始研究Git。
在熟悉Git之后,我可以清楚地说它比SVN好得多。
如果您使用多个分支机构,并在分支机构之间进行合并或者重新集成(SVN术语),那么您将了解Git优于SVN的优势。

自从Google代码关闭以来,我最近将我的Google Code项目移到了Github,所以我想写一篇关于SVN到Git Migration的教程。

首先,我们将研究使用Git本机命令将SVN信息库迁移到Git信息库,然后看看有哪些缺点,然后我们将使用SVN2Git工具执行相同的操作。

SVN和Git存储库详细信息:

  • SVN信息库:我已经在线创建了一个公共信息库,其URL为https://pl6.projectlocker.com/theitroad/JDProject/svn
    下图显示了目录结构,注意我有一个带有主干,分支和标签的标准目录结构。
    我还创建了一个另外的文件(README.txt),该文件不在此目录层次结构中。

  • GIT存储库:我正在使用Github作为我的存储库。
    它是免费使用的,我的项目git URL是https://github.com/hyman0323/JDProjects.git

用于SVN到Git迁移的Git本机命令

  • 第一步是从SVN提交创建authors文件,下面是该命令。
    我们需要此文件进行git迁移。
    这是一个很大的命令,请确保将所有这些都放在一个命令中。

之后,您将拥有authors.txt文件,其中将包含已向该SVN项目提交代码的所有作者详细信息。

  • 查找创建项目的修订号。
    使用以下命令:
    您将获得第一个修订版本号,如果您有一个较大的项目并具有发行周期,并且要从特定发行版中导入,则该版本号可能有所不同。
    对我来说是1,因为我刚刚为本教程创建了这个示例SVN项目。

  • 运行以下命令以使用git svn clone将SVN项目转换为Git。
    在创建项目存储库时使用修订号。
    传递–no-minimize-url将允许git svn照原样接受URL,而无需尝试连接到更高级别的目录。
    有关其他选项,请阅读git-svn文档。

  • 您将创建项目目录,进入该目录并添加远程git url作为源。

  • 将SVN分支转换为Git分支:如果此时将列出分支,则将得到类似以下的内容。

Git svn clone命令使主节点从准备就绪的主节点推送到远程git存储库。
但是我们也想推动分支机构。
为此,请使用以下命令:

  • 迁移标签:Git svn clone命令不会创建标签,请按照以下命令创建标签,并使它们准备好推送到远程。

  • 将Git分支和标签推送到远程:我的master,分支和标签已准备好推送,请使用下面的git push`命令将它们发布到远程存储库。

而已。
我们已将SVN项目移至Git。
虽然这个过程似乎很容易,但是git svn clone有两个缺点。

  • 它不会为我们创建分支以推送到远程存储库。
    涉及手动工作,假设您有20个分支。
    创建分支将花费大量时间,并且可能会出现错误或者错别字。

  • 不支持标签,我不得不将标签签出为分支,然后从中创建标签。
    这不像将标签从SVN移到Git。

使用svn2git工具将SVN迁移到GIT

svn2git工具使用本机命令解决了以上两个问题。
在使用此工具之前,需要先安装它。
它需要安装git,git-svn和ruby。
svn2git是git通过svn支持git本地SVN的红宝石包装。
您可以使用以下命令安装必备组件。

$svn log -q https://pl6.projectlocker.com/theitroad/JDProject/svn | awk -F '|' '/^r/{sub("^ ", "", ); sub(" $", "", ); print " = "" <"">"}' | sort -u > authors.txt
  • 一旦在系统上安装了必要的软件,就可以通过rubygems安装svn2git,这会将svn2git命令添加到PATH中。

一旦安装了svn2git,请使用以下命令将SVN存储库迁移到Git。
首先使用上述命令创建authors文件。

  • 从上面的svn log命令中找到初始的svn修订版。

  • 使用以下命令从svn存储库创建本地git项目。

  • 将分支和标签推送到远程Git存储库:您会注意到svn2git已经创建了Git分支和标签供您推送到远程。
    只需添加远程源,然后将想要的任何分支和标签推送到远程存储库即可。

我们已经使用svn2git工具将SVN信息库迁移到Git。
svn2git可以使用多种选项,例如–如果您不想迁移标签,则使用-notags。
请浏览svn2git用法部分以了解各种选项。
还要注意,不是标准svn结构一部分的README.txt文件不会被迁移。