@Roy270490837
2017-08-12T11:45:49.000000Z
字数 1744
阅读 1124
未分类
到了一家新公司发现他们的Android项目还存放在svn服务器上,而且是除了Android项目其他都已经迁移到git上了。另外还发现他们的Android项目居然还是使用eclipse项目,那我只能顺便将整套Android项目进行迁移并“升级”了。
完成目的:
首先我们的svn项目没有trunk,branch,tag,就只有一个根目录,下面包含2个项目和一些library。因为其中一个任务暂时没有开发任务,所以我就先拿这个项目进行迁移。
首先你要有一个git仓库,一般找公司的运维帮你弄一个
一开始的时候我只是将项目单独拿出来,用gradle编译好后直接推上去,后来才反应过来,这样的话以前的commit信息就全部都丢失了,这对以后的开发可能会埋下隐患,于是我又重新来过,不仅仅是推到git,而且还要保留原有的commit信息。
把svn的项目另外clone下来:
svn checkout http://~~~
使用命令获取svn用户信息,创建映射表文件将svn用户和git用户进行映射
svn log --quiet | grep "^r" | awk '{print $3}' |sort | uniq
这一步是为了让迁移过来的commit信息能够直接映射成git的账号,这样在git仓库查看的时候就可以显示正确的用户信息
这里有一个小插曲,这个git账号你可以直接找运维拿,不过运维正好哪天没空回我,于是我就自己去到我们的git项目里面去查看大家的git账号。但是git我发现并没有像svn那种可以方便查到uniq的用户信息,这里我的解决方法是,使用下面的指令导出所有提交用户信息,然后你就可以随便玩了
git log --pretty=format:"%an %ae" > log.txt
最终创建出来的映射表应该是长这样的:
接下来就是使用git svn指令重新clone项目
git svn clone https://~~~ --authors-file=author.txt newProject
其中--authors-file=author.txt就是刚刚所说的映射文件,newProject就是新下来的项目,正常情况的话可能需要一点时间,clone下来后你会发现项目里面多了个.git文件,使用 git log
查看commit信息会发现信息都同步过来了
如果遇到停止没办法clone的情况,很有可能是author.txt文件编写有误或者没有不全,补全之后再执行一次上面的指令
这样一个全新的Git reop就已经从svn迁移出来了
当然如果你的项目不是这种结构,还有很多branch 或者tag之类的那你就还需要进行branch和tag的处理,参考资料里的链接可以帮助到你
这个比较简单,使用gradle file > New > Import Project,找到刚刚checkout的项目,指定新的gradle项目的目录位置,剩下的就交给AndrodStudio了。
注意一点,刚刚有提到因为有用到library,所以library也需要在同一个目录下,否则AndroidStudio无法构建成功
构建成功后,你会发现刚刚的.git文件不见了,我的做法是直接将原来的checkout下来项目的.git直接复制过去。设置好新的.gitignore文件后就可以add file进去git了。
将本地的Git repo 关联到远程git仓库
git remote add origin git@git.~~
git push -u origin master -f
使用第二句的时候这个时候我的git仓库已经有一个之前直接推上来的不包含之前commit信息的项目了,但是此时我是直接把git仓库的项目所有东西给替换了,包括项目和之前的commit信息
至此我的第一个项目就从svn成功迁移至git服务器,顺便转成gradle项目,且commit信息都保留下来了