如何使用 Git 进行多人协作开发(全流程图解)

 在软件开发中,多人协作是一项必不可少的任务。而 Git 作为目前最受欢迎的分布式版本控制工具,提供了强大的功能和灵活的工作流程,使得多人协作开发变得更加高效。本篇博客将带你实践如何正确使用 Git 进行多人协作开发
 在本篇博客中,你将学到以下内容:

  1. Feature Branching 分支管理策略
  2. 多人单分支开发与多人多分支开发的差别
  3. 如何安全的解决合并冲突

分支管理策略

 Git分支策略允许开发人员在一个项目上进行协作,同时跟踪更改并维护多个版本的代码库。主流的分支管理策略有 Trunk-Based DevelopmentFeature BranchingGit Flow等等,本文将基于较为简单的 Feature Branching 分支管理策略展开。虽然分支管理策略多种多样,但最好的策略一定是与你的团队特征和项目需求相匹配的。

1.什么是Feature Branching?

 在实际开发中,master 分支非常强调环境的稳定性。因此当我们要开发新的功能或者特性时,需要从 master 分支上拉取 feacture 分支,这样开发者就能在 feacture 分支上独立开发而不影响主分支。当完成开发后,需要提交 pull requestfeacture 分支合并回 master 分支中。 通过 pull request ,仓库中的其他成员能对即将 merge 的代码进行审核并提出建议,从而保证了安全可靠性。
在这里插入图片描述

2.Feature Branching如何工作?

  1. 创建 feacture 分支:feacture 分支一定是从 master 分支上拉取的
  2. feacture 分支上完成开发:通常一个分支就对应着一个特定的功能
  3. 提交 pull request:请求将分支合并回 master 分支
  4. 审查批准:其他开发人员如果对你的代码满意的话,就会同意将你的分支合并到 master 分支。通过代码审查,我们通常能在分支 merge 回主分支前发现错误
  5. 清理:完成开发后,应该及时将没用的 feacture 分支删除,保持代码仓库的整洁

 下面将结合具体的例子为大家逐步骤实践上面的流程,同时带大家体会多人在单分支上开发和在多分支上开发的区别

多人协作一:单分支

  • 任务:开发者A和开发者B在同一分支 feacture 下开发。开发者A在 README 中增加一行 aaa,开发者B在 README 中增加一行 bbb

1.准备工作

  • 场景:开发者A在创建分支前就克隆过远程仓库,而开发者B则在创建分支后才克隆远程仓库
    在这里插入图片描述
    在这里插入图片描述

  • 在实际开发中,如果要进行多人协作开发,首先需要将其他成员添加进来
    在这里插入图片描述

2.创建分支

创建分支的方式有两种:

  • 在远程仓库直接创建
  • 在本地创建分支 xxx 后使用指令 git push origin xxx 在远端创建一个与本地 xxx 分支对应的 xxx 分支
  1. 在单分支场景中,我们首先采用方法一创建分支
    在这里插入图片描述
    在这里插入图片描述
  2. 使用指令 git branch -r 指令可以查看远程仓库中的所有分支,但是对于开发者A而言只能看到 master 分支
    在这里插入图片描述
  3. 原因也不难理解,开发者A是在创建 feacture 分支前克隆远程仓库的,因此当前是落后于远程仓库的最新版本。我们需要使用 git pull 指令来更新分支信息:
    在这里插入图片描述

