场景
项目开发中,项目原本是用的SVN,已经用了一年了,现在公司要抛弃SVN用Git,要求把SVN的代码直接搬过去Git,并保留之前的历史提交记录。
操作步骤
- 找到已经被svn管理的项目的根目录 WinFarm,右键 Git Bash Here
svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2"@qq.com>"}' | sort -u > userinfo.txt
在 WinFarm 目录里面生成了一个文件 userinfo.txt
userinfo.txt样式如: liqiye = liqiye liqiye@qq.com
- 新建个文件夹 Git,将生成的userinfo.txt放入新建的文件夹,然后在新建的文件夹中右键选中gitbash弹出窗口后执行下面命令,拉取svn代码到本地新建文件夹中
git svn clone 你的SVN地址 --no-metadata --no-minimize-url --authors-file=userinfo.txt --no-minimize-url
你的SVN地址:
第一次会有一个弹窗:输入 p
后面还有一个弹窗:输入SVN的用户名和密码
SVN密码在这里可以查到,网上找得到这个工具提取加密的密码
静静等待把这个项目的代码从svn拉下来
拉完后,进入 Git 目录,看到我们项目的文件夹 WinFarm,再进去看到.git文件夹
- 右键 WinFarm目录选中gitbash在窗口中用git命令查看提交记录
git log
可以看到这是我们在svn提交的代码记录
- 关联需要迁移的git库上项目地址(建议创建新的创库,避免合并出错)
会有弹窗验证,输入git账号密码
git remote add origin 你的Git项目地址
- 查看关联地址是否正确
git remote -v
- 将远程仓库代码拉取到本地(注意当前分支)
git pull origin master
第一次会弹出窗口,填写你的 git 用户名密码
如果你的 git 仓库已经有文件的那他就会报错,上面的命令换成这个:
git pull origin master --allow-unrelated-histories
如果报错:
git config --global http.sslVerify false
- 合并到远程master分支
git push origin master