svn迁移到git那些事

最近项目要求需要把项目从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上,此处没有去深究。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容