GIT:不止一位开发人员在处理同一功能

GIT: more than one developer working on the same feature

我有一个关于以下场景的最佳工作流程的问题。

目前有2个分支:

master 仅通过批准的合并请求接受代码。

给定 2 个开发人员在处理相同的功能,不同的部分,为此功能创建合并请求的最佳方法是什么:

  1. 每个开发人员都创建自己的? (他们都有彼此的代码,因为为了进步,他们直接相互推拉)
    • 这不会导致问题,因为第一次创建合并请求会导致其他更改吗?一次推送一个提交真的很乏味。也许保留一个只有本地更改的分支并创建一个集成分支?但是合并请求本身不起作用,也没有多大意义。
  2. 其中之一为两者创建了 "complete" 合并请求?
    • 审查它成为一项更大的工作,因为它有更多的代码,而且我们不能同时拥有合并请求的 2 个所有者

创建一个功能分支(来自 master),两个程序员都在使用。两位工程师都应使用来自 master 的 "atomic commits" so that the reviewer's job is straightforward. If there are many other engineers merging to master during this feature's development, perform periodic rebasing 以确保构建完整性。

如果两个开发人员部分不是独立的,我建议您采用方法 2,一个开发人员创建一个包含两个作业的合并请求。但是,您可以通过以下方式降低难度:

-让每个开发人员以更小的部分对他们的工作部分进行代码审查。虽然这不会避免对进入主分支的整个工作进行代码审查,但它肯定会减少拒绝。

-对于大功能,只要有可能,每个开发人员都应该生成不依赖于其他作业的较小的作业 ("atomic commits"),然后可以将这部分合并到开发分支中并从中提取其他开发人员继续他的工作。这样,当功能完成时,它已经存在于开发分支中,而不是开发人员的主题分支中。

根据您的描述,我相信您的开发人员会有包含所有工作的主题分支。从主题分支的角度来看,您不能轻易地将两者分开。所以选择方法 2 并由两个开发人员签名。

Forked workflow 在这种情况下变得非常有吸引力(并且与 Github 一起工作得很好)它使用拉取请求将更改从开发人员的个人分支发送回主存储库的存储库。

  • 'origin' 远程指向开发人员在服务器上的个人项目分支(通常存储在他们在 Github 上的个人区域等)。
  • 'upstream' 远程指向某个服务器上的官方存储库。
  • 'development' 会定期合并到官方存储库中的 'master'(绝不会相反)
  • 官方存储库中的 'development' 和 'master' 应该始终干净地构建/测试。
  • 开发人员根据开发创建本地分支,以处理特定问题/故事的子集。
  • 当代码准备好接受审查并通过所有测试时,他们再次将他们的本地分支从开发中变基,然后 git push 将分支转移到他们的私人分支存储库并从他们的私人创建拉取请求fork/branch 到 master repository/development 分支。

假设开发人员有一个名为 'i903-description-of-issue' 的分支(903 是我们的 github 问题编号),并且他们需要针对开发进行变基:

git fetch upstream
git checkout development
git merge --ff-only upstream/development
git checkout i903-description-of-issue
git rebase development
git push origin i903-description-of-issue

因此开发人员有责任确保他们的个人分支始终与主存储库上的官方 'development' 分支保持一致(通过变基)。它使用拉取请求将多个提交合并到主 'development' 分支中。 Github(和其他工具)中的这种拉取请求模型允许在接受 PR 之前进行代码审查。

如果它是一个破坏性的功能分支,会破坏将 'development' 分支持续部署到 QA 服务器的能力,那么您可能需要将新功能分解成更小的部分,这样会更少破坏性。