Git 管理对给定解决方案版本进行bug修复的最佳方法是什么?

Git 管理对给定解决方案版本进行bug修复的最佳方法是什么?,git,versioning,Git,Versioning,我正在尝试使用Git来管理产品的不同版本。我有几种方法可以做到这一点。我熟悉拥有“主”分支的概念,并沿着该主分支标记不同的点,以构成解决方案的命名“版本”。例如,在某个时间点,我可能会决定当前版本代表我的产品的“RP_2012”版本。稍后,在添加了更多功能后,可能会出现“RP_2013”版本等 我突然想到,即使开发可能在特定的“版本”上完成,bug修复可能仍然需要推出。例如,假设我在Azure工作,每个客户都有自己的解决方案版本,而不是多租户协议(因为这样,如果他们想付费升级,我就可以为他们提供

我正在尝试使用Git来管理产品的不同版本。我有几种方法可以做到这一点。我熟悉拥有“主”分支的概念,并沿着该主分支标记不同的点,以构成解决方案的命名“版本”。例如,在某个时间点,我可能会决定当前版本代表我的产品的“RP_2012”版本。稍后,在添加了更多功能后,可能会出现“RP_2013”版本等

我突然想到,即使开发可能在特定的“版本”上完成,bug修复可能仍然需要推出。例如,假设我在Azure工作,每个客户都有自己的解决方案版本,而不是多租户协议(因为这样,如果他们想付费升级,我就可以为他们提供新版本的产品,并且他们可以继续使用他们喜欢的旧版本产品,直到他们准备好升级,而不是强加给他们新的功能)。我有一个脚本,它使用TeamCity、FluentMigrator等的组合,以便能够获取特定客户拥有的版本并随意升级,同时保留其现有数据。因此,在添加到产品中的任何新功能都将在其分支上创建,然后合并到relea的master负责人中se在某些未来版本中,还需要进行bug修复,这些bug修复可能应用于当前正在使用/支持的产品的任何/所有版本

如果我像上面讨论的那样使用带标签的版本方法和单个“主”分支,则可能无法推出此类错误修复。如果我为每个版本提供自己的分支,是否有可能在派生自每个“版本”的祖先的单独分支中执行错误修复分支,然后将一个分支合并成几个不同的、特定于版本的分支?或者是否有一些聪明的方法来使用Rebase,以便如果我有一个bug修复,会影响版本10、11和12,比如说,这些“版本”只是主分支上的标记点,我可以从标记为“版本10”的点分支吗在master中,并以某种方式重新设置master的基础,使其基于将在所述bug修复分支中执行的修复,从而确保版本10及以上的所有版本都从给定分支地址的修复中受益?当然,同时,任何新功能都将通过从master的头部分支并合并回该头部来完成

我希望我的问题和基本意图足够清楚。本质上,我想知道是否最好将给定产品的不同版本保留在一个主分支中。如果是这样,如何最好地实施缺陷修复,以便在需要时/如果需要,能够在每个版本中使用。这可能涉及将单个分支合并为多个分支离散的后代分支。或者可能涉及对所有版本所在的单个分支进行重定基址。或者也许你们知道一些更聪明的方法。


提前感谢您的建议。

我认为这里没有一个客观的方法来定义什么是最好的

就我个人而言,我总是采用每次发布一个分支的模式。尤其是当你有多个客户的时候。有时甚至一个客户会要求一个自定义功能,所以你会从他们的分支分支分支出来进行一个小的发布,依此类推

在您的情况下,假设您使用多分支模型,并且您有一个要应用于某些分支的bug修复,您可以将该修复/提交到需要它的任何分支

另外,请检查,asker提供了一个脚本,用于同时提交多个分支。为此,请使用cherry pick。

我建议使用“git flow”为此,它是git的一个扩展,用于处理您正在描述的用例,具有一个主分支和开发分支、单独的发布分支和单独的功能分支。有关所用分支模型的详细描述,请参阅和博客文章


在使用rebase实现您描述的目的时,您应该非常小心。rebase将重写版本历史记录,如果有来自“不同”用户的提交,这将使其变得非常混乱和困难版本历史记录。

非常理想,谢谢。这看起来正是我需要的类型。我会查看你的链接。我已经通读了,你的链接准确地回答了我的问题。这是一个全新的帐户,所以我还不能给出声誉,但我已经将你的回答标记为我问题的答案,Steinar。非常感谢你的帮助,也谢谢你的Tarek。谢谢Rachel,希望你对git flow有很好的体验。我已经用了一年多的时间,非常喜欢它。我已经将所有与我一起工作的git存储库都转换为这个模型。有一件事我想提一提,一开始让我有点困惑,那就是git flow只会改变你的本地reposi如果你需要远程存储库上的分支,你需要手动将分支推送到远程repo。谢谢。当你在第二个链接中提到的博客文章说“功能分支通常只存在于开发人员repo中,而不存在于源代码中”时,我真的很想知道这一点。我过去的工作方式是,开发人员生成功能,然后在这些功能合并回主构建之前,团队中的另一名开发人员会进行同行审查,以检查已完成的工作是否正常。这与建议的将开发人员的本地回购推到原始版本以允许第二名开发人员的方法只是略有不同来看看他们的工作。我很感谢你提到这一点。我不知道为什么这个问题以“不具建设性”结束。这是我所看到的少数几个问题之一,这些问题导致(简短)讨论的所有参与者就一个单一答案达成了共识:这个