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

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

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

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

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

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

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

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

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

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

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

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

    发布了 2.0 你还打算更新 1.x 就用 branch
    julyclyde
    julyclyde
    Nov 19, 2015
    29
    @cxq 哈哈,不过我昨天刚发现 kubernetes 是用 branch 的。
    git merge-base release-1.0 master 得到一个 commit 号,你看那个号的 log ,内容是“ 1.0.0-dev ”。而且基本上不从 release-1.0 往 master 自动化 merge 内容
    这是多个大版本并行的开发方式
    cxq
    cxq
    OP
    Nov 23, 2015
    30
    @julyclyde 恩 懂了 那还是 tag 是静态的, branch 是动态的概念。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4932 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 71ms · UTC 09:15 · PVG 17:15 · LAX 01:15 · JFK 04:15
    ♥ Do have faith in what you're doing.