【Git】多人协作 -- 详解

news2024/10/5 19:09:49

一、多人协作(1)

⽬前,我们所完成的工作如下:

  • 基本完成 Git 的所有本地库的相关操作,git 基本操作,分支理解,版本回退,冲突解决等等。

  • 申请码云账号,将远端信息 clone 到本地,以及推送和拉取。

是时候做最重要的一件事情了,实现多人协作开发。

为了做这件事情,需要先做一些准备工作。我们之前已经将项目 clone 到了指定目录,如:

完成任务:

在 Windows 环境下,再 clone 同一个项目仓库,来模拟和我们⼀起协作开发的另一名小伙伴:

找一个新的文件夹,进入文件夹后右键:

clone 成功:

注意:这里是模拟了两个用户。但在实际开发中,每个用户都有属于自己的 gitee/github 账号,如果要多人进行协同开发,必须要将用户添加进开发者,用户才有权限进行代码提交:

邀请用户:

到此,相当于有了两个用户,分别在 Linux 和 Windows 上针对于同个项目进行协作开发,我们的准备工作到此结束。

目前,我们的仓库中只有一个 master 主分支,但在实际的项目开发中,在任何情况下其实都是不允许直接在 master 分支上修改代码的,这是为了保证主分支的稳定。所以在开发新功能时,常常会新建其他分支,供开发时进行迭代使用。那么接下来,就让我们在 gitee 上新建 dev 远程分支供我们使用:

创建成功:

创建成功的远程分支是可以通过 Git 拉取到本地来,以实现完成本地开发工作。接下来让我们和另一名开发的小伙伴都将远程仓库进行一次拉取操作。

对于我们要操作的是:

注意 :之前讲的 git branch 只能查看本地分支,要查看远程分⽀需要加上  -r  选项。但前提是要 pull  ⼀下拉取最新的远端仓库,才能看到最新的内容。

拉取后便可以看到远程的 dev 分支,接着切换到 dev 分支供我们进行本地开发。要说明的是,我们切换到的是本地的 dev 分支,根据示例中的操作,会将本地分支和远程分支的进行关系链接。

对于另一名小伙伴要操作的是:

现在,我们就可以和小伙伴在 dev 上完成开发。

首先,让我们在 dev 分支上进行一次开发,并 push 到远程:

来看看码云上目前仓库的状态:

至此,我们已经将代码成功推送至码云,接下来假如小伙伴要和我们协同开发,碰巧也要对 file.txt 文件做修改,并试图推送:

这时推送失败,因为小伙伴的最新提交和你推送的提交有冲突,解决办法也很简单,Git 已经给出了提示,先用 git pull 把最新的提交从 origin/dev 抓下来,然后再在本地进行合并,并解决冲突,再推送。操作如下:

解决冲突,重新推送:

此时,在远端的码云就能够看到我们的新提交了:

由此,两名开发者已经开始可以进行协同开发了,不断的 git pull/add/commit/push,遇到冲突就使用之前讲的冲突处理解决掉冲突。

对于我们来说,要想看到小伙伴的代码,只需要 pull 一下即可:

最后不要忘记,虽然我们是在分支上进行多人协作开发,但最终的目的是要将开发后的代码合并到 master 上去,让我们的项目运行最新的代码。接下来我们就需要做这件事情了:

切换至 master 分支,pull 一下,保证本地的 master 是最新内容,合并前这么做是一个好习惯。

切换至 dev 分支,合并 master 分⽀,这么做是因为如果有冲突的话,可以在 dev 分支上进行处理,而不是在 master 上解决冲突,这么做也是一个好习惯。

切换至 master 分支,合并 dev:

将 master 分支推送到远端:

此时再查看远端仓库,master 已经是最新代码了:

此时,dev 分支对于我们来说就没用了, 那么 dev 分支就可以被删除掉。我们可以直接在远程仓库中将 dev 分支删除掉:

总结一下,在同一分支下进行多人协作的工作模式通常是这样:

  • 首先,可以试图用 git push origin branch-name 推送自己的修改。
  • 如果推送失败,是因为远程分支比我们的本地更新,需要先用 git pull 试图合并。
  • 如果合并有冲突,就解决冲突,并在本地提交。(解决冲突是一件很麻烦的事情)
  • 没有冲突或者解决掉冲突后,再用 git push origin branch-name 推送就能成功。
  • 功能开发完毕,将分支 merge 进 master,最后删除分支。

二、多人协作(2)

完成任务:

一般情况下,如果有多需求需要多人同时进行开发,是不会在一个分支上进行多人开发,而是一个需求或一个功能点就要创建一个 feature 分支。现在同时有两个需求需要我们和小伙伴进行开发,那么我俩便可以各自创建一个分支来完成自己的工作。前面我们已经了解了可以从码云上直接创建远程分支,其实在本地创建的分子也可以通过推送的方式发送到远端。在这个部分我们就来用一下这种方式。

对于我而言,可以进行以下操作:

  • 新增本地分支 feature-1 并切换

  • 新增需求内容 —— 创建 feature1 文件

  • 将 feature-1 分支推送到远端

