GitFlow 正在将 master 的不需要的方面合并到修复完成的开发中
GitFlow is merging unwanted aspects of master into develop on hotfix finish
我们使用具有相当标准设置的 GitFlow,我们有:
- 大师代表最新作品
- develop 代表正在进行的开发
- hotfixes/x 下的一些修补程序代表正在进行的错误修复
- features/x 下的一些功能表示下一个版本中的更大功能。
develop 和 master 之间确实存在一些差异,例如我们希望 master 指向某些版本的 NuGet 依赖项,而 develop 指向这些依赖项的其他版本。
我们发现,当我们执行 GitFlow Hotfix 并完成该修补程序时,在它从 hotfix 分支合并到 develop 时,它会尝试合并这些从 master 到 develop 的配置差异,即使这些配置更改不是作为修补程序的一部分完成的。
我的同事断言,当我们最初移动到 GitFlow 而不是我们使用 GitFlow Releases 功能时,这个问题很可能是主分支通过从 develop 分支形成的副作用.
是否有人对此类设置或症状有任何经验或有任何建议来尝试解决它?我们正在考虑尝试通过使用 GitFlow Release 功能或使用 Git 属性来忽略要合并的文件来重新创建 master,但感觉可能有更明智的方法来解决这个问题。
这是因为您在 master
上的配置自 master
和 develop
之间的 "merge base" 以来在某处发生了更改。 (粗略地说,"merge base" 是 master
和 develop
历史上的最新提交。)我想说这意味着您的同事走在正确的轨道上。您是否使用特定的 GitFlow 工具并不严格,但是 develop
应该从 master
分支出来(而不是相反),并且(也许更重要的是)不应直接应用更改至 master
.
如果这些陈述对您来说似乎不合理,那么您所拥有的并不是 GitFlow 的 "a fairly standard setup"。
在 GitFlow 设置中,依赖版本与任何代码更改都没有什么不同。通常只有几件事会发生:
最常见的应该是,一个功能需要一个依赖项(或新版本的依赖项),以便更改进入功能分支上的构建配置。从那里它最终合并到 develop
,然后在一个发布分支上进行,该分支被合并到 master
.
另一种可能性是版本号在修补程序中被更改,因为您需要安全补丁或依赖项。当然应该合并到 master
和 develop
.
最后,您可以更改发布分支上的依赖项;但同样,这些更改预计会合并到 master
和 develop
.
共同的主题是,这些通常都应该汇聚到一个共同的配置。这不是错误的;如果您声称希望版本在产品中保持不同,那么您就是在说您不希望您的开发人员能够进行准确有效的测试。
如果您遵循 gitflow,那么 develop
与 master
具有不同版本的依赖项的唯一原因是更改尚未流向 master
;在这种情况下,修补程序合并不会认为 master
版本应该覆盖 develop
版本,因为合并基础将在 master
版本上。
当然 配置元素在生产环境和开发环境之间应该始终不同(例如连接字符串)。我的建议是在您的构建过程中解决这个问题,而不是在您的源代码控制工作流程中解决这个问题。
简而言之,gitflow 隐式地将整个 master
合并到 develop
,当你像这样合并它时,存在一个问题,即让 master
的某些更改远离 develop
。 (至于你的"My coworker asserts..."我没有完全理解,但是分支是如何开始的是无关紧要的。如果它们最初是不相关的合并仍然旨在使它们相同,正如另一个答案所解释的那样)
我唯一可以建议的是在合并后恢复 develop
中的配置。下次当 master
发生变化时,它会触发合并冲突,您可以按所需方式手动解决。
我们使用具有相当标准设置的 GitFlow,我们有:
- 大师代表最新作品
- develop 代表正在进行的开发
- hotfixes/x 下的一些修补程序代表正在进行的错误修复
- features/x 下的一些功能表示下一个版本中的更大功能。
develop 和 master 之间确实存在一些差异,例如我们希望 master 指向某些版本的 NuGet 依赖项,而 develop 指向这些依赖项的其他版本。
我们发现,当我们执行 GitFlow Hotfix 并完成该修补程序时,在它从 hotfix 分支合并到 develop 时,它会尝试合并这些从 master 到 develop 的配置差异,即使这些配置更改不是作为修补程序的一部分完成的。
我的同事断言,当我们最初移动到 GitFlow 而不是我们使用 GitFlow Releases 功能时,这个问题很可能是主分支通过从 develop 分支形成的副作用.
是否有人对此类设置或症状有任何经验或有任何建议来尝试解决它?我们正在考虑尝试通过使用 GitFlow Release 功能或使用 Git 属性来忽略要合并的文件来重新创建 master,但感觉可能有更明智的方法来解决这个问题。
这是因为您在 master
上的配置自 master
和 develop
之间的 "merge base" 以来在某处发生了更改。 (粗略地说,"merge base" 是 master
和 develop
历史上的最新提交。)我想说这意味着您的同事走在正确的轨道上。您是否使用特定的 GitFlow 工具并不严格,但是 develop
应该从 master
分支出来(而不是相反),并且(也许更重要的是)不应直接应用更改至 master
.
如果这些陈述对您来说似乎不合理,那么您所拥有的并不是 GitFlow 的 "a fairly standard setup"。
在 GitFlow 设置中,依赖版本与任何代码更改都没有什么不同。通常只有几件事会发生:
最常见的应该是,一个功能需要一个依赖项(或新版本的依赖项),以便更改进入功能分支上的构建配置。从那里它最终合并到 develop
,然后在一个发布分支上进行,该分支被合并到 master
.
另一种可能性是版本号在修补程序中被更改,因为您需要安全补丁或依赖项。当然应该合并到 master
和 develop
.
最后,您可以更改发布分支上的依赖项;但同样,这些更改预计会合并到 master
和 develop
.
共同的主题是,这些通常都应该汇聚到一个共同的配置。这不是错误的;如果您声称希望版本在产品中保持不同,那么您就是在说您不希望您的开发人员能够进行准确有效的测试。
如果您遵循 gitflow,那么 develop
与 master
具有不同版本的依赖项的唯一原因是更改尚未流向 master
;在这种情况下,修补程序合并不会认为 master
版本应该覆盖 develop
版本,因为合并基础将在 master
版本上。
当然 配置元素在生产环境和开发环境之间应该始终不同(例如连接字符串)。我的建议是在您的构建过程中解决这个问题,而不是在您的源代码控制工作流程中解决这个问题。
简而言之,gitflow 隐式地将整个 master
合并到 develop
,当你像这样合并它时,存在一个问题,即让 master
的某些更改远离 develop
。 (至于你的"My coworker asserts..."我没有完全理解,但是分支是如何开始的是无关紧要的。如果它们最初是不相关的合并仍然旨在使它们相同,正如另一个答案所解释的那样)
我唯一可以建议的是在合并后恢复 develop
中的配置。下次当 master
发生变化时,它会触发合并冲突,您可以按所需方式手动解决。