Git 工作流程,如何使用 Git 按故事合并
Git Workflow , how to merge by story using Git
因此管理层在 Git 上被出售。我们目前使用 Perforce 并在准备就绪时将更改列表从阶段合并到发布分支。
我们当前工作流程的优势是我们可以选择要生产的功能,而不必担心发布周期。一切都测试好了。
使用 Git 我们的工作流程将是开发人员在开发分支或他们自己的分支中工作。然后他们将他们的更改合并到阶段(测试)分支以供 QA 测试。
一旦 QA 完成测试,PM 将希望将这些更改合并到发布分支并部署到生产环境。
诀窍是我们在 Stage 分支中可能测试了 10 个东西,只有一个准备合并到 Release。
我知道合并整个 Stage 分支到 release 很容易,但这永远不会发生。
使用 Git cherry pick 也很糟糕,如果我们不能按分支合并,那么使用 Git 就没有多大意义了。
在 perforce 中,我们将 changlelists 从 stage 合并到 Release。
我们如何在 Git 中做到这一点?
能举个例子吗?
技术方案及处理方法
您可以在合并到阶段分支时保留 dev 分支,并在生产中需要时尽快合并该 dev 分支。请记住,这会导致阶段分支成为 "dump" 分支。仅在该分支中完成的更改将永远不会进入生产环境。因此,需要在相关的开发分支中进行修复,如果出现两个功能的集成问题(合并冲突或逻辑冲突),您可能需要另一个分支来合并这些开发分支。在后一种情况下,这些更改只能一起合并到生产中(使用具有冲突解决方案的分支。)
这种方法的缺点
也就是说,请记住,您的阶段分支不会包含非常有效的测试状态。可能有些功能以某种方式与其他功能相关,因此在没有其他功能的情况下合并其中一个功能是行不通的。由于合并错误,您可能会识别出它 - 但也可能会发生您不识别它的情况。
备选方案:分开测试
因此,测试彼此隔离的功能可能是一个更好的主意(例如,每个功能都在其开发分支中,而无需其他分支的更改)。这可能需要额外的努力来完成,因为您需要完整的单独测试,包括为此的环境。但是,它将帮助您以合并到生产的方式测试功能。另一方面,一旦您将任何内容合并到生产环境中,这将需要再次测试其他功能 - 测试基础可能已经发生重大变化。
结论
只要你没有定义一个特定的功能列表,接下来将合并到生产中,并且可以在这个组合中进行测试,我可以想象没有完美的技术解决方案。您要么一起测试所有未来的功能——在这种情况下,干扰可能会在测试时发生,并在功能合并后立即丢失。或者您对单独的功能进行测试,并需要在每次合并到生产后重新测试它们,以确保这两个功能没有负面冲突。
根据您的团队的工作方式,有可能相信开发人员有能力牢记可能的干扰。然而迟早会发生,这不起作用并且由于工作流程而发生错误。
因此管理层在 Git 上被出售。我们目前使用 Perforce 并在准备就绪时将更改列表从阶段合并到发布分支。 我们当前工作流程的优势是我们可以选择要生产的功能,而不必担心发布周期。一切都测试好了。
使用 Git 我们的工作流程将是开发人员在开发分支或他们自己的分支中工作。然后他们将他们的更改合并到阶段(测试)分支以供 QA 测试。
一旦 QA 完成测试,PM 将希望将这些更改合并到发布分支并部署到生产环境。
诀窍是我们在 Stage 分支中可能测试了 10 个东西,只有一个准备合并到 Release。
我知道合并整个 Stage 分支到 release 很容易,但这永远不会发生。 使用 Git cherry pick 也很糟糕,如果我们不能按分支合并,那么使用 Git 就没有多大意义了。 在 perforce 中,我们将 changlelists 从 stage 合并到 Release。
我们如何在 Git 中做到这一点?
能举个例子吗?
技术方案及处理方法
您可以在合并到阶段分支时保留 dev 分支,并在生产中需要时尽快合并该 dev 分支。请记住,这会导致阶段分支成为 "dump" 分支。仅在该分支中完成的更改将永远不会进入生产环境。因此,需要在相关的开发分支中进行修复,如果出现两个功能的集成问题(合并冲突或逻辑冲突),您可能需要另一个分支来合并这些开发分支。在后一种情况下,这些更改只能一起合并到生产中(使用具有冲突解决方案的分支。)
这种方法的缺点
也就是说,请记住,您的阶段分支不会包含非常有效的测试状态。可能有些功能以某种方式与其他功能相关,因此在没有其他功能的情况下合并其中一个功能是行不通的。由于合并错误,您可能会识别出它 - 但也可能会发生您不识别它的情况。
备选方案:分开测试
因此,测试彼此隔离的功能可能是一个更好的主意(例如,每个功能都在其开发分支中,而无需其他分支的更改)。这可能需要额外的努力来完成,因为您需要完整的单独测试,包括为此的环境。但是,它将帮助您以合并到生产的方式测试功能。另一方面,一旦您将任何内容合并到生产环境中,这将需要再次测试其他功能 - 测试基础可能已经发生重大变化。
结论
只要你没有定义一个特定的功能列表,接下来将合并到生产中,并且可以在这个组合中进行测试,我可以想象没有完美的技术解决方案。您要么一起测试所有未来的功能——在这种情况下,干扰可能会在测试时发生,并在功能合并后立即丢失。或者您对单独的功能进行测试,并需要在每次合并到生产后重新测试它们,以确保这两个功能没有负面冲突。
根据您的团队的工作方式,有可能相信开发人员有能力牢记可能的干扰。然而迟早会发生,这不起作用并且由于工作流程而发生错误。