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

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

  •  
  •   j0hnj · 1 天前 · 1265 次点击

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

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

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

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

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

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

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

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


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

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

    这个流程应该是不对的。
    sampeng
        10
    sampeng  
       1 天前
    其实是团队有多少人啊。。5 人以下的开发 team 都在一个分支里开发是死不了人的。。。
    STtree
        11
    STtree  
       1 天前 via Android
    我们团队用的是所谓 chunck based 开发方式,所有 pr 最后 merge 到一个分支上,在这个分支的某个 commit 上打 release tag ,这个 release tag 会部署到各个环境上,测出问题来了就移动 release tag 的位置,实在不行的话 revert pr 。
    STtree
        12
    STtree  
       1 天前 via Android
    chunck based => trunk based ,不好意思打错了
    Leon777
        13
    Leon777  
       1 天前 via iPhone
    leonshaw
        14
    leonshaw  
       1 天前
    没太大问题,测试分支是临时分支,每次从 master 拉,合入 feature ,测试完删掉留个 tag 就可以了。
    fengpan567
        15
    fengpan567  
       1 天前
    发布测试时一定要合并一次 master 分支,有冲突就解决冲突,这样 master 合并到测试分支就不会有问题了
    harlen
        16
    harlen  
       19 小时 37 分钟前
    主线分支发版了后,所以测试分支自动重新根据 主线分线分支建立, 阿里云的云效好像默认就这样子, 个人分支和主线分支分叉超过一个迭代的,rebase 一次 master 即可
    harlen
        17
    harlen  
       19 小时 36 分钟前
    @harlen 如果是 square 的话,rebase 改成 merge
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1323 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 23:43 · PVG 07:43 · LAX 16:43 · JFK 19:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.