我目前正在通过阅读Pro Git学习使用Git。现在,我正在学习分支和标签。我的问题是什么时候应该使用分支,什么时候应该使用标签?

例如,说我为项目的1.1版创建了一个分支。完成并发布此版本后,是否应该离开分支以标记发布版本?还是应该添加标签?如果添加标签,是否应该删除版本分支(假设它已合并到master或其他分支中)?

#1 楼

简而言之:最佳实践是分支,经常合并并始终保持同步。
关于将代码保持在与master分支不同的分支中,有非常明确的约定:进行重大更改或破坏性更改
您将要进行一些可能无法使用的更改
您想尝试一些不确定的方法
当您被告知时要进行分支,其他人可能需要在master中做些事情。

经验是分支出来后,您应该与master分支保持同步。因为最终您需要将其合并回主服务器。为了避免合并时发生巨大的复杂冲突,您应该经常进行合并,经常合并。
遵循的良好做法
Vincent Driessen成功的Git分支模型提出了很好的建议。如果您喜欢这种分支模型,请考虑将流扩展到git。其他人已经对流程发表了评论。
标记实践
您已经知道,Git为您提供诸如1.0-2-g1ab3183之类的提交标识符,但这些不是标识符!标记是使用git标记完成的,使用git标记创建的标记是git describe创建的提交标识符的基础。换句话说,在Git中,您不标记分支。您正在标记提交。正确地说,标记只是指向提交的带注释的指针。
让我们看一下演示它的实际示例,
                        /-- [v1.0]
                       v
---.---.---.---S---.---A     <-- master
                         \ 
                           \-.---B     <-- test

让我们提交“ S”是由标签“ v1.0”指向的提交。此提交既在分支“ master”上,也在分支“ test”上。如果在提交“ A”(“ master”分支的顶部)上运行“ git describe”,则会得到类似v1.0-2-g9c116e9的信息。如果在提交“ A”(也称为“测试”分支)的顶部运行“ git describe”,则会得到类似v1.0-2-g3f55e41的信息,默认情况下就是git-describe配置。请注意,此结果略有不同。 v1.0-2-g9c116e9表示我们正在提交,其SHA-1 ID为9c116e9,在标签v1.0之后有2次提交。没有标签v1.0-2
如果您希望标签仅出现在分支'master'上,则可以在''分支点之后创建新的提交(例如,仅更新GIT-VERSION-FILE中的默认/后备版本信息)。测试”分支。如果您标记提交在'test'分支上,例如“ v1.0.3”仅在“测试”中可见。
参考文献
我发现了很多很多有用的博客和帖子可供学习。但是,经过专业说明的是罕见的。因此,我想推荐一个帖子-@nvie成功的Git分支模型。我借用了他的插图:)


评论


1.0-2-g1ab3183是一个由git describe从git可用信息中构造的标识符,但是称它为git标识符有点太多。 Git通过SHA哈希识别;标签和分支是git有助于跟踪的人为构造。因此,当您认为某人将来有一天希望找到一个便于提交的书签时,请做一个标签。

–马布拉汉姆
2014年4月21日在23:52

git宇宙中多维性的绝妙例证。美丽。谢谢

– Tope
19年1月19日在6:08

值得注意的是,许多项目并不需要该图中所示的某些通道。有些项目只需要这里所谓的开发和功能。对于可以随意部署的Web应用程序通常是这样。

–usr
19/09/1在11:51



甚至git flow的作者也不再建议将其用于许多项目类型,例如Web开发。许多人认为它比绝大多数项目所需的要复杂得多,这使执行起来很麻烦并且容易出错。另一方面,一些高级从业人员主张团队使用“基于树干的开发”,而这种开发几乎根本不使用分支,并交付类似的成功项目。对于一些中间的东西,请考虑“ anti-gitflow”

–乔纳森·哈特利
20-10-16在3:38

#2 楼

如果您同时具有两个不同版本的存储库,则使用分支。标签是在存储库中标记时间点的一种方法。

您应该添加标签以标记发布的版本。如果随后需要对该版本进行错误修复,则可以在标记处创建一个分支。 br />

评论


哦...我假设您的意思是分支已合并到另一个分支,例如master。每次结帐时HEAD都会移动,对吗?

– Code-Guru
2012年9月21日18:55

HEAD通常指向分支(除非您处于分离的HEAD模式),所以HEAD随它指向的分支一起移动

–LoicAG
19-09-23在8:18