我很抱歉这个糟糕的问题标题,但我会尝试更详细地解释一下自己:
对于我的软件项目,我正在使用Git(但我想这个特定的软件并不重要)。和许多项目一样,我正在计划发布各种版本。当有一个版本时,我可能会为一个提交一个标签 - 例如“1.0”。时间流逝,代码被黑客入侵,最终有一个版本,另一个标签 - 这次是“2.0”。
有一天,我注意到一个严重的错误,它存在于版本1.0和2.0中,需要修复。为了使事情变得困难(也可能更加现实),我不能只在当前的主/主干中修复它并假设每个人都会使用它,因为2.0版本中存在一些向后兼容性,而且人们很懒惰并且不喜欢不想升级。
那么,为了支持这种行为,有什么好方案可以做到:能够在旧版本中进行更改。由于git describe
命令(“[latest tag]-[commits since the tag]-[current commit hash]
”)的输出,Git似乎将标记与某个级别的版本等同起来。那么我可能无法完全避免使用标签。
我可以感觉到标签和分支的组合是一个好主意,但由于某种原因,我不能用这个细节包围我的头脑。
答案 0 :(得分:1)
您需要一个分支 - 您将在从发布标记开始的分支上执行维护修复和发布,同时在主(主)分支上继续进行开发。
答案 1 :(得分:1)
当你提到分支和标签时,你似乎已经拥有了大部分答案。标签用于标记某个偶数(如发布),分支用于并行开发。某个版本的维护通常在分支上完成,您可以使用当前大多数VCS来挑选变更集,以便将头/主干中的给定错误修复导入分支,反之亦然。
您可以处理head / trunk / master(无论您当前的“开发分支”是什么),并在各种维护分支中合并错误修正。只要您完成主要或次要版本,就会创建一个分支进行维护。
有很多方法可以达到你想要的效果。
答案 2 :(得分:1)
你肯定想要考虑使用分支。 Git非常支持这类开发的分支。
举例来说,您的线性版本历史记录可能如下所示:
---A---B---C[1.0]---D---E---F[2.0]---G---H
如果您发现1.0中的错误并想要修复它,则不能简单地在提交C和D之间插入新的提交。因此,您可以创建这样的分支:
---A---B---C[1.0]---D---E---F[2.0]---G---H[2.1]
\
C1---C2[1.1]
提交C1和C2修复该分支中的问题,您可以在其中标记版本1.1。现在假设您在版本2.1中进行了更改(G),您希望将其移植到版本1.1以在那里进行相同的更改。您可以使用git cherry-pick
执行以下操作:
---A---B---C[1.0]---D---E---F[2.0]---G---H[2.1]
\
C1---C2[1.1]---G1[1.2]
提交G1与提交G相关,除了它可以应用于版本1.1而不是版本2.0。
在这些示例中,分支(附加的开发流)是关键概念,而标记只是一种方便的方式,可以使名称引用项目在特定时间点所处的状态。 Git支持许多其他操作分支的方法,特别是使用强大的git rebase
命令。