请教大家一个测试环境代码合并的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
j0hnj
V2EX    git

请教大家一个测试环境代码合并的问题

  •  
  •   j0hnj 2025 年 3 月 18 日 3198 次点击
    这是一个创建于 321 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我们服务分为生产环境和测试环境;

    我们的开发流程是,研发将自己的开发分支合并到测试分支(第一次合并),上线到 测试环境,准出之后,提交 PR 将 feat 合并到 master 分支(第二次合并),然后上线到生产环境。

    问题在于第一次合并是普通的 merge commit (因为开发中需要持续修改、持续合并),第二次合并是 squash merge (为了让主线更清晰)。这样时间长了之后,再从 master 拉开发分支,合并到测试分支的时候很容易冲突,很难解决。需要经常手动用 master 强制覆盖测试分支,强制覆盖就需要所有在测试中的 feature 再次合并到测试分支,比较麻烦。

    想了解下这个问题有没有好的解决办法?

    17 条回复    2025-03-19 12:07:50 +08:00
    chairuosen
        1
    chairuosen  
       2025 年 3 月 18 日   3
    两条并行的永久存在的分支(dev,master)就会出这个问题。
    就像写业务时,同一份数据放两边分开维护,最后一定会莫名其妙不一致。
    解决办法就是测试分支是临时的,但是同时测多个需求需要多套测试环境,或者一次版本迭代统一一个测试分支来测,测完就删
    yiqiao
        2
    yiqiao  
       2025 年 3 月 18 日
    只有 dev 和 master 只适用个人开发吧。
    用 git flow 工作流呢?
    https://nvie.com/posts/a-successful-git-branching-model/
    AntiFraud
        3
    AntiFraud  
       2025 年 3 月 18 日
    工作流不对,所有代码在个人开发分支开发,开发完成验收通过后,将当前版本代码合并到测试分支。当前版本代码在测试分支验收完成后,合并到 master 分支。所有人新开发分支,从测试分支拉取。
    securityCoding
        4
    securityCoding  
       2025 年 3 月 18 日
    采用 github 那种 fork 方式就好了,合并分支发起 rebase mr
    lepig
        5
    lepig  
       2025 年 3 月 18 日
    我们简单粗暴

    1. 所有开发直接在 develop ,然后功能搞好了本地合并到 test 然后 push 到远程 test(也就是测试服务器所拉取的分支)。

    2. 测试没问题,直接本地或者运维(我)来本地再次合并到 release ,然后在 push 到远程的 release(也就是生产拉的分支)

    3. 我直接登录生产服务器,直接 git pull , 齐活。


    有运维的直接让运维搭建一个 jenkins 或类似的工具来部署。万一有问题可以随时撤回版本
    wu00
        6
    wu00  
       2025 年 3 月 18 日
    github flow / gitlab flow
    小团队 rebase ,就是简单粗暴 master 分支为主,不管你是 dev/pre/prod 任何分支都基于 master rebase
    各种临时发、临时不发、hotfix 都可以用 cherry pick 去搞
    InDom
        7
    InDom  
       2025 年 3 月 18 日
    首先不推荐 #3 从 测试分支开新功能分支的方案.

    其次你遇到的问题应该是很难避免的, 到最后总会有测试分支与生产分支有较大的差异的情况.
    rarpainting
        8
    rarpainting  
       2025 年 3 月 18 日
    这个在团队之前也经常遇到,现在的话就是放弃 squash merge 了,现在一个版本改动的代码太多了,经不起这种合并出错的风险
    williamx
        9
    williamx  
       2025 年 3 月 18 日
    “再从 master 拉开发分支,合并到测试分支”

    这个流程应该是不对的。
    sampeng
        10
    sampeng  
       2025 年 3 月 18 日
    其实是团队有多少人啊。。5 人以下的开发 team 都在一个分支里开发是死不了人的。。。
    STtree
        11
    STtree  
       2025 年 3 月 18 日 via Android
    我们团队用的是所谓 chunck based 开发方式,所有 pr 最后 merge 到一个分支上,在这个分支的某个 commit 上打 release tag ,这个 release tag 会部署到各个环境上,测出问题来了就移动 release tag 的位置,实在不行的话 revert pr 。
    STtree
        12
    STtree  
       2025 年 3 月 18 日 via Android
    chunck based => trunk based ,不好意思打错了
    Leon777
        13
    Leon777  
       2025 年 3 月 18 日 via iPhone
    leonshaw
        14
    leonshaw  
       2025 年 3 月 18 日
    没太大问题,测试分支是临时分支,每次从 master 拉,合入 feature ,测试完删掉留个 tag 就可以了。
    fengpan567
        15
    fengpan567  
       2025 年 3 月 18 日
    发布测试时一定要合并一次 master 分支,有冲突就解决冲突,这样 master 合并到测试分支就不会有问题了
    harlen
        16
    harlen  
       2025 年 3 月 19 日
    主线分支发版了后,所以测试分支自动重新根据 主线分线分支建立, 阿里云的云效好像默认就这样子, 个人分支和主线分支分叉超过一个迭代的,rebase 一次 master 即可
    harlen
        17
    harlen  
       2025 年 3 月 19 日
    @harlen 如果是 square 的话,rebase 改成 merge
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2714 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 11:36 PVG 19:36 LAX 03:36 JFK 06:36
    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