如何有效地使用git实现团队协作编码?


除了知道git add,git commit和git push,Git中还有许多其他重要技术。从长远来看,了解这些将有很大帮助。在这里,我将介绍一些能够让你充分利用Git的技巧。下面以角色扮演方式描述:

突然之间,您已成为计划构建下一个Facebook的项目的技术主管。该团队有三名开发人员:

  1. Alice:有一年的经验,知道编程
  2. 鲍勃:有一年的经验,知道编程
  3. 约翰:有3年的经验,对编程很了解
  4. 您:被指派为该项目的技术负责人

主支master branch:
  1. Master Branch应始终拥有与生产环境中对应的代码的副本。
  2. 没有人 -  包括技术主管 - 可以直接在主分支中编码,因为它是生产代码的副本。
  3. 实际代码应该写在其他分支中。

发布分支Release branch:
  1. 项目开始时,首先要做的是为项目创建一个发布分支。发布分支是从主分支创建的。
  2. 与此项目相关的所有代码都将在发布分支中。发布分支只是一个带有前缀release /的普通分支。
  3. 假设我们称为调用发布分支为release/fb。
  4. 有可能在同一代码库上运行多个项目。因此,对于每个项目,都会创建一个单独的发布分支。假设还有一个并行运行的项目。然后该项目可以有一个单独的发布分支,如release/messenger
  5. 存在发布分支的原因是相同的代码库可以并行运行多个项目 - 项目之间不应该存在冲突。

功能分支Feature branch:
  1. 对于应用程序中构建的每个功能,都会创建一个单独的功能分支。这确保了可以独立构建功能
  2. 功能分支就像任何其他分支,但具有前缀feature/
  3. 现在,作为技术主管,您已经要求Alice为Facebook构建登录屏幕。所以她为此创建了一个新的功能分支。让我们称为此功能分支为feature/login。Alice只会在此功能分支中编写整个登录代码。
  4. 功能分支通常从发布分支创建
  5. Bob的任务是建立“朋友”请求的页面。因此Bob创建了一个名为feature/friendrequest的功能分支
  6. 约翰的任务是建立新闻提要。因此John创建了一个名为feature/newsfeed的功能分支
  7. 所有开发人员都在其各自的功能分支中编码。到目前为止一切顺利
  8. 现在,让我们说Alice完成了她的任务,登录代码就准备好了。她需要将她的代码从她的功能分支feature/login发送到发布分支release/fb。这是通过拉取请求 pull request完成的。

拉取请求pull request:
首先,不要将拉取请求与之混淆git pull。
开发人员无法将代码直接推送到发布分支。技术主管需要在进入发布分支之前查看功能代码。这是通过拉取请求完成的。
Alice可以在GitHub中按如下方式提出pull请求 - 这些步骤专门用于GitHub。

在分支名称旁边有一个名为“New pull request”的选项。单击此按钮将会出现Comparing Change的屏幕。让你决定从哪个分支合并到哪个base分支:

  • Comparing 分支应该是Alice的功能分支feature/login
  • base分支应该是发布分支release/fb。

下一步Alice需要输入拉取请求的标题和描述,最后单击“Create Pull Request”。Alice还需要为此拉取请求分配审阅者。由于您是技术主管,她将您的名字作为审阅人输入。
然后,技术主管检查拉取请求中的代码,并将功能分支中的代码合并到发布分支中。
所以现在你已经将feature/login分支中的代码合并到release/ fb分支中,Alice非常高兴她的代码已被合并。

以上是基本的参与github协作编码的工作流程。

代码冲突

  1. Bob也完成了他的代码,并且已经从feature / friendrequest提出了一个pull请求来release/ fb。
  2. 由于发布分支已经具有登录代码,因此发生代码冲突。审阅者有责任解决这些代码冲突并合并代码(也可以由提交者自己合并)。在这种情况下,您作为技术主管需要解决这些代码冲突并合并代码。
  3. 现在John也完成了他的代码,并希望将他的代码添加到发布分支。但John非常擅长处理代码冲突。John从release/ fb分支中获取最新代码到他自己的功能分支feature/ newsfeed(通过git pull或git merge)。约翰解决了所有存在的冲突。现在feature / newsfeed分支也包含release / fb中的所有代码。
  4. 最后,John提出了拉取请求。这次拉动请求中没有代码冲突,因为John已经解决了它们。

因此有两种方法可以解决代码冲突:
  • 第一种方法:pull请求的审阅者需要解决代码冲突。
  • 第二种方法:开发人员确保将发布分支中的最新代码合并到功能分支中并自行解决冲突。