对于小伙伴来说,可以进行以下操作:

  • 创建并切换到 feature-2 分支

  • 在分支下为需求新增 function2 文档

  • 将 feature-2 分支推送至远端

此时在本地看不见伙伴新建的文档,他也看不见我们新建的文档,并且推送各自的分支时,并没有任何冲突,我俩不受对方的影响,用起来就很舒服。

再来看下远端码云上此时的状态:

对于我们的 feature-1 分支:

对于小伙伴的 feature-2 分支:

正常情况下,我俩就可以在自己的分支上进行专业的开发了。但万一有天小伙伴突然生病了,但需求还没开发完,需要我帮他继续开发,于是他就把 feature-2 分支名告诉我。这时我就需要在自己的机器上切换到 feature-2 分支帮忙继续开发,要做的操作如下:

  • 必须先拉取远端仓库内容

  • 可以看到远程已经有了 feature-2

  • 切换到 feature-2 分支上,可以和远程的 feature-2 分支关联起来,否则将来只使用 git push 推送内容会失败

切换成功后,便可以看见 feature-2 分支中的 function2 文件了,接着就可以帮小伙伴进行开发:

  • 继续开发

  • 推送内容

查看远程状态,推送成功了:

这时小伙伴已经修养的差不多,可以继续进行自己的开发工作,那么他首先要获取到我们帮他开发的内容,然后接着我们的代码继续开发。或者我们已经帮他开发完了,那他也需要在自己的电脑上看看我们帮他写的代码:

可以发现代码没有 pull 下来。

Pull 无效的原因是:小伙伴没有指定本地 feature-2 分支与远程 origin/feature-2 分支的链接。

根据提示,设置 feature-2 和 origin/feature-2 的链接即可:

目前,小伙伴的本地代码和远端保持严格一直。我和小伙伴可以继续在不同的分支下进行协同开发了。

各自功能开发完毕后,我们需要将代码合并到 master 中才算真正意义上的开发完毕。

新建一个 Pull Request,让 feature-2 分支合并到 master 分支上:

让 feature-1 分支合并到 master 分支上:

  • 切换至 master 分支pull 一下,保证本地的 master 是最新内容,合并前这么做是⼀个好习惯

  • 切换至 feature-1 分支,合并 master 分支。这么做是因为如果有冲突,可以在 feature-1 分支上进行处理,而不是在 master 上解决冲突,这么做也是⼀个好习惯

  • (1)由于 feature-1 分支已经 merge 进来了新内容,为了保证远程分支最新,所以最好 push ⼀下。
  • (2) push 的另⼀个原因是因为在实际的开发中,master 的 merge 操作一般不是由我们自己在本地进行操作,其他⼈员或某些平台 merge 时,操作的肯定是远程分支,所以就要保证远程分支的最新。
  • (3)如果 merge 出现冲突,不要忘记需要 commit 才可以 push。

此时远程仓库的状态:

此时, feature-1 feature-2 分支对于我们来说就没用了, 那么我们可以直接在远程仓库中将 dev 分支删除掉:

以上就是多人协作的工作模式。


三、远程分支删除后,本地 git branch -a 依然能看到的解决办法

当前我们已经删除了远程的几个分支,使用 git branch -a 命令可以查看所有本地分支和远程分支,但发现很多在远程仓库已经删除的分支在本地依然可以看到。

使用命令 git remote show origin 可以查看 remote 地址,远程分支,还有本地分支与之相对应关系等信息。

此时我们可以看到那些远程仓库已经不存在的分支,根据提示,使用命令:git remote prune origin

这样就删除了那些远程仓库不存在的分支。而对于本地仓库的删除,前面我们已经学过了,这里就不再赘述了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1834726.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++通过VS2022使用Conan2.0安装fmt库实现控制台彩色打印

Conan是一个开源的C/C包管理器,用于管理和构建C/C项目的依赖关系。它允许开发人员轻松地集成第三方库、工具和资源到他们的项目中,并管理这些依赖项的版本、构建选项和配置。 Conan官方提供了对应的VS2022扩展插件,通过这个插件再搭配VS2022…

路由控制和策略路由

文章目录 一、路由控制(1)、前言1.1.1-路由策略 (2)、正反掩码和通配符1.2.1-通配符 (3)、ACL1.3.1-ACL步长1.3.2-步长的作用1.3.3-TCP/UDP端口号 实验1:实验2: 二、前缀列表实验1:2.1.1-前缀列表的表达式2…

一平台一张图,撑起危化生产“安全伞”

安全生产是永恒的主题,是一切工作的基础。 风险辨识不到位、特种作业不合规、隐患治理不彻底、应急能力不匹配……如何从消除事故隐患、从根本上解决问题?随着新一代信息技术和安全生产的深度融合,安全生产的管理方式也在发生深刻变化。 提前…

SQL Server入门-SSMS简单使用(2008R2版)-1

环境: win10,SQL Server 2008 R2 参考: SQL Server 新建数据库 - 菜鸟教程 https://www.cainiaoya.com/sqlserver/sql-server-create-db.html 第 2 课:编写 Transact-SQL | Microsoft Learn https://learn.microsoft.com/zh-cn/…

