git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
cxq
V2EX  ›  git

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

  •  
  •   cxq · Nov 18, 2015 · 8241 views
    This topic created in 3830 days ago, the information mentioned may be changed or developed.

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

    30 replies    2015-11-23 10:49:32 +08:00
    paradislover
        1
    paradislover  
       Nov 18, 2015
    建一个 release 分支,每次发布打上 tag
    yellowV2ex
        2
    yellowV2ex  
       Nov 18, 2015
    正常来说版本应该是用 tag 表示一个存档或者 release 之类,因为 branch 大多是比如你要做一个双 11 专版之类的才用,意义上来说 branch 是分支
    mrgeneral
        3
    mrgeneral  
       Nov 18, 2015
    每次发布版本我用的是 branch ,给我的感觉 tag 就是一个标签而已。😓
    restran
        4
    restran  
       Nov 18, 2015
    赞同 paradislover ,看到很多项目都是会在每个版本打上 tag
    proudzhu
        5
    proudzhu  
       Nov 18, 2015
    如果还要更新老版本(打安全补丁之类的),用 branch ,否则 tag 就行了
    paradislover
        6
    paradislover  
       Nov 18, 2015
    可以参考 git flow ,有自己的标准就行
    http://nvie.com/posts/a-successful-git-branching-model/
    msg7086
        7
    msg7086  
       Nov 18, 2015
    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  
       Nov 18, 2015
    gitflow +1 ,一般是 master 出 release 分支,然后最终发布时, release 分支合并回 develop 和 master ,然后打版本号的 tag
    pythoner
        9
    pythoner  
       Nov 18, 2015
    同意楼上
    yyfearth
        10
    yyfearth  
       Nov 18, 2015
    最终 release 的版本应该是不变的 所以是 tag
    而版本(至少是大版本)本身应该是一个 branch 因为你会为这个版本更新

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

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

    (玩笑
    18ac0877
        20
    18ac0877  
       Nov 18, 2015
    gitflow +1

    使用 gitflow 省事多了, git 太灵活了,反而搞的太乱
    iburu
        21
    iburu  
       Nov 18, 2015
    cxq
        22
    cxq  
    OP
       Nov 18, 2015
    @paradislover 恩 这个办法好 以前的项目 我决定就这么干

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

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

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

    发布了 2.0 你还打算更新 1.x 就用 branch
    julyclyde
        29
    julyclyde  
       Nov 19, 2015
    @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
       Nov 23, 2015
    @julyclyde 恩 懂了 那还是 tag 是静态的, branch 是动态的概念。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1260 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 96ms · UTC 23:37 · PVG 07:37 · LAX 16:37 · JFK 19:37
    ♥ Do have faith in what you're doing.