美文网首页
svn转git实践分享

svn转git实践分享

作者: shyingsheng | 来源:发表于2018-07-13 10:47 被阅读0次

    很多公司都会碰到SCM工具转变的问题,时下git是最热门的SCM工具。

    下面简单总结我在实施项目由svn转git的实际操作。

    这里我们托管git的服务器用的是gitlab。

    git提供一条非常有用的命令叫做 git svn, 它基本上就可以满足你完成svn转git的核心工作。git的最新版本都已经自带有git-svn功能可以直接用。

    1. 首先在gitlab上创建一个project,权限管理和项目设定这里不展开了。

    2. 得到SVN提交用户列表。因为SVN仅简单地列了每个提交的用户名,但是git的提交信息更丰富,最简单的git提交也必须有用户名和email地址。下面这条命令可以帮助你取到svn仓库所有的提交用户列表(user.txt)。

    svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > user.txt

    3.修改提交用户列表,修改编辑每一行,如下例子:

    shyingsheng = shyingsheng <shyingsheng>

    变成:

    shyingsheng = shyingsheng <shyingsheng@example.com>

    4. clone svn仓库

    git svn clone -T trunk <SVN REPO URL> --username=<svn account> --ignore-paths="^(?:pub|installer|intermediate|framework)" -r 90441:HEAD -A user.txt trunk

    我所用到的参数说明:

    -T trunk是指仅仅clone trunk一条分支

    --username=<svn account>是指用哪个账号执行git svn命令,这个账号必须有svn仓库的clone权限

    --ignore-paths="^(?:pub|installer|intermediate|framework)"是指在转换时,忽略掉svn的pub|installer|intermediate|framework这些目录

    -r 90441:HEAD是指从90441这个commit开始到HEAD,比90441老的commit全部丢弃

    -A user.txt 是指用户账号清单,必须是svn和git两个系统中都存在的用户集合

    5. 转换svn:ignore属性到.gitignore

    git svn show-ignore > .gitignore

    6. 上传到gitlab

    git remote add origin <gitlab REPO URL>

    git push origin master

    7. 如果在转换阶段svn上又有提交的时候可以同步到git上

    git svn fetch

    git merge remotes/trunk #如果有冲突解决冲突,并且git commit

    git push origin master

    8. 当然如果你仓库里一些代码脚本hardcode了svn相关东西,请做相应修改。还有你的Jenkins CICD 工程

    至此,完成一个svn仓库到git的转换。

    references:https://john.albin.net/git/convert-subversion-to-git

    相关文章

      网友评论

          本文标题:svn转git实践分享

          本文链接:https://www.haomeiwen.com/subject/cdirpftx.html