因公司架构变动,现要求将手中负责的项目从svn上迁移至git,其实迁移很简单,但是还需要保留 svn上的提交记录,就无行的给工作增添了一些难度,得还好网上教程比较多,这里是我实战的笔记,仅供参考。
svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > users.txt
注:此命令最好是在mac或LINUX系统上执行生成 users.txt
执行成功后会在 svn目录生成 users.txt
##2、 将用户信息修改成git能够识别的格式
zhansan = 张三
lisi = 李四
wangwu = 王五
注:如果这个时候还知道用户的邮箱可先保持与前面英文账号保持一致
git svn clone https://svn_project_url/ --no-metadata --authors-file=../users.txt ../bpms-bb
注:svn_project_url 即你的svn代码地址
D:\克隆到本地代码地址> git log
D:\克隆到本地代码地址>git remote add origin https://gitlab.wuhan.cn/project/xiangzi.git
查看关联地址是否正确
git remote -v
git pull origin master
如果提交报错 ,说明远程仓库有操作记录,可以使用强制合并提交
git pull origin master --allow-unrelated-histories
git push origin master
这样就基本完成了 迁移工作。
1、 svn迁移到git时因其他原因中断,再次使用clone 命令报错
Using existing [svn-remote "svn"]
svn-remote.svn.fetch already set to track :refs/remotes/git-svn
在项目目录上使用命令:git svn fetch 继续操作,可节省不少时间
2、由于项目较大,或者同时执行多个克隆命令 导致空间不足
libsvn: Out of memory - terminating application.
0 [main] perl 641 cygwin_exception::open_stackdumpfile: Dumping stack trace to perl.exe.stackdump
我的解决方法是将窗口关掉,打开新命令窗口 并执行:git svn fetch
3、 svn代码迁移到git ,电脑突然关机,或误操作将命令窗口关闭
.git/svn/refs/remotes/git-svn/index.lock': File exists.
Another git process seems to be running in this repository, e.g.
an editor opened by 'git commit'. Please make sure all processes
are terminated then try again. If it still fails, a git process
may have crashed in this repository earlier:
remove the file manually to continue.
write-tree: command returned error: 128
执行命令 git svn fetch
也会报错,需要找到 index.lock,删除掉再执行即可