我有一些困难理解如何使用标签与分支在git。
我只是将当前版本的代码从cvs移到git,现在我将针对特定的特性处理该代码的一个子集。其他一些开发人员也将致力于此,但并不是我们团队中的所有开发人员都会关心此功能。我应该创建一个分支还是一个标签?在什么情况下我应该使用其中一种而不是另一种?
我有一些困难理解如何使用标签与分支在git。
我只是将当前版本的代码从cvs移到git,现在我将针对特定的特性处理该代码的一个子集。其他一些开发人员也将致力于此,但并不是我们团队中的所有开发人员都会关心此功能。我应该创建一个分支还是一个标签?在什么情况下我应该使用其中一种而不是另一种?
当前回答
github上的Neovim:
V0.3是一个分支
v0.3.1……v0.3.4……是标签
Nightly和stable是标记,而不是分支
其他回答
没有什么比喻是完美的,但是您可以将您的存储库想象成一本记录项目进展的书。
分支机构
你可以把分支想象成一个粘性书签:
全新的存储库只有其中一个(称为master main),它自动移动到您所编写的最新页面(考虑提交)。但是,你可以自由地创建和使用更多的书签,以便标记书中其他感兴趣的点,这样你就可以快速返回到它们。
此外,你总是可以将一个特定的书签移动到书的其他页面(例如,使用git-reset);兴趣点通常随时间变化。
Tags
你可以把标签看作章节标题。
它可能包含标题(考虑带注释的标签),也可能不包含。标签与分支相似但又不同,因为它标记了书中历史兴趣的点。为了保持它的历史特性,一旦你共享了一个标签(即把它推到一个共享的遥控器上),你就不应该把它移动到书中的其他地方。
标记表示特定分支在某一时刻的版本。分支代表一个独立的开发线程,它可以与相同代码库上的其他开发工作同时运行。对一个分支的更改最终可能合并回另一个分支以统一它们。
Usually you'll tag a particular version so that you can recreate it, e.g., this is the version we shipped to XYZ Corp. A branch is more of a strategy to provide on-going updates on a particular version of the code while continuing to do development on it. You'll make a branch of the delivered version, continue development on the main line, but make bug fixes to the branch that represents the delivered version. Eventually, you'll merge these bug fixes back into the main line. Often you'll use both branching and tagging together. You'll have various tags that may apply both to the main line and its branches marking particular versions (those delivered to customers, for instance) along each branch that you may want to recreate -- for delivery, bug diagnosis, etc.
它实际上比这更复杂——或者像你想的那样复杂——但这些例子应该能让你了解其中的区别。
标签可以是有符号的,也可以是无符号的;分支从不签名。
有签名的标记永远不能移动,因为它们以加密方式(使用签名)绑定到特定的提交。Unsigned标签是不绑定的,可以移动它们(但是移动标签不是一个正常的用例)。
分支不仅可以移动到不同的提交,而且还可以这样做。您应该为本地开发项目使用分支。“在标记上”将工作提交到Git存储库是没有意义的。
我喜欢把分支看作你要去的地方,标签看作你去过的地方。
标记就像过去某个特定重要点的书签,比如版本发布。
而分支是项目前进的特定路径,因此分支标记会随着您一起前进。当你完成时,你合并/删除分支(即标记)。当然,在这一点上,您可以选择标记该提交。
简单:
标签总是指向项目的同一个版本,而头部则随着开发的进展而变化。
Git用户手册