svn 迁移至git操作手册

项目交付、版本管理工具变更等情况下,迁移svn旧历史记录有很大必要,方便后续追踪文件的提交历史,文件修改记录比对等。git自带了从svn迁移至git的工具命令,可很好的对svn上的提交历史做迁移和映射,操作简单方便。但是初次接触不熟练,这里做一个总结和记录,内容尽量简单化。争取提供给刚刚接触git和准备迁移的用户一个简单易懂的方案。

迁移流程图:

这里分为两步来说明,第一步是比较简单迁移要件准备,已经准备好的用户可直接略过,直接进入第二步进行迁移操作。

|第一步:准备工作:

①  svn项目(SvnProject)地址及访问此svn项目权限账号:

地址:https://mytest.cn/svn/project/Example/ SvnProject /

账号:test/test@123

②  git新建一个仓库(如:GitProject)存放迁移项目

远程仓库地址: https://192.165.22.33/migrate/GitProject

账号/密码: my_test/mytest@123

③  待迁移svn项目有过提交记录的用户清单:

如果具备①的svn账号又没有svn管理员权限,可以通过导出所有提交历史并用代码提取一下用户清单(开发人员都懂,不赘述)。获取到的用户清单为user1,user2,user3。创建文件users.txt,按如下格式存入svn账号与git账号的映射关系

“=”前为svn账号,“=”号后为git账号,尖括号为git用户的邮箱,尖括号及邮箱可无。

注:如果有些用户已经离职了,其账号在git中没有,这里依然可以映射至不存在的git用户。

如果SVN用户未全部列举,执行迁移时会报如下错误:

报这个错误时可简单粗暴删除文件夹重新导出即可。

④  :电脑上安装git客户端,客户端下载地址:

https://www.git-scm.com/download/

下载后安装客户端,安装及配置参考:

https://blog.csdn.net/u013295518/article/details/78746007

|第二步:数据迁移
一:导出svn记录到本地

在你存放users.txt的同级目录新建一个文件,命名为你的项目名:GitProject

右键文件空白处,单击Git Bash Here

在bash界面,输入git拷贝命令:

git svn clone https://mytest.cn/svn/project/Example/MyProject/ --no-metadata --authors-file=users.txt GitProject

参数说明:

  • git svn clone 是Git的迁移命令
  • https://mytest.cn/svn/project/Example/MyProject/ 是svn服务器地址,注意需要到迁移项目的根目录一级
  • --no-metadata 参数去除了svn上很多杂乱的参数信息,保留了清晰简洁的提交记录信息。
  • -file=users.txt 为你的用户映射文件夹;
  • GitProject是刚刚新建的空白项目名文件夹
  • 第一次操作,会多次要求账号密码:请注意每次提示信息,第一次密码输入是操作系统的用户密码,第二次为svn账号和密码,第三次为git的账号密码。注意按提示输入。

    二:关联git远程仓库

    cd GitProject

    进入迁移项目路径下:

    git remote add origin git@192.165.22.33:migrate/GitProject.git

    后即已关联远程git仓库,执行可查看关联情况

    git remote –v

    未关联时:

    关联成功后:

    如果关联错了,可以使用 git remote rm origin删除错位关联后重新关联即可

     git remote rm origin

    三:提交记录至git

    svn项目中的所有提交记录和历史版本都已经导出本地并关联了远程仓库,现在只需要将这些记录推送至远程仓库即可。

    git push -u origin master

    命令输入后需要输入git账号\密码

    执行成功后,就完成了整个迁移过程。登录git网站,可以看到空白仓库中多了很多提交记录和文件。

    引用资料:

    github推送项目常见错误fatal: remote origin already exists

    https://blog.csdn.net/dreamskyforjava/article/details/24322533

    Git 与其他系统 - Git 与 Subversion

    https://git-scm.com/book/zh/v1/Git-%E4%B8%8E%E5%85%B6%E4%BB%96%E7%B3%BB%E7%BB%9F-Git-%E4%B8%8E-Subversion