我有一些困难理解如何使用标签与分支在git。

我只是将当前版本的代码从cvs移到git,现在我将针对特定的特性处理该代码的一个子集。其他一些开发人员也将致力于此,但并不是我们团队中的所有开发人员都会关心此功能。我应该创建一个分支还是一个标签?在什么情况下我应该使用其中一种而不是另一种?


当前回答

Git寓言解释了典型的DVCS是如何创建的,以及它们的创造者为什么要这样做。另外,你可能想看看Git for Computer Scientist;它解释了Git中每种类型的对象的功能,包括分支和标记。

其他回答

没有什么比喻是完美的,但是您可以将您的存储库想象成一本记录项目进展的书。

分支机构

你可以把分支想象成一个粘性书签:

全新的存储库只有其中一个(称为master main),它自动移动到您所编写的最新页面(考虑提交)。但是,你可以自由地创建和使用更多的书签,以便标记书中其他感兴趣的点,这样你就可以快速返回到它们。

此外,你总是可以将一个特定的书签移动到书的其他页面(例如,使用git-reset);兴趣点通常随时间变化。

Tags

你可以把标签看作章节标题。

它可能包含标题(考虑带注释的标签),也可能不包含。标签与分支相似但又不同,因为它标记了书中历史兴趣的点。为了保持它的历史特性,一旦你共享了一个标签(即把它推到一个共享的遥控器上),你就不应该把它移动到书中的其他地方。

我们使用

开发环境中的分支用于特性开发或错误修复 功能分支上测试环境的轻量级标记 release/prd的注释标记(主要分支)

在每个带注释的标签之后,所有的特征分支都从主分支中重新建立基础。

正如其他人所说,分支是一条开发线,随着更新提交的到来,头部会向前移动。这是功能开发的理想选择。

轻量级标签固定于特定的提交,这使得创建内部版本并让qa团队在开发完成后测试功能成为理想的选择。

注释标记非常适合从发布到生产,因为我们可以在将测试的特性分支合并到主分支(稳定)时添加正式的消息和其他注释。

标记用于标记版本,更具体地说,它引用分支上的一个时间点。分支通常用于向项目中添加特性。

标签可以是有符号的,也可以是无符号的;分支从不签名。

有签名的标记永远不能移动,因为它们以加密方式(使用签名)绑定到特定的提交。Unsigned标签是不绑定的,可以移动它们(但是移动标签不是一个正常的用例)。

分支不仅可以移动到不同的提交,而且还可以这样做。您应该为本地开发项目使用分支。“在标记上”将工作提交到Git存储库是没有意义的。

github上的Neovim:

V0.3是一个分支

v0.3.1……v0.3.4……是标签

Nightly和stable是标记,而不是分支