各位ABAP公民们、特别是使用abapGit的各位,你们好。

我的团队和我将向大家分享我公司内引入abapGit后产生的某些开发问题。我所在的公司是一家创作SAP第三方软件的公司,目前主要使用ABAP和UI5。

本文专门针对ABAP方面。

首先,我们爱abapGit,相信你们中的很多也是一样...

GitHub repository

我们的git仓库使用GitLab托管在本地,有着各种用户友好的特性。

我们至少每天push一次我们的commit,生成版本(可以说是一个额外的备份层)。

通过使用GitLabs的代码审查功能,也使代码审查变得容易了许多。

我们最近评估了使用分支的可能性,得出的结论是:我们不能在现有的基础设施之上使用它。

本文的剩余部分将探究如何使用abapGit实现分支。

本文链接:http://www.cnblogs.com/hhelibeb/p/7754487.html

英文原文:abapGit Branching Strategy Discussion

场景1:无分支

这就是我们现在的工作方式。所有开发者在相同的SAP系统和代码基础(code base)上工作,所有人都push代码到主“分支”上。

优势

  • 更好的代码版本控制
  • 易于进行代码审查

劣势

  • 分支是不可能的,开发者同时在同样的代码基础上修改对象

    • 切换分支时,会改变每个开发者的代码基础,虽然他们也许会以为自己还在他们的分支上
  • 代码会因为其他人的问题commit出错
    • 甲修改了对象A,乙后来也修改了它
      甲在不知道乙修改过A的情况下进行了commit
    • 是的,进行最后一个修改的人可以在abapGit工作台上面看到这个,但是,你仍然有可能没看到它。

场景2:使用分支

无法马上使用分支的根本原因,在于,所有开发者使用同样的代码基础。开发者没有隔离他们同事的代码修改行为。

所以,实现真正分支的第一步就是,分割每个开发者的开发环境。这意味着,每个开发者要有他自己的SAP系统来进行开发。

这带给我们第一个整体的不利条件:

  • 开发者数量的增加带来的高昂的维护费用。

Local VMs

我们的第一个想法是,为什么不在开发者的机器上虚拟化运行SAP系统呢?

开发者在进行一项任务时,可以push到他们的分支当中,直到它们创建一个merge request。

主开发系统(DEV)只从主分支拉取,主分支只包含被批准的merge request。

优势

  • 连接到你的SAP系统时,不需要网络接口
  • 你可以在不连接公司网络的情况下开发
    • 只需要在push代码到git仓库的时候才需要连接公司网络
  • 在SSD上面运行SAP系统真的快极了

劣势

  • 高维护开销

    • 管理员对机器的控制比较难
  • 开发者需要知道怎样开启/关闭他们的虚拟机/SAP系统
    • 甚至可能需要他们自己定时备份虚拟机    

某些总体问题也打击了我们:

升级开发者的SAP系统

  • 如何给系统打补丁(支持包,notes,系统级补丁)?
  • 当需要获取定制数据、主数据和业务数据来开发新特性、重现bug并且修复时,要怎样获取它们?

升级主开发SAP系统

  • 如何处理abapGit不能序列化的开发对象?
  • 当需要获取定制数据、主数据和业务数据来开发新特性、重现bug并且修复时,主开发系统要怎样获取它们?
  • 从主分支拉取代码后,要如何处理开发对象以把它们分配到合适的传输请求之上?
    • 也许你有个复杂的传输规则以帮助代码复用。我们就是如此。

你还需要一个策略来应对以下问题:

  • 为无法序列化的对象单独维护和配置以及单独地导入定制和工作台传输

    • 听起来像一团糟
  • 开发系统的复制(只复制SAP)
    • 只是为了给你定制数据
  • 克隆主开发系统运行的虚拟机(OS+SAP)
    • 并且重命名SID和全称域名(Full Qualified Domain Name),否则你会遇到网络问题
  • …… 

并且,更新的频率是?

  • 按需
  • 在创建一个新分支前
  • 在一个新的发布循环开始的时候
  • ……

Hosted VMs

升级看起来是个大问题,也许不用一个本地虚拟机、而是托管虚拟机会好点。

这样的话,无论采取何种策略来更新,都可以更轻松地执行。

优势:

  • 管理员可以在任何时间访问机器

劣势:

  • 运行开发虚拟机带来的托管成本

结论

所以,进行这一切的优点是什么?

我们的看法是:

  • 真正的分支成为可能,编码时不干涉其它开发者
  • 由于merge request和多个commit的结合,更加有利于代码审查
  • 对多个发行版本的良好支持,容易切换到一个发行分支上去
  • ……

值得为此做出很多的努力吗?

我们的团队并不知道答案。系统同步带来的成本,看起来是巨大的。

在这点上我们感到不舒服,因此转向社区,希望听到你们在这个话题上的的意见和经验。

非常感谢,

André

 
 

