git 有没有必要专门拉一个分支来放标签?

2022-07-10 10:14:08 +08:00
 James369

我看有的地方除了有一个 release 分支之外,还专门开了一个 tag 或 master 分支来放 Tag 。

那么,为什么不直接在 release 分支上打 tag 就好了?少一个分支,这样还更省事?

4458 次点击
所在节点    程序员
25 条回复
nothingistrue
2022-07-11 14:03:25 +08:00
@James369 #2 他这个,release 分支是用完即删除的临时分支,长期分支只有 master 和 develop ,所以自然不可能在 release 分支上打 tag 。
nothingistrue
2022-07-11 14:20:25 +08:00
@unt #5 不对。我猜你们这个 adev + bdev 混合体是丢弃历史手动合并到 dev 的(所以才需要由专门的人在专门的时间干这事)。不管 adev 还是 bdev 都是多余的,可以扔掉,用随时创建并且用完即删除的个人分支(本质上是特性开发分支或者 bug 修复分支)代替。

git 的分支多分支协作,是一个或少量几个长期分支,加无数个临时分支构成的。长期分支越多越难管理,不要搞出 adev 、bdev 这样,仅用于合并的长期分支。另外,要想 git 协作,PR/MR ,或者补丁,最少要用到一个,不能像 SVN 那样只有更新和提交。
heronlyj
2022-07-11 14:50:31 +08:00
已经打 tag 了,不需要单独一个分支
FrankHB
2022-07-11 15:49:22 +08:00
大概就是对 tag 的用法少根筋。
用 tag 标记 tag 主要是两个用途:传统的 release tag ,以及某个开发周期起始时的 checkpoint (鼓励一个范围内的固定起点,以避免任意位置建分支导致任何处理不同分支——包括合并——时潜在的工作量膨胀)。
master 分支是默认分支,一般放公共主线,本来就不是放 release 用的。一般用于 release 的 tag 都是在各个 release 计划中拉出来的具体版本的 release 分支的最后的公开 commit 打,用 master 分支上面打 tag 是极端偷懒行为,几乎只适合只有一个人开发的情形。
还有一种 tag 是专门用来做 checkpoint 的助记符。这种 tag 基本就是应该在 maintainer 负责的分支打,如果项目没多层 maintainer 那就是顶层主线也就是 master 分支。
一些成熟的项目会明确在两者中区分,例如 GCC 迁移到 git 后就有 releases/和 basepoints/。
原理:因为 maintainer 和某个 release 的负责人通常不总是同一位,区分 release 分支对区分责任和防止 release 阶段的提交冲突是极其有必要的。要是 maintainer 在过了 merge window 还要傻等 release branch 上的提交包括 release tag 同步却因为个别负责人的意外造成整个项目本不必要的阻塞和延期,那就真特么搞笑了。
当然,虽然原则上限制了 DVCS 的潜力,如果中心集权到 Linus Torvalds 这样总能确保 master 上面快速发版,其他开发者会老实允许你周期性足够短地 freeze master ,那两种 tag 都塞在 master 上也不是实际不可行(像 docs.kernel.org/maintainer/rebasing-and-merging.html 建议的 merge ff 用的 tag 其实是 checkpoint )。但做不到那还就是笑话。注意虽然对组织内保持权威一般不难,但是外部开发者未必有听你话的义务,全窝在 master 上发版节奏太拉胯惹毛了外部开发者,别人直接 fork 也不是不行。
但那个图里最大的问题还不是这个,而是临时分支居然叫 release ,成心给 release engineering 找不痛快。正常讲,这种临时分支一般都是匿名的,从来不指望不同阶段复用,非得命名也是叫 prerelease/rc 之类的。需要事后维护倒是最好约定命名,如 www.freebsd.org/releng

@GeruzoniAnsasu 虽然相互合并通常是 evil ,但是无视分支目的教条主义更加 evil 。
在 DVCS 中 master 分支存在的目的几乎就是全项目单一来源的全局主线(只是要实现配置管理分锅或者跨厂商管理的目的,可以 fork 整个 repo ,不需要窝同一个 origin ),因此负责人或者说 owner 大多数时都需要对其中的内容完全负责并有在整个项目中协调发布节奏的绝对权威。
如果禁止自主 merge master 造成滞后(特别是预期就会跨 release tag 的大改动),到时候差异过大再 merge 回来,会严重阻碍中心 PM 负责人的吞吐量乃至整个项目的分支同步效率。这在上规模的(日常 master 成天管合并 PR 就够忙了)项目中是不可接受的。
unt
2022-07-18 10:51:13 +08:00
@fpure #6 我这个 adevbdev 相当于是 featureA 和 featureB ,远程不建分支的话我们怎么远程备份和互相交流呢。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/865215

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX