我有一些困难理解如何使用标签与分支在git。
我只是将当前版本的代码从cvs移到git,现在我将针对特定的特性处理该代码的一个子集。其他一些开发人员也将致力于此,但并不是我们团队中的所有开发人员都会关心此功能。我应该创建一个分支还是一个标签?在什么情况下我应该使用其中一种而不是另一种?
我有一些困难理解如何使用标签与分支在git。
我只是将当前版本的代码从cvs移到git,现在我将针对特定的特性处理该代码的一个子集。其他一些开发人员也将致力于此,但并不是我们团队中的所有开发人员都会关心此功能。我应该创建一个分支还是一个标签?在什么情况下我应该使用其中一种而不是另一种?
当前回答
简单:
标签总是指向项目的同一个版本,而头部则随着开发的进展而变化。
Git用户手册
其他回答
从CVS中您需要了解的是,在设置分支时不再需要创建目录。 不再有“粘贴标签”(只能应用于一个文件),或“分支标签”。 分支和标记是Git中两个不同的对象,它们总是应用于all repo。
您将不再(使用SVN)必须显式地构造您的存储库:
branches
myFirstBranch
myProject
mySubDirs
mySecondBranch
...
tags
myFirstTag
myProject
mySubDirs
mySecondTag
...
这种结构源于CVS是一个修订系统而不是版本系统(参见源代码控制vs.修订控制?) 这意味着通过CVS的标记和SVN的目录副本模拟分支。
如果您习惯于签出标记并开始在其中工作,那么您的问题就有意义了。 你不应该这样做;) 标签应该表示一个不可变的内容,只用于访问它,并保证每次都获得相同的内容。
在Git中,修订的历史是一系列的提交,形成了一个图表。 分支是图的一条路径
x--x--x--x--x # one branch
\
--y----y # another branch
1.1
^
|
# a tag pointing to a commit
如果签出一个标记,您将需要创建一个分支来开始从它开始工作。 如果你签出一个分支,你将直接看到该分支的最新提交('HEAD')。
关于所有的技术细节,请参阅Jakub narylbski的答案,但坦率地说,在这一点上,你还不需要所有的细节;)
主要的一点是:一个标签是一个简单的指向提交的指针,你永远不能修改它的内容。你需要一个分支。
在你的例子中,每个开发人员都致力于一个特定的功能:
是否应该在各自的存储库中创建自己的分支 跟踪来自同事的存储库的分支(在同一特性上工作的那个) 拉/推是为了和同事分享你的工作。
您可以不直接跟踪同事的分支,而是只跟踪一个“官方”中央存储库的分支,每个人都将他/她的工作推送到这个存储库,以便集成和共享每个人的工作。
简单的答案是:
分支机构: 每次提交到存储库时,当前分支指针都会移动
but
标签:标签指向的提交没有改变,事实上标签是该提交的快照。
Git寓言解释了典型的DVCS是如何创建的,以及它们的创造者为什么要这样做。另外,你可能想看看Git for Computer Scientist;它解释了Git中每种类型的对象的功能,包括分支和标记。
简单:
标签总是指向项目的同一个版本,而头部则随着开发的进展而变化。
Git用户手册
标记用于标记版本,更具体地说,它引用分支上的一个时间点。分支通常用于向项目中添加特性。