abapGit分支策略的更多相关文章

  1. git 入门教程之分支策略

    默认情况下合并分支常常直接使用 git merge 命令,是最方便快速的合并方法.其实这种情况下 git 采用的是 fast forward 模式,特点是删除分支后,会丢失分支信息,好像从来没存在该分 ...

  2. Git Flow分支策略

    就像代码需要代码规范一样,代码管理同样需要一个清晰的流程和规范 Vincent Driessen 同学为了解决这个问题提出了 A Successful Git Branching Model 下面是G ...

  3. 【干货分享】大话团队的GIT分支策略进化史

    封面 作为一名85后的技术男,一转眼10年过去了(一不小心暴露了年龄,虽然我叫18岁fantasy),亲手写代码已经是5年前了,目前主要负责公司的软件产品的规划和设计(所以最近写的东西也主要与设计和产 ...

  4. Git复习(三)之分支管理、分支策略

    创建合并删除分支 我们知道每次提交git都会将他们串成一条线,这条时间线就是一个分支.在git里这条时间线叫做主分支,即master分支 HEAD指向master,master指向最新的提交,所以,H ...

  5. Gitlab分支策略建议指南

    本文分支策略为总结各中小型企业常见做法(仅代表个人观点),在下才疏学浅,文章如有缺漏或不当之处,望各位帮忙指正.写此文也十分希望能起抛砖引玉之效. 据我所知,目前大部分无论是按瀑布/敏捷开发模型,就算 ...

  6. git 分支策略

    转 http://www.ruanyifeng.com/blog/2012/07/git.html  作者: 阮一峰 如果你严肃对待编程,就必定会使用"版本管理系统"(Versio ...

  7. 2020年,为什么我们应该使用abapGit代替SAPLink

    SAPLink是一个帮助人们分享开发内容的工具.通过它,人们可以将ABAP开发对象从一个系统打包下载.再上传到另一个系统中.对于各种类型的开发者,它都可以起到作用: 有的开发者喜欢在不同的项目中复制相 ...

  8. git 教程(15)--分支管理策略

    通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息. 如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的comm ...

  9. Git 分支管理策略

    分支管理策略 下面我们来说一下一般企业中开发一个项目的分支策略: 主分支 master 开发分支 develop 功能分支 feature 预发布分支  release bug 分支 fixbug 其 ...

随机推荐

  1. Windbg调试(关于句柄表的获取,32位)

    今天利用Windbg(x86)进行了获得句柄表的调试,从中获益良多,对调试步骤和按键又一次进行了熟悉,对于句柄表页的概念更是得到了进一步的清晰认识.windbg调试和句柄表不熟悉的朋友可以借鉴我的调试 ...

  2. Linux环境下MySQL数据库用SQL语句插入中文显示 “问号或者乱码 ” 问题解决!

    问题: 在普通用户权限下执行 mysql -u root -p进入mysql数据库,中间步骤省略,插入数据:insert into 库名(属性)values('汉字'); 会出现如下提示:  Quer ...

  3. mysql 安装-zip版

    1.千万不要自己新建data,使用命令:mysqld --initialize会自动生成一大堆文件 2.没有ini文件就自己新建:

  4. 字符、字符集、编码,以及它们python中会遇到的一些问题(下)

    在看了很多的博客文章之后,总结整理得到了以下文章,非常感谢这些无私奉献的博主! 文章末尾有本文引用的文章的链接,如果有漏掉的文章引用,可以发邮件联系我,随后再次附上链接! 侵删!!! 这一部分是下篇, ...

  5. Java学习笔记一---JVM、JRE、JDK

    jdk包含jre,jre包含jvm. 用java语言进行开发时,必须先装jdk: 只运行java程序,不进行开发时,可以只装jre. JVM 即Java Virtual machine,Java虚拟机 ...

  6. 软件工程个人第二小项目——wc

    github源码和工程文件地址:https://github.com/HuChengLing/wc 基本要求:要实现wc的基本功能即文件中字符数.单词数.行数的统计. 主要功能:文件中字符数.单词数. ...

  7. 谈javascript变量声明

    之前的面试中遇到过一道面试题 var a =10;(function(){ console.log(a); var a =20;})() 短短5行代码log的结果是什么? 如果把var a = 20; ...

  8. Piggy Back_KEY

    Piggy Back (piggyback.pas/c/cpp) [问题描述] Bessie 和她的姐姐 Elsie 在不同的田块吃草,晚上她们都返回牛棚休息.作为聪明的奶牛,她们想设计一个方案使得步 ...

  9. asp.net core合并压缩资源文件引发的学习之旅

    0. 在asp.net core中使用BuildBundlerMinifier合并压缩资源文件 在asp.net mvc中可以使用Bundle来压缩合并css,js 不知道的见:http://www. ...

  10. 理解ios 11中webview的视口

    iOS 11在状态栏区域带来了一些新的,也许是不直观的行为,这对使用Apache Cordova或Ionic等工具的开发人员尤为重要.特别是,这种行为变化会影响任何基于Web的应用程序,这些应用程序在 ...