svn迁移到git那些事

2017-08-08  本文已影响159人  黑炭长

最近项目要求需要把项目从svn迁移到git,并保留原来的一些提交修改记录。在此做个记录,说一下迁移步骤:
网上有很多的教程,基本步骤差不多大多数都可以搞定,但是在迁移过程中也会遇到一些坑。
可以有两种迁移办法:
1、不需要以前的提交纪录:这种最简单,只需在git或是gitLab上创建自己的仓库;然后使用git clone命令获取远程仓库到本地;将现在的工程拖放入仓库内;使用git add . & git commit -m "注释" & git push origin master 就可以将本地的工程提交到git远程仓库与组内人员共享。
2、完全迁移,包括以前的所有提交记录:
(1)罗列出当前仓库里的svn用户的信息,并重定向到user.txt中

 svn log --xml | grep author | sort -u | perl -pe 's/.*>(.*?)<.*/$1 = /' > users.txt

ps:这个步骤有可能会出错,得到的users.txt里的信息不完全,只有用户名,么有相对应的邮箱,这样在下边的步骤没法执行

我得到的格式:yourname=
正确格式:yourname=yourname<youremail>

只有格式正确后才可有效执行步骤(2)

(2)将仓库克隆到本地

   git svn clone svn地址  --authors-file=users.txt --no-metadata 

(3)从svn获取更新

    git svn fetch
    git checkout master
    git svn rebase

(4)处理分支及标签

    标签
    cp -Rf .git/refs/remotes/origin/tags/* .git/refs/tags/
    rm -Rf .git/refs/remotes/origin/tags

    分支
    cp -Rf .git/refs/remotes/* .git/refs/heads/
    rm -Rf .git/refs/remotes

(5)添加git远程仓库的地址

    git remote add origin git@my-git-server:yourProjectName.git

(6)推送到远程

    git push origin --all

至此就把svn的工程全部迁移到git服务器,但是打开git发现里边有两个分支,分别是master和git-svn,以前的提交记录早期的大都是在git-svn这个镜像上,并没有全部在master上,此处没有去深究。

上一篇 下一篇

猜你喜欢

热点阅读