标签与Git中的分支有何不一样?我应该在哪里使用?

我在理解如何在git中使用标签分支时遇到一些困难。 html

我刚刚将当前版本的代码从cvs移动git ,如今我将为特定功能处理该代码的子集。 其余一些开发人员也会参与其中,但并不是全部开发人员都会关注此功能。 我应该建立分支仍是标记? 在什么状况下我应该使用一个与另外一个? git


#1楼

看起来最好的解释方式是标签做为只读分支。 您能够将分支用做标记,但可能会无心中使用新提交更新它。 只要它们存在,标签就保证指向相同的提交。 加密


#2楼

标签能够是签名的也能够是未签名的 ; 分支从未签署。 spa

签名标签永远不会移动,由于它们以加密方式绑定(带有签名)到特定提交。 未签名的标签没有绑定,能够移动它们(但移动标签不是正常的用例)。 .net

分行不只能够移动到不一样的提交,但预计这样作。 您应该为本地开发项目使用分支。 将工做提交到“标记”上的Git存储库是没有意义的。 线程


#3楼

标签表示某个时刻特定分支的版本。 分支表明一个单独的开发线程,能够与同一代码库上的其余开发工做同时运行。 对分支的更改最终可能会合并回另外一个分支以统一它们。 指针

一般你会标记一个特定的版本,以便你能够从新建立它,例如, 这是咱们发送给XYZ公司的版本分支更像是一种策略,能够在继续对其进行开发的同时提供特定版本代码的持续更新。 您将建立交付版本的分支,继续在主线上进行开发,但对表明交付版本的分支进行错误修复。 最后,您将这些错误修复程序合并回主线。 一般你会同时使用分支和标记。 您可使用各类标签,这些标签能够应用于主线及其分支,用于标记您可能要从新建立的每一个分支的特定版本(例如,传递给客户的那些版本) - 用于传递,错误诊断等。 rest

它实际上比这更复杂 - 或者像你想要的那样复杂 - 可是这些例子可让你了解这些差别。 code


#4楼

理论的角度来看: htm

  • 标签是给定修订的符号名称。 它们老是指向同一个对象(一般是指同一个版本); 他们不会改变。
  • 分支发展线的象征性名称。 在分支上建立新提交。 分支指针天然地前进,指向更新和更新的提交。

技术角度来看:

  • 标签驻留在refs/tags/ namespace中,而且能够指向标记对象 (带注释和可选的GPG签名标记)或直接提交对象 (本地名称使用较少的轻量级标记),或者在极少数状况下指向树对象blob对象 (例如GPG签名)。
  • 分支驻留在refs/heads/ namespace中,而且只能指向提交对象HEAD指针必须引用分支(符号引用)或直接引用提交(分离的HEAD或未命名的分支)。
  • 远程跟踪分支驻留在refs/remotes/<remote>/ namespace中,并遵循远程存储库<remote>普通分支。

另见gitglossary联机帮助页:

“分支”是一个积极的发展路线。 分支上的最新提交称为该分支的提示。 分支的尖端由分支头引用,分支头在分支上进行额外的开发时向前移动。 单个git存储库能够跟踪任意数量的分支,可是您的工做树只与其中一个分支相关联(“当前”或“已检出”分支),HEAD指向该分支。

标签

指向标记或提交对象的ref。 与头部相反,标记不会被提交更改。 标签(不是标签对象)存储在$GIT_DIR/refs/tags/ 。 [...]。 标记最经常使用于标记提交祖先链中的特定点。

标签对象

包含指向另外一个对象的ref的对象,该对象能够包含与提交对象相似的消息。 它还能够包含(PGP)签名,在这种状况下,它被称为“签名标记对象”。


#5楼

Git Parable解释了如何建立典型的DVCS以及他们的创做者为何会这样作。 另外,你可能想看看Git for Computer Scientist ; 它解释了Git中每种类型的对象的做用,包括分支和标记。

相关文章
相关标签/搜索