Re: [请益] 请问这样的git使用方式是否是正确的?

楼主: dingdingcho (dingding)   2022-10-22 12:55:26
个人意见,仅供参考
不太确定常不常见,但看起来是合理的。
可以想到的好处和情况是
不同的service 可以分开Build,Build 之后的artifact 可以依照每个service 的开发进
度deploy 到不同的测试环境,利于不同进度的开发和整合。
举例来说,
小明主要负责Service A 的开发,小美主要负责Service B的开发,假定星期四有统一的w
eekly release 。
星期一
小明在Service A增加了新的feature,
- 小明把他code merge 进branch A
- branch A 的pull request merge trigger 了Build pipeline
- 当Build 完成之后,自动把小明新增的feature deploy 到Service A的测试环境
- 小明在service A的测试环境上测试他的新feature
星期二
小美改了Service B的一个bug
- 小美把code merge 进branch B
- branch B的pull request merge trigger 了Build pipeline
- 当Build 完成之后,自动把小美改的bug fix deploy 到Service B的测试环境
- 小美在service B的测试环境上测试bug 到底是不是真的有修好
星期三
靠杯,小明发现Service A那个新的feature有问题,service A这个feature来不及赶上星
期四的weekly deployment。
而小美在测试环境上测试过,Service B的bug 已经改好了。
小明跟小美说:我ok,你先请
于是,小美把branch B Merge 进 Master Branch
星期四
Weekly deployment 的时候,将master branch 到production 的环境。
这周的release 中,包含了小美Service B的bug fix ,但是没有包含小明在Service A中
需要新增到feature 。
以上的例子说明
小明的service A的开发进度,并不会影响weekly release 中小美service B bug fix 的
时程
反之,如果今天只有一个master branch ,
而大家都把code merge 进去master branch 再deploy 到开发环境测试,
就上述的例子而言,如果小明来不及在weekly release 前改好他新加的feature,
那么可能需要延后既定的release 时间,
或者小明需要加班赶进把新的feature 修好merge 进master branch ,
或者在master branch 上revert 小明的code change而更麻烦。
另外一种常见的作法是,
一般可能会有一个develop branch 和一个master branch ,
Develop branch 通常被用来部署到测试环境
Master branch 通常被用来部署到production 环境
这个作法也可以用来确保code 有在测试环境被测试过。
至于你提到的,有人直接 check out master branch ,再merge 回master branch ,
我觉得听起来很像新手会做的事XD
可以避免这件事的作法,
是设定master branch 不允许code 直接push ,而是只允许Pull Request Merge。
吧啦吧啦,说了一大堆,
最后结论,我认为没有所谓的一定最好的方法,
Branch 用法,关系到软件架构、开发流程、CICD的设置、部署的时程,等等,
今天一个软件只有两个人开发,那一个master branch 可能就足够了
今天可能开发团队有十几个人,
或是一个repo 包含各种不同的service,
那麽把 branch 区分出来的这种作法也是可以被理解的,
不同的用法,可以讨论的点太多了,
总之重要的,还是要你们开发团队协调好就好。
引述《pttdocc (Hi)》之铭言:
: 请问一下,本人是程式新手,最近加入了一个组织,里面的开发团队的git使用方法,

: 我觉得有点怪怪的,但是我也觉得这也可能是正确的git使用方式,只是我以前不知道

: 已,所以想请问一下,以下的git使用方式,是否很常见? 是否是合理的?
: 假如某个repo里有3个folder - serviceA, serviceB, serviceC,这3个folder在开发

: 段不会有dependency,这个开发团队的作法是,从master branch一开始的init commit
: 里,分出3个branch A, B, C,再从这3个branch分别建立出上面的3个folder,当要修

: 任何一个service时, 就从对应的branch create出新的branch,改好后再merge回
: serviceX的branch, 再merge回master branch。
: 这样的作法总是让我觉得怪怪的,至少如果有人不知情而直接从master branch分出
: NEW branch去修改serviceA,那就无法再直接从NEW branch 或master branch merge
: 回branch A,因为NEW branch 和master branch 都包含了folder serviceA, serviceB
,
: serviceC, 而branch A, B, C照开发团队的作法,是要维持各自只有对应的serviceX
: folder的。
: 所以想请问这是否是种常见的git使用方式? 是否合理? 谢谢。
作者: ChiuTW (Chiu)   2022-10-25 23:22:00
这样是很好呀,有什么不好的?
作者: lchcoding   2022-10-22 13:30:00
“靠杯”语助词,下得很棒!
作者: ben810514 (Benjamin)   2022-10-22 14:40:00
你描述的问题用 feature flag 或 cherry-pick 都能解决吧。
作者: wulouise (在线上!=在电脑前)   2022-10-22 15:31:00
说真的这个情况三个repo更合理,不过用branch不是不行
作者: Lhmstu (lhmstu)   2022-10-22 21:16:00
如果这样就要用3个repo也太复杂了吧。现在看来反而是他们公司没有锁master才有问题,使用上没什么问题我反而觉得应该是原原po没有说清楚,master里面“只有”这三个不相依的项目吗?是不是其实还有会被共用的东西之类的
作者: Qinsect (Q虫)   2022-10-23 10:28:00
依照原原po的说法是在根目录上有三个独立资料夹,应该是完全不相依的感觉。感觉有点像是当初懒得写公司烦得要死的it单就干脆一个repo管理三个独立专案了。
作者: yinxuanh (飘飘然)   2022-10-23 10:52:00
不是都有develop, staging, mastermaster 只merge hotfix 或stagingstaging 内容跟master 一样,只是用来测试的地方develop 会定期merge master 上的稳定内容,也是一般开发是checkout -b 出来的 branch
作者: jasonwung (路人JJ)   2022-10-23 13:23:00
故事不错我喜欢
作者: Belieeve (芥末拿铁)   2022-10-23 16:29:00
很清楚
作者: wilson6405 (KickAsson)   2022-10-23 18:49:00
用 submodule 呢?
作者: pttdocc (Hi)   2022-10-23 22:54:00
Hi, 我是原原po, 补充说明一下, 星期一、二的例子是说明分ABC branch的话build pipeline自动trigger时比较方便知到要build 哪个项目, 这点在例子里我同意 不过我们出build的系统是merge好后要手动trigger的 这时可以选要build 哪些项目, 而分develop和master branch,中间还会有staging(release)branch的作法, 这个我知道, 不过我们没有搞那么复杂, 就是master branch, 要作feature时分一个branch出去, 要merge回master brach前, 先把master bbranch的东西merge回来测试, 这样子如果遇到有解masterbranch merge回来的conflict时, 的确可能feature branchbuild好测过, 但merge回master时又有问题(理论上),但大致上运作起来还算OK, 另外就是 我同意其实可以分3个独立的repo, 这3个service是开发时比较没dependency, 但性质上有些相关, 所以当初才会放一起, 最后就是, 其实我大略的了解比较偏向是当初开repo的人自已发明这套作法 觉得这样分好像很好 还有我竟然用推文打了那么多行 谢谢以上
作者: jlhc (H)   2022-10-24 21:11:00
看到一半也是想说这不是在讲 cherry-pick吗... XD

Links booklink

Contact Us: admin [ a t ] ucptt.com