大家了解GIT的第一句话一般都是"Git是一个开源的分布式版本控制系统",其实这就是它与SVN这种非分布式版本管理工具的本质区别。GIT中有远程仓库与本地仓库的概念,当你使用指令建立了本地仓库并从远程仓库将代码拷贝下来时,GIT就已经实现了一步区别于SVN的壮举!在此之后本地仓库就完全属于你一个人了,你可以像使用SVN一样在你本地仓库中开启新的分支,提交代码,回滚代码,注意:你的这些操作此时完全基于你的本地仓库,不会受到其他任何人的影响。在SVN中如果我们提交代码可能会与其他人的代码发生冲突,我们回滚代码又可能会把其他人提交的代码回滚进来,这些都会打乱我们的节奏,程序员们都知道这是使用SVN的一个很大痛点。而在GIT中,你基本不用担心这些,因为我们说了【你此时的所有操作完全基于你个人的本地仓库】,如果非要和SVN联系起来,你可以认为你的本地仓库就是你一个人的SVN,你想怎么玩就怎么玩,其他人无法干扰到你,很爽不是吗?
1 创建SVN用户到Git用户的映射文件
1.1在SVN代码文件中获取所有提交者对的姓名
在 Subversion,每个提交者在都在主机上有一个用户名,记录在提交信息中。如果想让已有的信息更好的映射到 Git 作者数据里,则需要 从 Subversion 用户名到 Git 作者的一个映射关系,因为Git是用邮箱来标识一个提交者的。建立一个叫做 userinfo.txt 的文件,每行一条svn作者 = 作者昵称 <邮箱地址>,用如下格式表示映射关系:
admin = admin <admin@xxx.com>
qiufeng = qiufeng <qiufeng@xxx.com>
SVN代码的所有提交者的作者名可以通过以下命令获得:
svn log --xml | grep "^<author" | sort -u | \awk -F '<author>' '{print $2}' | awk -F '</author>' '{print $1}' > userinfo.txt
2 通过git svn clone克隆一个Git版本库,SVN里面包含trunk,branches和tags
git svn clone svn://10.0.0.50/qf --no-metadata --authors-file=userinfo.txt --trunk=trunk --tags=tags --branches=branches
参数–no-metadata表示阻止git导出SVN包含的一些无用信息
参数–authors-file表示SVN账号映射到git账号文件,所有svn作者都要做映射
参数–trunk表示主开发项目
参数–branches表示分支项目
3 添加远程git服务器地址
3.1添加远程git remote 地址
在本地的仓库中,增加远程git remote 地址:
git remote add origin git@github.com:qiufeng615/git_data.git
3.2配置git 的 username 和 email
git config --global user.name "qiufeng" 配置git使用用户
git config --global user.email "qiufeng@mail.com" 配置git使用邮箱
git config --global color.ui true 配置语法高亮
git config --list 查看配置文件
3.3执行* git push origin –all* 命令
然后执行* git push origin –all* 命令,推送到远程Gitlab仓库
3.4执行 git push -u origin –tags 命令
如果你的项目有Tags的话,上面最后部分git push -u origin –all,运行之后并不能如它所说,分支和标签(branches and tags)都在gitlab服务器中。
实际上,只提交了branches到gitlab上面,并没有提交tags,当然,很简单,你可以使用git push –h查看下帮助,就会发现,你应该知道怎么做了,使用git push –tags就可以了。
执行下面命令即可,
git push -u origin --tags