百数私有化本地部署技术解析,附带独家优惠政策

数据驱动的时代,数据安全性对于每个企业来说都至关重要。私有化本地部署作为一种高效的数据管理方式,越来越受到企业的青睐。然而,高昂的部署费用常常让企业望而却步。 作为一家深耕办公领域10年的低代码公司,百数以本地化部署起…

监控局域网电脑屏幕的办法,最简单的三种方法,好用!

在现代企业管理和家庭教育环境中,对局域网内电脑屏幕进行有效监控成为了保障信息安全、提升工作效率和监督行为规范的重要手段。 监控局域网电脑屏幕不仅可以帮助管理者了解员工的工作状态,确保资源的合理使用,还能在一定程度上预防潜在的网…

AI绘画Stable Diffusion 挽救渣图的神器—Loopback Scaler脚本,你值得拥有!

大家好,我是向阳 今天这篇文章就是围绕着开局的这两张原图开始的。 在Stable diffusion甚至当前所有的AI画图工具里面,AI生成内容随机性都是一个很大的问题。 我们经常遇到一张图构图不错但是脸崩了,又或者人物形象不错但是背景画得崩了这…

海南云亿商务咨询有限公司抖店开店怎么样?

在数字化浪潮席卷全球的今天,电商行业日新月异,其中抖音电商以其独特的短视频直播模式,迅速崛起成为电商领域的新贵。海南云亿商务咨询有限公司,作为抖音电商服务的佼佼者,凭借专业的团队和丰富的经验,致力…

人体关键点检测-基于Gradio完成应用开发

前言 本次分享将带领大家从 0 到 1 完成一个人体姿态估计任务,覆盖数据准备、模型训练、推理部署和应用开发的全流程,项目将采用以PaddlePaddle为核心的飞桨深度学习框架进行开发,并总结开发过程中踩过的一些坑,希望能为有类似项…

通过nginx转发后应用偶发502bad gateway

序言 学习了一些东西,如何才是真正自己能用的呢?好像就是看自己的潜意识的反应,例如解决了一个问题,那么下次再碰到类似的问题,能直接下意识的去找到对应的信息,从而解决,而不是和第一次碰到一样…

重生奇迹MU召唤术师简介

出生地:幻术园 性 别:女 擅 长:召唤幻兽、辅助魔法&攻击魔法 转 职:召唤巫师(3转) 介 绍:从古代开始流传下来的高贵的血缘,为了种族纯正血缘的延续及特殊使用咒术的天赋&…

那些年你用过的iOS开发工具

版权说明 本文转载于《程序员》杂志 2014 年 6 月刊。 前言 从苹果发明 iPhone 起,AppStore 上的一个又一个类似 flappy bird 的一夜暴富的故事刺激着大量开发者加入移动开发大军。随着这些开发者出现的,还有大量方便 iOS 开发者的各种工具。这些工具…

琪朗护眼大路灯推荐入手吗?书客、琪朗、雷士落地灯测评大比拼!

护眼大路灯现在的风越来越大,它是一种能够改善光线质量的工具,通过光源的设计、技术的调校、防眩光的设计等,利用LED全光谱光源的高能效、长寿命光色稳定性的优点,搭载专研的护眼黑科技技术,以及采用防眩光设计&#x…

【vue3|第10期】Vue3中watchEffect详解

日期:2024年6月10日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方&#xf…

4、matlab双目相机标定实验

1、双目相机标定原理及流程 双目相机标定是将双目相机系统的内外参数计算出来,从而实现双目视觉中的立体测量和深度感知。标定的目的是确定各个摄像头的内部参数(如焦距、主点、畸变等)和外部参数(如相机位置、朝向等&#xff09…

【因果推断python】42_异质干预效应2

目录 预测弹性 关键思想 预测弹性 我们在这里陷入了复杂的境地。我们已经同意我们需要预测 ,遗憾的是这是不可观察的。因此,我们不能使用 ML 算法并将其作为目标插入。但也许我们不需要观察 来预测它 这是一个想法。如果我们使用线性回归呢&#xff…

Flutter ffi iOS Failed to lookup symbol

官方文档:在 iOS 中使用 dart:ffi 调用本地代码

【SPIE独立出版 | 往届均已完成EI检索】2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024)

2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024) 2024 International conference on Cloud Computing, Performance Computing and Deep Learning *CCPCDL往届均已完成EI检索,最快会后4个半月完成! 一、重要信息 大会官网:www…

App上架和推广前的准备

众所周知,App推广的第一步是上架各大应用下载市场,然后才是其他推广渠道。所以本文主要分两部分,第一部分主要介绍的是上架各大应用市场方面的准备,第二部分主要介绍的是其他渠道推广方面的准备。 一、App上架前的准备 1.1 上架…

MySQL----表级锁行级锁排它锁和共享锁意向锁

MySQL的锁机制 锁(Locking)是数据库在并发访问时保证数据一致性和完整性的主要机制。在 MySQL 中,不同存储引擎使用不同的加锁方式;我们以 InnoDB 存储引擎为例介绍 MySQL 中的锁机制,其他存储引擎中的锁相对简单一些…