Git 团队开发,可持续发布的最正确的姿势是? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
cevincheung
V2EX    git

Git 团队开发,可持续发布的最正确的姿势是?

  •  
  •   cevincheung Jul 15, 2017 4616 views
    This topic created in 3211 days ago, the information mentioned may be changed or developed.

    十多个人的规模,使用 Gogs 在某云上自建 Git Server 做团队开发。 现在的模是,项目开两个分支,一个 master、一个 develop。开发在 develop (其实更像是在用 svn ),功能都 ok 了就合并到 master,然后生产环境 webhook 直接 pull 并进行 build。

    现在面临一个问题,第一个大版本马上就要正式对外发布并公测了。 再以后一些正在开发中的功能、开发一半的功能可能也会在 develop 中,再按照老路子肯定是不行了。

    大佬们最简单易行和最正确的可持续发布的 Git 使用姿势是?

    19 replies    2017-07-16 12:28:34 +08:00
    devilyaos
        1
    devilyaos  
       Jul 15, 2017 via iPhone
    gitflow
    Kilerd
        2
    Kilerd  
       Jul 15, 2017 via iPhone
    楼上正解
    swulling
        3
    swulling  
       Jul 15, 2017   4
    develop 放开发中的代码,master merge develop 后打 tag 发布

    但是部署不要直接 pull master,而是去 pull 特定的 tag
    caniuse
        4
    caniuse  
       Jul 15, 2017
    一些功能可以在另一个分支开发, feature/x
    cxbig
        5
    cxbig  
       Jul 15, 2017
    搞懂 Git Flow 的理念,实际流程可以自己定。
    akrf
        6
    akrf  
       Jul 15, 2017 via Android
    master 分支用来上线,develop 分支用来开发,能随时上线的代码才能直接在上面开发,不能上线的代码需要新开分支。master 只从 develop 分支上 merge 代码,尽量避免其他操作。
    cevincheung
        7
    cevincheung  
    OP
       Jul 15, 2017
    @akrf #6 一个能需要 6 个月完成,一个功能需要 3 天完成。一起在 develop 上开发?然后合并的时候岂不是还有正在开发的需求。
    cevincheung
        8
    cevincheung  
    OP
       Jul 15, 2017
    @swulling #3 没特别清楚 tag 的具体作用。假设同一个文件,譬如就叫 IndexController 吧。
    tag 1.0 成员 A 在 IndexController 有一个 function a 在文件 110 行
    tag 2.0 成员 B 在 IndexController 有一个 function b 在文件 110 行
    同时发布,如何是好?
    cevincheung
        9
    cevincheung  
    OP
       Jul 15, 2017
    @caniuse #4 假如功能 A 依赖功能 B 怎么办?
    ldbC5uTBj11yaeh5
        10
    ldbC5uTBj11yaeh5  
       Jul 16, 2017 via Android
    要正规的,得上 gerrit
    SharkIng
        11
    SharkIng  
       Jul 16, 2017
    http://nvie.com/posts/a-successful-git-branching-model/
    一直觉得这个文章里面说的是最好的办法,
    其实就是 dev 存放开发的完成版,master 存放上线版
    然后添加任何功能都有自己的分支,然后 Hotfix 修复也有修复的分支
    如果你不想太麻烦,把 hotfix 的分支独立出来其实就够了
    SharkIng
        12
    SharkIng  
       Jul 16, 2017
    @SharkIng 其实就是一楼说的 git flow 的文字解释.. plugin 可以看这里 https://github.com/nvie/gitflow
    swulling
        13
    swulling  
       Jul 16, 2017 via iPhone
    @cevincheung tag 是 commit 粒度的
    hantsy
        14
    hantsy  
       Jul 16, 2017
    Github Flow 简单些。

    1. Fork upstream project
    2. Create branch for feature/issues/task.
    3. Create a pull request
    4. Peer Code review( and refactor code according to feedback, till everything is agreed by team members)
    5. Merge into upstream/master, apply CI/CD process and deploy to production.
    6. Delete your branch. Prepare for next task.

    GitFlow 相对比较复杂,虽然有扩展指令支持,但几乎需要专门人员维护其生命周期,合并,发布等。
    hantsy
        15
    hantsy  
       Jul 16, 2017
    当然我觉得最重要是 写测试, 写测试, 写测试。

    CI 服务器每次 PUSH 能够运行所有测试,最终通过与 CI / CD 服务器配合,实现部署自动化。

    在国内几乎所有公司都是想当然的认为写测试浪费时间,所以代码 Broken 而合并到 Master 的情况不见。当然我也遇到 一些人把 GIT 当成 SVN 来用,根本就没用过 Branch。
    akrf
        16
    akrf  
       Jul 16, 2017
    @cevincheung 无论是六个月还是三天的需求,只要不能随时上线(随时上线:只要 commit 到了 develop 分支上,就默认可以由别人来上线),就必须开新的分支来开发。否则,如果可以随时上线,则直接提交到 develop 分支即可。为什么这么操作?因为别人随时有可能会合并代码到 develop 分支上并上线。
    calpamomo
        17
    calpamomo  
       Jul 16, 2017
    Github Flow + 写测试代码
    wujunze
        18
    wujunze  
       Jul 16, 2017
    同问
    cevincheung
        19
    cevincheung  
    OP
       Jul 16, 2017
    @swulling #3 就是要有个发布服务器,手动拉下来再 rsync 同步过去,需要 build 的触发 build 事件各个服务器分批次 build ?
    About     Help     Advertise     Blog     API     FAQ     Solana     2422 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 78ms UTC 05:20 PVG 13:20 LAX 22:20 JFK 01:20
    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