🎯[说明]:
git pull 指令具有以下两个作用:

  1. 拉取远程分支中的最新提交,并自动合并 (需要建立追踪关系
  2. 更新远程仓库的分支信息(不需要建立追踪关系)

 如何理解建立追踪关系呢?git pull 指令的完整用法是 git pull <远程主机名> <远程分支名>:<本地分支名>,当我们完整使用 git pull 指令时,不需要考虑建立追踪关系的问题,而当我们简写为 git pull 时,本地分支默认为当前的工作分支,远程分支为与之建立链接的远程分支。当我们 clone 远程仓库时其实自动建立了本地master分支与远程master分支的追踪关系——即链接,因此我们可以采用简写的方式。

📌[建议]: 在开发前首先使用 git pull 指令,确保从最新版本开始开发

在windows上模拟开发者B:
在这里插入图片描述

3.在分支上开发

开发者A:

  1. 在本地创建 feacture 分支,并与远端的 origin/feacture 分支建立连接在这里插入图片描述

    • git checkout -b feacture origin/feacture 指令创建一个 feacture 分支并切换到 feacture 分支上,并建立远端 feacture 分支的追踪关系
    • git branch -a 指令用于显示本地和远端的所有分支
    • git branch -vv 指令显示本地分支与远端分支的追踪关系。可以看到此时本地的 feacture 分支已经与远端的 origin/feacture 分支建立了连接
  2. feacture 分支上完成开发,并提交到远端的 origin/feacture 分支上
    在这里插入图片描述

开发者B:

  1. 在本地创建 feacture 分支,并与远端的 origin/feacture 分支建立连接
    在这里插入图片描述

  2. 当我们尝试push到远端仓库时发生了冲突,原因是远端仓库的版本比我们当前的版本高(因为开发者A完成了push操作),我们首先需要 pull 远端仓库的分支内容,解决完冲突后才能再次 add + commit + push
    📌[建议]: 在开发前首先使用 git pull 指令,确保从最新版本开始开发

  3. 因为我们已经建立了本地 feacture 分支与远端 feacture 分支的链接,所以可以直接使用 git pull 指令拉取
    在这里插入图片描述

  4. 手动解决冲突,从当前版本和远程仓库中的版本选择一个
    在这里插入图片描述
    在这里插入图片描述

  5. 重新 add + commit + push。此时我们就可以顺利推送到远程仓库了在这里插入图片描述

4.分支合并

合并分支也有两种方式:

  • 提交 pull request,通过代码审验后合并到 master 分支
  • 在本地 master 分支上合并后再 push 到远端的 master 分支

事先声明,方法一是更被推荐的。出于教学的考虑,在单分支的版本中,先带大家用用方法二

  1. 前面提到,我们要保证主分支的稳定性,因此我们不能直接将 feacture 分支合并到 master 分支上,因为在解决合并冲突的过程中,我们就有可能在无意中改出了更大的 BUG。正确的做法是先将 master 分支合并到 feacture 分支上,解决冲突后并且确认没有 bug 后再合并到 master 分支上。先前有过masterfeacture 分支的合并记录,再合并时就不会出现冲突(都是本地操作)
    在这里插入图片描述
  2. 将本地的 master 分支提交到远端
    在这里插入图片描述在这里插入图片描述

5.清理

完成合并后,就可以将没用的 feacture 分支删除。删除分支也有两种方式:

  • 在远端和本地分别删除 feacture 分支
  • 在本地删除 feacture 分支后推送到远端

这里先为大家呈现第一种删除方式:

  1. 远端删除 feacture 分支
    在这里插入图片描述
  2. 本地删除 feacture 分支
    在这里插入图片描述
  3. 此时我们使用 git branch -r 指令仍然能看到 origin/feacture,此时我们需要使用 git pull --prune 指令进行修剪
    在这里插入图片描述

多人协作二:多分支

多人在单分支上协作开发时,经常需要解决冲突的问题;而使用多分支,各个开发者在各自的分支上独立开发,只需要在最后合并分支时解决冲突即可

  • 任务:开发者A在 feacture-1 分支下编写文件file1。开发者B在 feacture-2 分支下编写文件file1、file2

1.创建分支

前面提到,创建分支的方式有两种:

  • 在远程仓库直接创建
  • 在本地创建分支 xxx 后使用指令 git push origin xxx 在远端创建一个与本地 xxx 分支对应的 xxx 分支

我们现在采用第二种方式创建分支:

开发者A:

  1. 在本地创建 feacture-1 分支。此时在创建本地分支时,我们不能再指定与远程分支 orgin/feacture -1 建立连接,因此此时远程仓库中并没有这个分支
    在这里插入图片描述
    在这里插入图片描述

  2. 执行 git push origin feature-1 ,Git 会将本地的 feature-1 分支推送到 origin 远程仓库中的相应分支。如果远程仓库不存在名为 feature-1 的分支,则 git 会创建之;如果存在,则将修改合并到该分支上
    在这里插入图片描述

  3. 使用 git branch -vv 指令就可以发现,本地的 feacture-1 分支并没有与远端的 feacture-1 分支建立追踪关系。
    在这里插入图片描述

  4. 因此我们不能直接使用 git pull、git push 等缩写指令。解决方法 git 也已经提示我们了①使用完整的命令 ②建立远端分支与本地分支的追踪关系
    在这里插入图片描述 5. 采用方法②来解决问题在这里插入图片描述

开发者B同理

此时远端已经多了两个分支:
在这里插入图片描述

2.在分支上开发

开发者A与开发者B各自在分支上完成开发,并提交到远程分支 feacture-1feacture-2

3. pull request

我们前面提到,合并分支也有两种方式:

  • 提交 pull request,通过代码审验后合并到 master 分支
  • 在本地 master 分支上合并后再 push 到远端的 master 分支

这里我们就是采用 pull request 的方式合并分支

开发者A:

  • 提交 pull request。可自动合并说明没有遇到冲突
    在这里插入图片描述
  • 仓库的管理人员完成对你的审核通过、测试通过后,就可以合并到 master 分支中。在“文件”一栏中可以看到你的修改
    在这里插入图片描述在这里插入图片描述

开发者B:

  • 提交 pull request。不可自动合并说明遇到了冲突
    在这里插入图片描述
  • 我们不能在 master 分支上处理冲突。解决方式与之前类似,先将 master 分支合并到 feacture-2 分支上,解决完冲突后再将 feacture-2 分支合并到 master 分支上
  • 切换到 master 分支上,首先 git pull 拉取最新版本的 master 分支代码!!
    在这里插入图片描述
  • 切换到 feacture-2 分支上,合并 master 分支。遇到冲突,冲动解决冲突
    在这里插入图片描述
  • 冲突解决,并推送到远端仓库
    在这里插入图片描述
  • 此时再次发起 pull request 请求就不会遇到问题了
    在这里插入图片描述
    在这里插入图片描述

4.清理

前面提到,删除分支也有两种方式:

  • 在远端和本地各自删除 feacture 分支
  • 在本地删除 feacture 分支后推送到远端

现在我们演示第二种删除方式

  • 删除远端分支:git push origin --delete xxx
  • 删除本地分支:git branch -D xxx
    在这里插入图片描述
  • 32
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Git多人协作开发流程如下: 1. 创建一个Git裸服务器:由项目负责人在服务器上创建一个裸仓库(git init --bare),作为项目的中央代码仓库。 2. 开发人员克隆仓库:每个开发人员将中央代码仓库克隆到本地(git clone),这样他们就可以在自己的本地进行开发工作。 3. 开发工作:开发人员在本地进行常规的开发工作,包括修改代码、添加新功能等。 4. 提交代码:开发人员将他们的修改提交到本地仓库(git commit),这样他们的修改就被记录下来了。 5. 推送到服务器:开发人员将他们的修改推送到中央代码仓库(git push origin master),这样其他开发人员就可以看到他们的修改。 6. 拉取最新代码:开发人员在开始工作之前,应该先拉取最新的代码(git pull),以确保他们的本地代码是最新的。 7. 分支管理:团队可以使用分支来进行并行开发和功能隔离。例如,项目负责人可以创建一个发布分支(Release)用于上线前的测试,如果测试出现bug,则再创建一个修复bug的分支,然后将修复后的代码合并回发布分支和开发分支。测试完成后,发布分支和bug分支可以被删除。\[3\] 总结起来,Git多人协作开发流程包括创建中央代码仓库、克隆仓库到本地、开发工作、提交代码、推送到服务器、拉取最新代码和分支管理。这样团队成员可以在一个统一的代码仓库中进行协作开发,并且能够方便地管理和追踪代码的修改。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [git多人协作开发流程](https://blog.csdn.net/weixin_43501172/article/details/115549918)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Git多人协同开发工作流](https://blog.csdn.net/Tianxing10/article/details/123600990)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

罅隙`

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值