大家的 Git 仓库 发布新的版本比如 1.1, 或者 release 是使用 branch 还是用的 tag? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
cxq
V2EX    git

大家的 Git 仓库 发布新的版本比如 1.1, 或者 release 是使用 branch 还是用的 tag?

  •  
  •   cxq 2015-11-18 09:13:53 +08:00 7823 次点击
    这是一个创建于 3619 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前理解是 branch , 但是有个朋友说应该用 tag , 但是他之前用 svn 比较多。所以不知道信谁的

    30 条回复    2015-11-23 10:49:32 +08:00
    paradislover
        1
    paradislover  
       2015-11-18 09:17:12 +08:00
    建一个 release 分支,每次发布打上 tag
    yellowV2ex
        2
    yellowV2ex  
       2015-11-18 09:17:52 +08:00
    正常来说版本应该是用 tag 表示一个存档或者 release 之类,因为 branch 大多是比如你要做一个双 11 专版之类的才用,意义上来说 branch 是分支
    mrgeneral
        3
    mrgeneral  
       2015-11-18 09:19:47 +08:00
    每次发布版本我用的是 branch ,给我的感觉 tag 就是一个标签而已。
    restran
        4
    restran  
       2015-11-18 09:21:16 +08:00
    赞同 paradislover ,看到很多项目都是会在每个版本打上 tag
    proudzhu
        5
    proudzhu  
       2015-11-18 09:23:26 +08:00
    如果还要更新老版本(打安全补丁之类的),用 branch ,否则 tag 就行了
    paradislover
        6
    paradislover  
       2015-11-18 09:30:38 +08:00
    可以参考 git flow ,有自己的标准就行
    http://nvie.com/posts/a-successful-git-branching-model/
    msg7086
        7
    msg7086  
       2015-11-18 09:34:24 +08:00
    branch+tag 咯
    比如你一个产品,发布了 1.1 版本,那么这个分支就打上 1.1 ,然后 fix 都在这个分支上做,要发布 1.1.2 的时候就在 1.1 分支上打 1.1.2 的 tag 就行了。然后这个分支继续维护,以后发 1.1.5 就再打一个 tag 。
    然后 mainline 分支就给 new features ,发布的时候分叉出 1.2 分支然后继续维护。

    你可以参考一下 Rails 项目的分支,就是典型的 branch+tag 。
    timwu
        8
    timwu  
       2015-11-18 09:46:49 +08:00
    gitflow +1 ,一般是 master 出 release 分支,然后最终发布时, release 分支合并回 develop 和 master ,然后打版本号的 tag
    pythoner
        9
    pythoner  
       2015-11-18 09:58:07 +08:00
    同意楼上
    yyfearth
        10
    yyfearth  
       2015-11-18 10:03:41 +08:00
    最终 release 的版本应该是不变的 所以是 tag
    而版本(至少是大版本)本身应该是一个 branch 因为你会为这个版本更新

    branch 是一个可以更新代码的分支 (一条时间线)对应一个产品线(同一个产品而言就是大版本)
    而 tag 是不应该变化的某一个 commit (一个时间点)对应一次 Release
    yougg
        11
    yougg  
       2015-11-18 10:06:55 +08:00
    cwek
        12
    cwek  
       2015-11-18 10:15:31 +08:00
    发布版本用 tag
    开发分支用 branch
    fengyqf
        13
    fengyqf  
       2015-11-18 10:38:44 +08:00
    赞同 @cwek
    发布版本用 tag
    开发分支用 branch
    ------------------------------
    公共仓库(或说是集中仓库)里,最好 tag 吧。用 branch 就死在那里了,一大堆不再维护的 branch 丢在那里,不太美观。
    开发人员的本地版本库,随便吧,爱怎么搞都行,反正不推到公共仓库里
    DingHao
        14
    DingHao  
       2015-11-18 10:39:01 +08:00
    发布版本用 tag
    开发分支用 branch
    julyclyde
        15
    julyclyde  
       2015-11-18 10:56:07 +08:00
    显然是 tag
    tag 是一个静态概念,而 branch 是动态的,可以往 branch 里继续 commit 内容,而它还是叫这个 branchname ,不符合“发布”的概念
    janxin
        16
    janxin  
       2015-11-18 11:28:08 +08:00
    目前是 master 分支上直接打 Tag 做发布版本...Bug 通常会快速修复发布,所以会跟随 master 分支前进
    happypy1
        17
    happypy1  
       2015-11-18 11:39:28 +08:00
    tag 不就是为了标记版本用的吗?

    不过,不管是新建 branch 还是 tag ,在 git 里面,本质上其实只是指针的变化。。
    pathletboy
        18
    pathletboy  
       2015-11-18 11:49:27 +08:00
    当然是 tag , branch 随时可开。比如你打了 1.0 的 tag ,然后发现要在该版本上修复 BUG ,直接在该 tag 所在的 commit 上创建 branch 进行修复,修复完发布并合并到 master 。
    typcn
        19
    typcn  
       2015-11-18 12:19:56 +08:00
    如果你在开发 Chrome ,用 tag 合适些,滚动更新嘛。
    如果你在开发 Windows ,那 branch 合适,因为每次更新变化都很大,而且老版本还要继续更新维护,当然,打补丁修 bug 什么的还是 tag 。
    如果你在开发 Parallels Desktop ,那你用 branch 或者 tag 都可以,因为经常会出新的大版本,出了新版本老版本又不维护了,新版本再收一次费。

    (玩笑
    18ac0877
        20
    18ac0877  
       2015-11-18 12:58:22 +08:00
    gitflow +1

    使用 gitflow 省事多了, git 太灵活了,反而搞的太乱
    iburu
        21
    iburu  
       2015-11-18 14:47:01 +08:00
    cxq
        22
    cxq  
    OP
       2015-11-18 18:12:28 +08:00
    @paradislover 恩 这个办法好 以前的项目 我决定就这么干

    @julyclyde 懂了 谢谢 看来之前是搞错了 原来是有静态和动态的区别的。

    @18ac0877 @timwu 之前是看过一次 gitflow 的, 但是当时觉得每个人都装一个这个很麻烦,看来有必要用起来。 给刚接触的同事用 也很比较合适。
    timwu
        23
    timwu  
       2015-11-18 22:19:02 +08:00
    @cxq 如果有 GUI 环境的话,推荐用 sourcetree 这款软件来管理 git ,自带 git flow 功能
    feuvan
        24
    feuvan  
       2015-11-18 22:27:16 +08:00
    feature branch
    release tag
    jesse_luo
        25
    jesse_luo  
       2015-11-18 22:30:43 +08:00
    发布分支上打 tag ,但发布前是在预发布分支上的
    maguowei
        26
    maguowei  
       2015-11-18 22:32:36 +08:00
    @yyfearth 赞同
    cxq
        27
    cxq  
    OP
       2015-11-18 23:24:47 +08:00
    @timwu 一直用命令行 没研究过 source tree 好 正好研究一下。

    @maguowei 恩 @yyfearth 解释的很清晰了已经 差点看漏了。 谢谢 两位
    wizardforcel
        28
    wizardforcel  
       2015-11-19 12:29:19 +08:00 via Android
    比如发布了 1.8 你不打算更新 1.7 了 就用 tag

    发布了 2.0 你还打算更新 1.x 就用 branch
    julyclyde
        29
    julyclyde  
       2015-11-19 15:47:45 +08:00
    @cxq 哈哈,不过我昨天刚发现 kubernetes 是用 branch 的。
    git merge-base release-1.0 master 得到一个 commit 号,你看那个号的 log ,内容是“ 1.0.0-dev ”。而且基本上不从 release-1.0 往 master 自动化 merge 内容
    这是多个大版本并行的开发方式
    cxq
        30
    cxq  
    OP
       2015-11-23 10:49:32 +08:00
    @julyclyde 恩 懂了 那还是 tag 是静态的, branch 是动态的概念。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5458 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 07:11 PVG 15:11 LAX 00:11 JFK 03:11
    Do have faith in what you're doing.
    ubao 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