Git仓库分支(Branch)和标签(Tag)

仓库的分支(Branch)规范,影响到每个团队的工作流的一致性;标签(Tag)便于开发团队、测
试团队和其他团队识别每个项目的版本,特别是在协同处理线上问题的时候,大家可以非常清楚
地知道线上运行版本和代码库的对应关系。因此我们在制作的时候,主要考虑几个因素:

一是要有一定的规则,方便持续集成CI(自动化构建、测试、分布等)
二是要有一定的自由度,以适应不同团队的内部协作灵活性
要清晰规整,不要参差不齐难以识别
基于我们当前团队的协作能力和提交代码的质量水平,并考虑方便持续集成CI(自动化构建、
测试、发布),我们约定下列常驻Branch:

develop 分支:顾名思义即持续开发的分支,我们希望每个开发组都在这个分支上保
持线性的持续小步迭代,正常的CodeReview WorkFlow和开发级的自动CI也在这里进行。
当开发完一个迭代(Sprint),开发小组有信心转测时,就将代码合并到 release 分支,
并要求打一个alpha级的Tag(如5.2.0-alpha)
release 分支:顾名思义即用于发布过程的分支,包括开发转测(实际上我们认为这里的测试集成测试)、测试和BugFix以及发布上线的过程,当发布成功时要打一个发布beta Tag(如
5.2.1-beta),并将代码合并到 master 分支
master 分支:即有质量保证的、可安全运行的分支,禁止直接代码提交,避免被污染,仅用
于代码合并和归集,在这个分支上的代码应该永远是可用的、稳定的。当需要拉一个特别的开发分时,
应该基于 master。
当需要fix线上的一个问题是,应该基于上线时的那个beta Tag做hotfix。当出现线上Bug需要hotfix时,我们需要在上次上线的Tag处拉一个临时的 hotfix 分支进行修正,或者在未被其他开发迭代污染的release分支上直接hotfix上线并合并到master和
develop,然后打一个新的Tag(如5.2.2-beta)

这个分支体系是我们期望长期持续迭代的分支规划,其它临时分支的删除、创建、命名,都由团队自己
决定,保持一定的灵活性。但每个团队都应该努力避免对上述常规情况造成破坏的情况发生,如果有特
殊情况(如有两个并行的开发分支同步进行),需要由各组Leader和QA团队协商提供临时方案,这会
影响到团队协同中的转测、CI基准分支等。

关于打 Tag 的规则 :

鼓励开发和QA团队共同对勤于打Tag,这便于真正的版本管理,避免有rollback需要或者需要查看和
对比历史版本的时候的混乱和低效局面。但同时也要求一定的规范性,让人一看便知。

Tag格式为: MajorVersion.MinorVersion.FixVersion-TypeLabel,其中TypeLabel
为 alpha、 beta、 devel。具体参见下图举例,其中devel是留给开发过程中
使用的。
分工上,开发团队负责打 tag-alpha,测试团队负责打 tag-beta。

但是,自己决定并不意味着胡乱命名,大家仍然要以 语义明(白)(准)确 的原则
来管理自己的分支和标签名,因为所有这些都是为了提高协作效率。

这是一个参考示意图:

<think>好的,我现在需要回答用户关于Git分支(branch)标签(tag)的区别及用法对比的问题。首先,我得回顾一下已有的知识,并参考用户提供的引用内容。 根据引用[1],分支标签都是用于版本控制管理的,但功能用途不同。引用[2]提到标签是一个指向特定提交的不可变指针,而分支是可移动的指针,指向一系列提交。引用[3]进一步解释,标签通常用于标记发布版本,而分支用于开发新功能或修复问题。引用[4]则提到了具体的命令操作,比如如何创建分支标签。 接下来,我需要整理这些信息,明确两者的核心区别。首先,标签是静态的,指向某个固定的提交,适合标记版本;分支是动态的,随着新提交移动,适合进行开发工作。然后,用途方面,标签用于记录重要的节点,如版本发布,而分支用于隔离不同的开发线。 用法对比部分,需要分别说明创建、查看、切换推送的操作命令。比如创建分支使用`git branch <name>`,而创建标签用`git tag <tagname>`。另外,标签有轻量标签附注标签的区别,附注标签包含更多信息,适合正式发布。 最后,用户可能还会关心应用场景,比如何时使用分支,何时使用标签。比如开发新功能或修复bug时用分支,发布版本时用标签。同时,可能的相关问题包括如何删除分支标签,如何共享标签到远程仓库,以及如何基于标签创建分支,这些都可以在相关问题中提出。 需要确保回答结构清晰,分点说明,并且引用正确的文献来源。同时,按照系统指令,数学公式用$...$,独立公式用$$...$$,但在这个问题中可能不太需要数学公式。不过要检查是否有需要的地方,比如版本号可能有类似v1.0.0这样的,但不需要LaTeX格式。然后生成相关问题,帮助用户进一步了解相关内容。</think>### Git分支(Branch)标签(Tag)的区别及用法对比 #### 一、核心区别 1. **定义与性质** - **分支Branch)**:指向一系列提交(commit)的**动态指针**,随着新提交的加入而移动。例如,开发新功能时,分支会随着代码改动向前延伸[^1][^2]。 - **标签Tag)**:指向某个特定提交的**静态指针**,不可移动,用于标记特定时刻的代码状态(如版本发布)[^3]。 2. **用途** - **分支**:隔离开发线,支持并行开发(如修复Bug、新增功能)[^3]。 - **标签**:记录关键节点(如正式版本`v1.0.0`),便于回溯发布管理[^2][^4]。 --- #### 二、用法对比 | **操作** | **分支Branch)** | **标签Tag)** | |----------------|--------------------------------------------|-----------------------------------------| | **创建** | `git branch <branch_name>` | `git tag <tag_name>`(轻量标签) | | | 或 `git checkout -b <branch_name>` | `git tag -a <tag_name> -m "注释"`(附注标签) | | **查看** | `git branch` 或 `git branch -a`(含远程分支) | `git tag` 或 `git show <tag_name>` | | **切换/检出** | `git checkout <branch_name>` | `git checkout <tag_name>`(只读,需创建分支修改)[^3] | | **推送远程** | `git push origin <branch_name>` | `git push origin <tag_name>` | --- #### 三、典型应用场景 1. **分支的适用场景** - 开发新功能时创建`feature/new-login`分支。 - 修复生产环境Bug时使用`hotfix/payment-bug`分支。 2. **标签的适用场景** - 发布版本时标记`v2.3.0`。 - 记录代码稳定状态,如`release-candidate`。 --- #### 四、协作关系示例 假设已发布`v1.0`,需在旧版本上添加功能: 1. 基于标签创建分支:`git checkout -b new-feature v1.0` 2. 在新分支开发完成后,打标签`v1.1`并推送: ```bash git tag -a v1.1 -m "新增功能X" git push origin v1.1 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值