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 · 7144 次点击
    这是一个创建于 3074 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前理解是 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   ·   我们的愿景   ·   实用小工具   ·   1217 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 23:25 · PVG 07:25 · LAX 16:25 · JFK 19:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.