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

理论上会不会出现, 2 个 pull request 都能通过测试,都不经修改直接 merge 后,反而通过不了测试?

  •  
  •   vghdjgh · 2016-09-06 19:19:48 +08:00 · 2944 次点击
    这是一个创建于 3026 天前的主题,其中的信息可能已经有所发展或是发生改变。
    15 条回复    2016-09-07 11:03:01 +08:00
    winkidney
        1
    winkidney  
       2016-09-06 19:28:13 +08:00   ❤️ 1
    会的,两个组合起来触发一个 bug 。
    单个基于当前分支的修改都能过,两个一起会触发 bug 。
    说明测试有没有 cover 到的 情况
    binux
        2
    binux  
       2016-09-06 19:28:16 +08:00   ❤️ 1
    a=1;
    a= !a;
    assert(a)

    1.patch
    - a=!a;

    2.patch
    - a=1;
    + a=0;
    msg7086
        3
    msg7086  
       2016-09-06 19:32:22 +08:00   ❤️ 1
    merge request 的测试必须要在当前版本上测。
    你第一次 merge 以后,测试结果已经无效了,必须重新跑两遍测试才行。
    binux
        4
    binux  
       2016-09-06 19:32:28 +08:00   ❤️ 1
    你甚至可以要求原来的测试也能通过

    a=True
    b=True
    assert a or b

    a.patch
    - a=True
    + a=False

    b.patch
    - b=True
    + b=False
    vghdjgh
        5
    vghdjgh  
    OP
       2016-09-06 20:54:54 +08:00
    现在好多开源项目,都是 pull request 隔好几周才 merge ,中间也有其它 pull request , merge 前不会重新运行 CI , merge 后看来还是有隐患的
    9hills
        6
    9hills  
       2016-09-06 20:59:43 +08:00 via iPad   ❤️ 1
    一般 merge 后还会触发一次构建。
    vghdjgh
        7
    vghdjgh  
    OP
       2016-09-06 21:24:30 +08:00
    @9hills 刚才试了一下,至少 travis CI 的界面上确实会触发一次 build 的。
    奇怪的是, Github 的 pull request 界面却没有地方会显示 merge 后那一个 build 的结果,显示的一直是 merge 前 build 的结果,页面上也没有跳过去的链接。
    我之前一直都没注意到 merge 后那一个 build ,估计别人也不容易注意到 merge 后的结果。
    9hills
        8
    9hills  
       2016-09-06 21:58:26 +08:00 via iPad
    @vghdjgh 是的,这个 merge 后的构建多数版本控制工具是不显示的。

    但是假如构建系统和发布系统打通,那么发布系统上应该显示这个主干是不可发布的。
    Senorsen
        9
    Senorsen  
       2016-09-06 22:00:49 +08:00 via Android   ❤️ 1
    GitHub 等平台可以开项目设置,要求 PR 必须含有保护分支所有 commit (新),还可以要求必须通过指定测试,才可以 merge 回保护分支,就可以解决 lz 的问题
    vghdjgh
        10
    vghdjgh  
    OP
       2016-09-06 23:07:37 +08:00
    @Senorsen 你说的是保证 merge 前通过测试,我在讨论的是 merge 后的那次测试是不是也能通过、能不能保证一定通过。

    我刚才发现, travis CI 会对 merge 后的那次测试结果提供 email 通知的,可以算是一种机制吧。
    Senorsen
        11
    Senorsen  
       2016-09-07 01:26:04 +08:00 via Android   ❤️ 1
    @vghdjgh 我是指,比如可以设置成这样,要求保护 master 分支,满足两个条件
    1. 只有通过指导测试(如 travis-ci )的 commit 才能合并到 master
    2. 想合并到 master 分支的 PR ,必须没有 behind master 的 commit ,即合并前就保证 patch-1 分支与合并到 master 后的效果一致

    通过同时应用两个规则,即保证 merge 后的代码也可以通过测试
    Senorsen
        12
    Senorsen  
       2016-09-07 01:26:48 +08:00 via Android
    上边一处 typo : 指导测试 -> 指定测试
    Senorsen
        13
    Senorsen  
       2016-09-07 01:30:33 +08:00 via Android   ❤️ 1
    Require branches to be up to date before merging
    vghdjgh
        14
    vghdjgh  
    OP
       2016-09-07 06:51:37 +08:00
    @Senorsen 确实有这样的设置,选中“ Require status checks to pass before merging ”后才会显示这个选项
    Senorsen
        15
    Senorsen  
       2016-09-07 11:03:01 +08:00 via Android
    @vghdjgh 是的,没错~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1142 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:11 · PVG 07:11 · LAX 15:11 · JFK 18:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.