faker1
V2EX  ›  问与答

git 多个 brach 如何管理

  •  
  •   faker1 · Dec 9, 2020 · 2876 views
    This topic created in 2005 days ago, the information mentioned may be changed or developed.

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

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


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

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

    更进一步的信息可以参考
    读书笔记:持续交付 - 狂飙
    https://networm.me/2020/11/08/continuous-integration/
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2490 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 53ms · UTC 01:06 · PVG 09:06 · LAX 18:06 · JFK 21:06
    ♥ Do have faith in what you're doing.