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