目的

将原有存在Subversion(SVN)中代码导入到git,并且最好保留历史记录

解决方案

我的开发环境为MacOS,所以以下操作出现的命令均在终端中执行

这里,我们只针对于主线进行导入,分支不予考虑

1.创建一个本地文件夹,用于存放项目,然后先不进入文件夹

1
2
//创建一个文件夹
$ mkdir folder

2.获取历史信息的关键在于历史提交相关信息,提交时间和提交备注都没问题,唯独作者信息需要和即将导入到的git做对应

1
2
3
//获得 SVN 使用的作者名字列表。这会将日志输出为 XML 格式,然后保留作者信息行、去除重复、去除 XML 标记。
$ svn log --xml | grep author | sort -u | \
perl -pe 's/.*>(.*?)<.*/$1 = /'

3.创建一个 users.txt 的文件包含像如下这种格式的映射

1
zhangweiguang = 张伟光<halo-chn@outlook.com>
1
2
3
4
//创建users.txt文件
$ touch users.txt
//用vim编辑文件
$ vim users.txt

4.接下来就可以从SVN拉取项目到刚创建好的文件夹中了,但是千万别忘了使用users.txt文件中用户建立映射,如果历史记录过多可能会话费较长时间,请耐心等待

1
2
3
//可以将此文件提供给 git svn 来帮助它更加精确地映射作者数据。 
//也可以通过传递 --no-metadata 给 clone 与 init 命令,告诉 git svn 不要包括 Subversion 通常会导入的元数据
$ git svn clone http://my-project.googlecode.com/svn/ --authors-file=users.txt --no-metadata folder

5.进入folder,执行 $ git log查看历史记录是否完整,去人没问题就可以提交到git远程仓库了

1
2
3
4
//建立远程仓库链接
$ git remote add origin git@my-git-server:myrepository.git
//上传所有
$ git push origin --all

总结

Next

Android View系列之TextureView