git 多个 brach 如何管理 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
faker1
V2EX    问与答

git 多个 brach 如何管理

  •  
  •   faker1 2020-12-09 20:40:18 +08:00 2579 次点击
    这是一个创建于 1846 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前遇到的问题有 6 个 branch 很久之前从 master 分出,其中每个 branch 共通的代码有 60%.其余的都是定制化的一些内容,现在想把这些 branch 收回做一个管理,切换分之 fix,代价太大, 有同学可以提点下思路?项目是 golang,以及合并之后如何做 relase 谢谢

    21 条回复    2020-12-10 10:35:49 +08:00
    yjxjn
        1
    yjxjn  
       2020-12-09 20:53:09 +08:00
    既然很久之前就从 master 分出,那就直接从 master 上 pull 呗,然后看看有没有冲突,解决完冲突 commit 之后,push 到远程分支,提 mergerequest 就完了。
    faker1
        2
    faker1  
    OP
       2020-12-09 20:57:30 +08:00 via Android
    @yjxjn 对于多个 branch 每个对于 func ABC 的实现是不一样的,那这个时候如何保留,
    faker1
        3
    faker1  
    OP
       2020-12-09 20:59:38 +08:00 via Android
    可能最中还是要一个 baseline,然后其余的独特性,需要特殊处理,如何处理,对于开发人员是友好的,比如编辑器能识别到准确的
    faker1
        4
    faker1  
    OP
       2020-12-09 21:01:58 +08:00 via Android
    顺便再问下,如何在多个 branch 中,找到大家共同的那个起始点,我搜了下只看到 merge base
    ferock
        5
    ferock  
    PRO
       2020-12-09 21:08:46 +08:00
    远古分支,合并当前的 master 毫无意义。
    何况这样的分支,当时就应该走 fork 路线。


    只有 60% 的吻合度,已经可以视为衍生版本了。参考,mysql 和 MariaDB
    faker1
        6
    faker1  
    OP
       2020-12-09 21:11:32 +08:00 via Android
    @ferock 60%是需要频繁的 fix/add new code,维护多 branch 代价太大
    yjxjn
        7
    yjxjn  
       2020-12-09 21:13:16 +08:00
    @ferock 看楼主这种开发模式,使用 git 简直用了个寂寞。。。
    yjxjn
        8
    yjxjn  
       2020-12-09 21:15:04 +08:00
    @faker1 留下想要的呀,既然功能是 ABC 三种实现方式,就留下一种不就行了。。。。merge 的时候,把不用的删掉就行。
    faker1
        9
    faker1  
    OP
       2020-12-09 21:17:39 +08:00 via Android
    @yjxjn 每个 branch 的实现都需要保留
    faker1
        10
    faker1  
    OP
       2020-12-09 21:18:01 +08:00 via Android
    @yjxjn 啥意思
    fafa2npu
        11
    fafa2npu  
       2020-12-09 21:19:22 +08:00 via Android
    对于 60%的共用代码单独起一个 repo 作为 base repo,在其他 repo 里引用 base repo 中 build 出来的 package 。
    faker1
        12
    faker1  
    OP
       2020-12-09 21:21:20 +08:00 via Android
    @fafa2npu 这个是有难度的,比如 baseline repo.A 的实现是不能暴露出来的,到时有的 branch 又用到了,,,,
    fafa2npu
        13
    fafa2npu  
       2020-12-09 21:21:38 +08:00 via Android
    @fafa2npu 但这样需要一些成本重构代码,将共用代码分离出来。
    faker1
        14
    faker1  
    OP
       2020-12-09 21:21:54 +08:00 via Android
    package 的拆分也是一个思路,
    beidounanxizi
        15
    beidounanxizi  
       2020-12-09 22:19:47 +08:00
    不要走各种分支 就一个 master 分支可以了 hotfix bug 修复 都往 master 合并 master 的上生产河预发 个人分支可以在 dev 环境发 清晰明了
    xupefei
        16
    xupefei  
       2020-12-09 23:02:42 +08:00 via iPhone
    这个问题我司也遇到过,解决方案是聘请一位高人解决冲突,然后跑集成测试。
    CEBBCAT
        17
    CEBBCAT  
       2020-12-09 23:23:04 +08:00 via Android
    @xupefei 还有这样的专职人员吗?长见识了
    faker1
        18
    faker1  
    OP
       2020-12-09 23:40:53 +08:00
    @xupefei 可以稍微介绍下咋做的?
    xupefei
        19
    xupefei  
       2020-12-10 00:33:08 +08:00 via iPhone
    @CEBBCAT 不是专职人员,而是公司里一个级别很高的开发。这个人要对系统里的任何地方都很熟悉。
    找到这样一个人,给他三周,搞定。

    没啥特殊的做法啊,就是一个组件一个组件肉眼 merge,每弄完一个组件就测一遍
    SergeGao
        20
    SergeGao  
       2020-12-10 09:29:36 +08:00
    master 作为 upstream repo,只负责所有分支的公共部分,abc 各起一个仓库,公共部分有更改在 upstream 仓库改,然后下游仓库去拉,非通用部分就在各自仓库改
    networm
        21
    networm  
       2020-12-10 10:35:49 +08:00 via iPhone
    这个问题一个较好的解决方案是所有定制功能都使用主分支开发,通过开关控制功能的开启。
    现有项目需要逐个分支手动合并到主分支,并且添加开关,并通过集成测试,与 @xupepei 说的是一样的。

    更进一步的信息可以参考
    读书笔记:持续交付 - 狂飙
    https://networm.me/2020/11/08/continuous-integration/
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     894 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 19:42 PVG 03:42 LAX 11:42 JFK 14:42
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86