如何高效使用 git
Git 工作流程
Git 中的开发流程
参考
恭喜😄
这篇文章最初发表在medium.freecodecamp.org
代码昨天还能用,今天就不行了
代码已被删除
一个奇怪的 bug 突然出现,没人知道是怎么回事
如果您遇到过上述任何一种情况,那么这篇文章适合您。
除了了解git add
、git commit
和 之外git push
,Git 中还有许多其他重要的技术。了解这些技术从长远来看会大有裨益。在这里,我将介绍一些能够帮助您充分利用Git 的技术。
Git 工作流程
每当项目涉及多名开发人员时,使用正确的 Git 工作流程至关重要。本文我将介绍一种在涉及多名开发人员的大型项目中非常有效的工作流程。
设想
突然之间,你成了一个项目的技术负责人,而你正计划用这个项目打造下一个 Facebook。团队里有三位开发人员:
-
Alice:有一年经验,懂编程
-
Bob:有一年经验,懂编程
-
John:有3年经验,编程能力强
-
您:被指定为该项目的技术负责人
Git 中的开发流程
主分支
-
主分支应该始终拥有生产环境中现有代码的副本。
-
任何人( 包括技术主管)都不应直接在主分支上进行编码,因为它是生产代码的副本。
-
实际代码写在其他分支中。
发布分支
-
项目启动时,首先要做的事情就是为项目创建一个发布分支。发布分支是从master 分支创建的。
-
所有与该项目相关的代码都将位于release 分支中。release 分支只是一个带有release/前缀的普通分支。
-
我们将此示例的发布分支称为release/fb。
-
同一代码库上可能有多个项目在运行。因此,每个项目都会创建一个单独的发布分支。假设还有一个项目在并行运行。那么该项目可以有一个单独的发布分支,例如release/messenger
-
拥有发布分支的原因是同一个代码库可以有多个项目并行运行——项目之间不应该存在冲突。
功能分支
-
对于应用程序中构建的每个功能,都会创建一个单独的功能分支。这确保了这些功能可以独立构建
-
功能分支与其他分支类似,但带有前缀feature/
-
现在,作为技术主管,你要求Alice为 Facebook 构建一个登录界面。因此,她为此创建了一个新的功能分支。我们将其命名为feature/login。Alice 会在这个功能分支中编写完整的登录代码。
-
功能分支通常由发布分支创建
-
Bob 的任务是构建“好友”请求页面。因此,Bob 创建了一个名为feature/friendrequest的功能分支。
-
John 的任务是构建新闻推送。因此,John 创建了一个名为feature/newsfeed 的功能分支。
-
所有开发人员都在各自的功能分支上进行代码编写。目前为止一切顺利😃
-
现在,假设 Alice 完成了她的任务,登录代码也准备好了。她需要将代码从功能分支feature/login发送到发布分支release/fb 。这可以通过拉取请求 (pull request)完成。
拉取请求
首先,不要将拉取请求与混淆git pull
。
开发人员无法直接将代码推送到发布分支。技术主管需要在功能代码推送到发布分支之前对其进行审核。这可以通过拉取请求 (Pull Request) 来完成。
Alice 可以在 GitHub 中按如下方式提出拉取请求 —— 这些步骤专门针对 GitHub。
在分支名称旁边有一个名为“New Pull Request”的选项。点击它会打开一个新屏幕,如下所示:
这里:
-
比较分支应该是 Alice 的功能分支feature/login
-
基础分支应该是发布分支release/fb。
完成后,Alice 需要为该拉取请求输入标题和描述,最后点击“创建拉取请求”。Alice 还需要为该拉取请求指定一位审阅者。由于您是技术主管,所以她输入了您的名字作为审阅者。
然后,技术主管审查拉取请求中的代码,并将功能分支中的代码合并到发布分支中
现在您已将代码从feature/login分支合并到release/fb分支,Alice 很高兴她的代码已合并。😃
代码冲突😠
-
Bob 也完成了他的代码,并从feature/friendrequest向release/fb发起了拉取请求。
-
由于发布分支已经包含登录代码,因此会发生代码冲突。审阅者有责任解决这些代码冲突并合并代码。在这种情况下,您作为技术负责人需要解决这些代码冲突并合并代码。
-
现在,John 也完成了他的代码,并希望将其添加到 release 分支。但 John 非常擅长处理代码冲突。他把release/fb分支中的最新代码拖放到了自己的 feature 分支feature/newsfeed中(可以通过 git pull 或 git merge 操作)。John 解决了所有存在的冲突。现在,feature/newsfeed分支也包含了release/fb 分支中的所有代码。
-
最后,John 发起了一个拉取请求。这次拉取请求中没有代码冲突,因为 John 已经解决了它们。
所以解决代码冲突的方法有两种:
- 第一种方法:拉取请求的审阅者需要解决代码冲突。
- 第二种方法:开发人员确保发布分支中的最新代码合并到功能分支中并自行解决冲突。
在企业项目中,初学者可以从第一种方法开始,最终过渡到第二种方法。第二种方法是首选方法
再次进入主分支
项目完成后,release分支的代码会合并回master分支。之后,代码会被部署到生产环境。这样,生产环境的代码和 master 分支的代码就会始终保持同步。这也确保了未来任何项目都能在master 分支上获得最新的代码。
参考
有关拉取请求的更多信息请参见此处。
恭喜😄
现在你已经了解了 Git 的工作流程。Git 还有一些其他概念,例如修改提交和变基,它们也很有用。但 Git 工作流程对于大型项目的成功至关重要。
对于小型项目来说,这种工作流程可能有点高昂。因此,在小型项目中可以使用其他替代方案。