V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
vhysug01
V2EX  ›  git

关于个性化需求的 git 分支管理

  •  1
     
  •   vhysug01 · 2020-10-14 16:21:41 +08:00 · 3605 次点击
    这是一个创建于 1261 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如果是公司自有产品,git 主分支一直往前 push,主分支上打 tag,对应线上版本

    如果是做外包,除了主分支一直往前提交外,A 公司需要个性化定制 a 功能,B 公司个性化定制 b 功能,也因此开了 a,b 两个分支,到后面,分支越来越多,各个分支的基本代码版本也越来越乱,维护也不方便,有什么可以解决此坑的办法么?

    第 1 条附言  ·  2020-10-15 10:09:19 +08:00
    小结:git flow 的管理模式,模块化 /插件化开发方式
    18 条回复    2020-12-29 23:32:38 +08:00
    TimePPT
        1
    TimePPT  
       2020-10-14 16:36:42 +08:00
    呆过的某团队曾经尝试过,主版本正常开发,个性化定制需求模块化 or 插件化
    pomony
        2
    pomony  
       2020-10-14 16:56:58 +08:00
    @TimePPT +1 感觉根据模块化的功能来确定分支而不是具体的公司来定,模块化的分支开发好了,往对应公司的分支合并即可~
    vhysug01
        3
    vhysug01  
    OP
       2020-10-14 17:00:30 +08:00
    @TimePPT
    @pomony

    谢谢大佬,尽管不太明白插件化 /模块化 实现,但是大致有点想法了
    lazyrm
        4
    lazyrm  
       2020-10-14 17:00:36 +08:00
    gitflow 能行?
    baiyi
        5
    baiyi  
       2020-10-14 17:23:01 +08:00
    Github Fork

    Git 用 remote,比把模块全堆在分支上要清晰一点
    vhysug01
        6
    vhysug01  
    OP
       2020-10-14 18:02:04 +08:00
    @lazyrm
    gitflow 应该也是要配合模块化开发,不然合并会出现一堆问题😂
    wangyzj
        7
    wangyzj  
       2020-10-14 18:36:37 +08:00
    master 上分开到 a,b 后
    每周从 master 上 merge 回来
    然后回归吧
    340244120w
        8
    340244120w  
       2020-10-14 19:10:23 +08:00 via iPhone
    这就是最简单也是最好的办法了,你们要做的仅仅是规范分支名称
    66450146
        9
    66450146  
       2020-10-14 20:20:14 +08:00
    每个功能都加 feature flag,每个包一个配置文件设定哪些功能是启用的
    asdf2020
        10
    asdf2020  
       2020-10-14 20:53:39 +08:00
    gitflow 模式就可以吧,我们就是多个 feature 分支,然后每次发版是 release 合并到 master,然后 release 代码合并到 未发布的 featureXX 分支,这样保持一致,避免未来合并代码出错了
    konakona
        11
    konakona  
       2020-10-15 00:05:30 +08:00 via iPhone
    你这个应用场景我推荐 2 种 flow,分别是 gitlab flow 和 github flow 。不考虑 git flow,太繁琐不合适。
    kingzeus
        12
    kingzeus  
       2020-10-15 09:10:46 +08:00
    我现在的方案:
    1.分库,所有都是从主仓库 fork 出来
    2.功能分支,通用的功能推送到主仓库,单独的功能放在子仓库里
    3.主仓库定时发布版本,子仓库定期从主仓库同步

    简单说,使用 gitflow 的方式,管理仓库之间的逻辑
    HannibaI
        13
    HannibaI  
       2020-10-15 09:37:42 +08:00
    需要定制化的功能为啥不是放到代码里来管理而是用分支?
    vhysug01
        14
    vhysug01  
    OP
       2020-10-15 10:08:18 +08:00   ❤️ 1
    @HannibaI 会有小部分冲突,而且多家公司即使只是有小定制化,也会陷入多重 if else 大坑中
    dany813
        15
    dany813  
       2020-10-15 10:18:32 +08:00
    我们目前是把所有的定制化的分支,全部插件化,即插即用,主版本就一个主分支,然后打 tag
    xuanbg
        16
    xuanbg  
       2020-10-15 14:09:58 +08:00
    这个和代码结构有关系,假设定制化代码和通用代码井水不犯河水,那就很简单了。定制化代码的修改只在定制分支进行,通用代码的修改最终合并到 master,然后再把 master 合并到定制化分支就行。
    如果不能做到相互不干扰,那最好是各个分支各自修改,分支也永远不要相互合并。这样其实和多个项目没有区别。
    pilgrima
        17
    pilgrima  
       2020-12-29 21:38:28 +08:00 via Android
    @vhysug01 最近也碰到了这种问题,请问具体怎么实施的呢
    vhysug01
        18
    vhysug01  
    OP
       2020-12-29 23:32:38 +08:00 via iPhone
    @pilgrima 没有找到解决办法,接口不好分割,各个版本都有乱乱的代码。要不还是一个大的配置项,多几个 if 判断
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1388 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 17:36 · PVG 01:36 · LAX 10:36 · JFK 13:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.