SVN转GIT(保留日志)
最近在公司接手了几个项目,当初以为接手就接手呗;等到链接发过来之后,发现是通过svn管理的,瞬间有点傻眼了, 好几年没碰svn了;期间以为也只是维护,不想中间遇到临时发版本需求,感觉svn版本管理用起来总是没这么顺心;刚好最近需求清了一波,空出时间来就将几个svn项目都迁移到git管理,顺带记录下。
准备
svn的仓库地址,账号密码
git的仓库地址,账号密码
准备user信息映射文件(目的是为了保留历史commit对应的用户信息)
可以在checkout到本地的仓库路径下运行下面命令:
1
2 # svn log --xml | grep author | sort -u | perl -pe 's/.*>(.*?)<.*/$1 = /' > /root/userinfo.txt
其中userinfo.txt 为输出的svn提交用户列表信息
将svn项目转变成git项目
执行以下命令:
1
2 git svn clone [svn仓库地址] --authors-file=/root/userinfo.txt --no-metadata [本地存放目录]
关联远程分支
切到本地存放项目目录:
1
2
3
4 > git remote add origin [git仓库地址]
> git remote -v
> git push -u origin master
>
至此,项目已经从svn切到git。
其它
- 通过as preferences -> version control 可以直接切换当前项目在idea下版本管理方式
- 切换git管理方式后,需关联下远程git仓库:
1
2
3
4
5 git init
git remote add origin [git地址]
git pull origin master
git branch --set-upstream-to=origin/master master
这过程可能遇到error: The following untracked working tree files would be overwritten by checkout错误,
解决方式在项目目录下执行以下命令:
1
2 > git clean -d -fx
>
git clean -d -fx表示:删除 一些 没有 git add 的 文件;
git clean 参数
-n 显示将要删除的文件和目录;
-x —–删除忽略文件已经对git来说不识别的文件
-d —–删除未被添加到git的路径中的文件
-f —–强制运行