本人目前做某银行互联网支付平台项目。今天分享我们项目从SVN迁移到GIT的过程,其中踩的坑和经验。

一、迁移流程

自入职加入这个项目开始就一直使用svn进行代码版本控制,开发,测试,生产共用一个仓库,仅一个分支。 一开始有需求就在base版本进行改动,修改完成直接提交,或者在测试环境替换class文件。 修改生产问题,也是相当的小心,担心出现问题,由于新旧代码可能不一样,总是被逼反编译后使用compare进行比较后才能确认有无问题。

当然svn也有版本管理的概念,我也曾尝试;trunk、tags、branches分文件夹管理。 如下图: 图片

其原理是copy一份(虽然服务端也是增量改动),但是客户端一个项目10M, 10个项目10个版本则101010,这是我不能忍的。而且使用繁琐,一个工程会有好多的workspaces。
一个偶然的机会,公司总部的某个项目在gitlab下,正好需要落地到项目地,于是我向公司申请,把我们项目组所有项目迁移到了gitlab 某个group中, 如图:
图片

同时每个项目我又参考了gitflow初始化为master分支,又切出了develop分支,testing分支。贴参考的图:

图片

对于各个分支 我的理解为:

其实我是不主张用testing分支的,我理想中的是特性分支开发完成后就在测试环境进行验证,但事与愿违,无奈行方无法提供更多台测试机,再者多个特性分支需要整合一起统一测试等等原因,无奈新建该分支。 如果过分依赖该分支很容易出现生产问题测试环境不复现的情况,比如出现冲突解决不一致的情况等。所以每个版本必须通过release进行验证后在进行上线操作。

通过切换到git解决了我们开发的痛点:

  1. 生产版本的源代码管理。
    由原始的本地备份改为分支管理,避免过分依赖于某个备份人,当他机器挂掉或者不在场再或者备份的与生产不一致的尴尬;
  2. 解决多个需求的并行开发,使代码没有那么多判断逻辑。
    以前properties中各种开关,当上线这个功能就打开等等,通过feature分支需要哪个功能合并就好了,代码简洁了许多;
  3. 使IDE的 一个workspace支持多个分支的开发。
    checkout 命令后,IDE 刷新即可。
  4. 通过部署工具或自写脚本实现自动化部署,以前测试环境中都是本地编译好class后直接放到测试环境中,多个服务器需要重复上传,费事费力。
    现在只需提交到对应的分支或者合并到testing分支,通过工具选择分支进行打版部署即可。

二、常用工具:

我们是通过命令行 + 图形工具结合使用:

对于git命令 相信各位大神比我更熟悉。 基础语法命令链接


Q&A

Q:svn和git有这么大区别?git的好处是分布式,可以先本地提交;
A:但是svn 对于分支管理确实不方便。多个版本并行开发,本地会存在多个副本。还是那句话;没有最好的工具,只有合适的工具。好处就是本地可以有个版本库;
Q:clearcase 我还以为CC只在主机平台用呢,还在用VSS做文档服务器?
A:经典 + 元老级
Q:怎么找到丢失的 commit?
A:丢掉的commit ,是还没有提交本地?,文件被还原了吗?
Q1:提交到本地 没有远端push。
A2:那就没有丢掉嘛 记录都还在。
Q:你们功能特性分支是怎么切的呢?
A:上线后合并到主分支,开发新功能切个分支出来,恩恩,明白了。你们是基于master切出特性分支。我是严格参照gitflow,基于的是dev分支。那样的话如果有ABC三个特性分支,而且全部需要进行测试,下一个版本仅仅上线AB功能。

补充


本文档来自支付产品技术交流群的聊天记录整理,由志愿者整理并发布到本网站。如需要及时收到来自支付产品技术交流群的最新消息,请扫码关注“凤凰牌老熊”的微信公众号。 本群面向支付行业的有经验(2年以上)的产品经理、软件工程师、架构师等,提供交流平台。如想加入本群,请在本文评论中留言(不公开),说明所在的公司、负责的工作、入群分享的主题和时间。