用于保持要素分支历史记录的Git工作流
在我们的项目中,我们正在上游软件(U-Boot)之上实现特性。每隔一两年,就要开始开发新的硬件,并以更新版本的上游软件为基础。以前实现的一些特性几乎按原样适用于新项目,无需太多修改 所以,我们需要一个工作流,它允许跟踪和重用在特定功能范围内完成的工作,而无需从整个代码库中删除它。它不应该是完美的,因为它不是经常需要的,但也不应该是痛苦的 主要的问题是,有时功能在最初实现后的几周/几个月内就得到了修复/调整,有时这种情况会重复几次,因此普通的“功能分支工作流”将无法正常工作 团队和代码库都相对较小(约5人,分别位于上游代码上方约15个LoC)。通常一次只有一个人处理特定的功能 这里有两个我们能够想到的选择,我将只描述如何处理上面有问题的场景,因为这是导致复杂的唯一原因 方法A 初始状态:功能的第一个/上一个版本位于分支X上,最后一次更改是在几个月前,并合并为主版本用于保持要素分支历史记录的Git工作流,git,version-control,branch,branching-and-merging,quilt,Git,Version Control,Branch,Branching And Merging,Quilt,在我们的项目中,我们正在上游软件(U-Boot)之上实现特性。每隔一两年,就要开始开发新的硬件,并以更新版本的上游软件为基础。以前实现的一些特性几乎按原样适用于新项目,无需太多修改 所以,我们需要一个工作流,它允许跟踪和重用在特定功能范围内完成的工作,而无需从整个代码库中删除它。它不应该是完美的,因为它不是经常需要的,但也不应该是痛苦的 主要的问题是,有时功能在最初实现后的几周/几个月内就得到了修复/调整,有时这种情况会重复几次,因此普通的“功能分支工作流”将无法正常工作 团队和代码库都相对较小
git签出X;git合并--无ff主机
git签出主机;git-pull;git merge——没有FFX;git推送
git log——第一个父级——no merges
显示了从一开始就在这个分支上完成的提交的一个很好的列表
这种方法的主要问题在于其脆弱性和限制性:
- 如果有人在步骤1中使用fast forward进行合并,则使用上述方法 因为检索历史记录之后将不起作用。好了,不可能有任何ff 被迫回购,但每个人都必须这样做,不要忘记
- 在第3步中重新设置基础,然后进行合并,这也将打破历史,许多人都喜欢这种方法和重新设置基础。可能是 完全禁止重订更安全,但我不知道如何强制执行 它
有(更好的)想法吗?你能详细说明一下为什么你认为重新定基不合适吗?我理解它的破坏性,但如果一次只有一个人处理某个特定功能,这应该不会是一个问题。我不知道会发生什么,但如果在第3步中完成合并前重定基址,那么git log命令将不再生成X提交列表,他们和其他人混在一起。你能详细解释一下为什么你认为重定基期不合适吗?我理解它的破坏性,但如果一次只有一个人处理某个特定的功能,这应该不会是一个问题。我不知道会发生什么,但如果在第3步中完成合并前重新定基,那么git log命令将不再生成X提交列表,它们与其他提交混合在一起。