V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
dvsilch
V2EX  ›  问与答

关于 git 工作流的一个疑问

  •  
  •   dvsilch · 2021-09-26 14:33:10 +08:00 · 1291 次点击
    这是一个创建于 1140 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前有两个分支开发中,一个是 feature/i18n 国际化,另一个就叫 feature/A 吧

    最近将这两个分支合并到了 release/test 上进行测试,然后发现 feature/A 需要补充国际化的文案。在这种情况下应该在什么分支上进行修改呢?按照 leader 的说法特性分支应该就在对应的特性分支上修改,但是对于「需要修改的部分依赖多个分支」的情况,各位会如何处理?亦或者是我对 git 工作流存在误解?望诸位解答

    8 条回复    2021-09-27 13:31:00 +08:00
    kiritoxf
        1
    kiritoxf  
       2021-09-26 15:03:59 +08:00
    feature/i18n 还没往 master 啥的上面合吧,感觉 release/test 只是个预测试的分支?如果这样的话就在 feature/i18n 上直接改呗
    如果需要修改的部分还依赖 feature/A 的话,那肯定不能在 i18n 上改了,因为都没有那部分
    如果已经往 master 这种分支上合过的话,原则上合的同时会删掉原分支,这时候再建个 fix 分支改
    dvsilch
        2
    dvsilch  
    OP
       2021-09-26 15:11:09 +08:00
    @kiritoxf 是的,目前并没有合到 master

    目前需要修改的部分同时依赖 feature/i18n 和 feature/A (因为是 feature/A 的新文案,但 feature/i18n 负责语言切换以及使用插值表达式),这种情况下要如何进行修改才不会打乱 git 工作流,保证分支干净呢?
    xaoflysho
        3
    xaoflysho  
       2021-09-26 15:23:14 +08:00   ❤️ 1
    如果是标准的 Git 工作流,是有 develop 分支的吧,先将 feature/A 合并至 develop 分支,然后 feature/i18n 拉取 develop 分支做国际化,完成后合并至 develop 。要发布的 release 分支也是从最新的 develop 分支出来的
    dvsilch
        4
    dvsilch  
    OP
       2021-09-26 16:33:14 +08:00
    @xaoflysho 原来如此,我这边是少掉一个 dev 的分支,导致我无论怎么想都很奇怪。或许我们 leader 的想法是使用 release/test 作为一个 dev 分支去使用?总之非常感谢!
    liuzhaowei55
        5
    liuzhaowei55  
       2021-09-27 07:33:21 +08:00 via Android
    @xaoflysho 如果 develop 中同时有其他的开发代码 feature/i18n 上线就会携带上了。
    应该都从线上 release 切出各自开发,一起合到 release/test 分支去测试,如果出现迭代依赖的情况就确认一下对方的上线时间,确保对方比你早上线,可以考虑等对方上线了再 rebase release 然后做这部分需求,或者 merge 对方代码到自己的分支,做这部分开发,只要保证对方先上线就行了。
    感觉这和开发中的循环依赖差不多了,尽量避免
    xaoflysho
        6
    xaoflysho  
       2021-09-27 09:24:01 +08:00
    @liuzhaowei55

    在 Git 工作流中,develop 分支做为保留分支,始终是只合并已完成功能的,也就说,要合并到 develop 分支的 feature 分支,要保证功能完成且项目可正常运行。如果管理严格一些的话,develop 分支还会有权限,要合并至 develop 需要提 PR,并进行 Code Review 。

    “如果 develop 中同时有其他的开发代码 feature/i18n 上线就会携带上了。”
    这是必然的,develop 分支的作用就是如此,合并所有已完成功能分支,所有新的功能分支、预发布分支都是基于 develop 分支的。
    这里 feature/i18n 作为功能分支之一,自然应基于 develop 分支。这样在 feature/i18n 分支中,就可以做所有已完成功能的国际化开发。完成后也需要合并回 develop 分支,feature/i18n 分支删除。下次需要新的国际化开发,从 develop 分支拉取新的 feature/i18n 分支。

    “应该都从线上 release 切出各自开发,一起合到 release/test 分支去测试”
    不应从 release 分支检出,应从最新的 develop 分支检出。在 Git 工作流中,release 分支是临时分支,基于 develop 分支。在 release 分支完成测试后合并至 master 分支和 develop 分支,release 分支删除。此时,master 分支和 develop 分支代码一致。生产环境代码与 master 分支一致。后面的开发将基于此时的 develop 分支进行。
    在 Git 工作流中,一般仅保留 master 和 develop 两个分支,其他分支在完成开发并合并后,将被删除。master 分支上的代码始终与生产环境一致。

    “如果出现迭代依赖的情况就确认一下对方的上线时间,确保对方比你早上线”
    如果出现此种情况,需要对方先合并至 develop 分支,你才能依赖于对方的工作开发。此时也保证对方功能不会晚于你上线。

    “或者 merge 对方代码到自己的分支,做这部分开发”
    不建议 merge 至自己的分支开发,这样会导致功能分支混乱,增加 code review 工作。
    xaoflysho
        7
    xaoflysho  
       2021-09-27 09:33:13 +08:00
    liuzhaowei55
        8
    liuzhaowei55  
       2021-09-27 13:31:00 +08:00 via Android
    @xaoflysho 然而现实中不太可能存在一个随时可以上线的 develop 分支,基本是一个迭代相关的项目约定时间同时上线,gitflow 更适合单体项目,多部门协同开发中不太实用。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1473 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 17:22 · PVG 01:22 · LAX 09:22 · JFK 12:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.