从SVN仓库迁移至Git仓库

鸿辰 Git 2.28 K

一、安装工具

Centos 系统中安装 git-svn工具

yum install git-svn -y

Windows 系统上操作则安装 git-base

二、生成svn转git的账号对应关系

文件中的格式为: svn用户名 = git用户名 <git邮箱>
例如:

root=root <admin@example.com>
zhangsan=zhangsan <zhangsan@qq.com>

对应关系主要用于将SVN迁移至Git仓库之后,日志中的提交者可以在Git仓库中正常显示,开发者能够看到代码的提交用户。
以上文件生成也可以使用命令生成

svn log 要迁移的SVN仓库地址 -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > users.txt

执行后只需要对生成的users.txt 文件格式做调整即可。

三、导出记录

git svn clone 要迁移的SVN仓库地址 --trunk=主分支名称 --tags=tags --branches=branches --authors-file=./users.txt --no-metadata 

上面的命令中:

  • --trunk 是指定svn仓库中的主分支,如果不指定,将会在导出的时候报类似错 update-ref HEAD refs/remotes/origin/trunk: command returned error: 128 的错误
  • --tags--branches指需要迁移的标签和分支,如果不需要迁移,则不指定

下面的操作需要进入导出的项目目录操作

四、清理工作

此步骤针对需要有迁移的标签分支

  • 把标签变成合适的Git 标签(有则执行)
    cp -rf .git/refs/remotes/tags/* .git/refs/tags/
    rm -rf .git/refs/remotes/tags
  • 把refs/remotes 下面剩下的索引变成本地分支
    cp -rf .git/refs/remotes/* .git/refs/heads/
    rm -rf .git/refs/remotes

五、添加Git远地址

git remote add origin 目的Git仓库地址

六、推送

git push origin --all

到此,迁移工作已完成

标签: git svn