Git--Part4--多人协作


theme: nico

在之前的Git博客中,已经把Git本地相关的操作以及远程操作的介绍完了。如下:

  • Git–Part1–基础操作 - 掘金 (juejin.cn)
  • Git–Part2–分支管理 - 掘金 (juejin.cn)
  • Git–Part3–远程操作 & 配置 & 标签管理 - 掘金 (juejin.cn)

这篇文章会介绍两种使用Git开发多人协作的场景。以及常遇到的问题。

模拟多人开发的场景,首先要做一些准备。我这里使用一台Windows电脑,和一台Linux服务器,来模拟多人协作开发的场景。后面的文章将本地Windows简称为W同学。Linux服务器简称为L同学

准备工作

第一步,两位同学都需要使用git clone将项目克隆到本地。项目依然是之前在远程操作时创建的Github测试项目。

W同学:

image.png

L同学:

image.png

实际的开发中,每个人都会有自己的远程仓库账号以及密码,这里条件有限只有一个GitHub账号。这个也不影响后续操作,账号分配一般由仓库管理员负责分配,开发人员无需关注,自己设置个账号密码就行~

到此,准备工作做完。相当于有了两个⽤⼾,分别在 linux 和 windows 上针对于同项⽬进⾏协作开发。

Git常见开发流程场景一

⽬前,我们的仓库中只有⼀个 main 主分⽀,但在实际的项目开发中,一般情况下其实都是不允许直接在 main分⽀上修改代码的,这是为了保证主分⽀的稳定。所以在开发新功能时,常常会新建其他分⽀,供开发时进⾏迭代使⽤。

比如这里创建一个dev分支,让同队的成员都在这个dev分支下进行开发,开完后将dev分支合并到main分支,最后删除dev分支即可。这是使用Git开发的常见流程之一。

创建dev分支

1、在项目点击main->View all branches

image.png

2、在此就可以创建新分支了。

image.png
3、创建dev分支
image.png

创建分支成功后,在项目主页就可以切换分支了。

image.png

拉取远程dev分支

创建成功的远程分⽀是可以通过 Git 拉取到本地来,以实现完成本地开发⼯作。
让W同学和L同学都将远程仓库进⾏⼀次拉取操作,如下:

image.png

image.png

拉取完后,就可以看到远程分支了。查看远程分支时,要使用git branch -r命令,git branch 只能查看本地分支。

image.png

切换到远程dev分支

拉取完后,便要切换到dev分支下进行本地开发了。切换的只是本地dev分支,在切换的时候,也可以将本地分支和远程分支进行追踪关系链接。如下:

image.png

消息 Branch 'dev' set up to track remote branch 'dev' from 'origin' 意味着本地分支 dev 已被设置为跟踪远程仓库 origin 中的 dev 分支。

建立追踪关系除了手动建立外,使用git checkout也会自动创建分支并且追踪。如下:

image.png

在dev分支下进行开发

到此,已经建立好本地和远程的追踪关系,就可以在dev分支下进行开发了。

使用案例:
让L同学在dev分支下进行一次开发,并push到远程。

image.png

向Github push时,要输入Github的账号和密码进行验证,如果失败,参考这篇文章:解决git push推送出现的身份验证问题

此时L同学在dev分支下进行了一次开发,这时就可以在Github上查看到devd的最新状态了。

image.png

现在W同学,也新建了一个test.txt文件进行了开发。并向远程dev分支进行推送。

image.png
这时就会推送失败,因为本地仓库落后于远程仓库。要在push之前先使用git pull把最新的dev分支拉取下来。

image.png
W同学pull拉取后,发生了冲突,这时就需要手动解决冲突,然后再次推送。

image.png

使用git pull后,检测到冲突,这里Git自动进入了REBASE状态,可能是由于Git配置问题导致的。

  • git config --get pull.rebase 如果返回了 true,表示 Git 配置为在拉取时自动使用 REABSE。
  • 也可能在执行 git pull origin dev 时,远程的 dev 分支已经有了新的提交,Git 尝试将你的本地提交重新应用在更新后的远程分支上,这可能导致冲突。Git自动进入了REBASE状态。

进入到REBASE状态,先手动解决冲突,然后进行add操作。确定冲突解决没问题了,使用git rebase --continue命令,就会自动更新dev分支。

image.png
然后再次push即可。
image.png
这样,远程仓库上就会更新了。

image.png

如果不想进入REABSE状态,就用windows powershell终端使用git命令吧。解决完冲突后,继续add,commit,push即可

到此,W同学和L同学已经可以进行协同开发了。不断地git pull\add\commmit\push,遇到冲突就手动解决。

现在,对于L同学,想要看远程仓库代码的更新,就需要pull一下了。

image.png

将dev分支合并到main分支下

在dev分⽀上进⾏多⼈协作开发,但最终的目的是要将开发后的代码合并到 main上。下面就进行合并代码。

合并一般都是仓库管理员进行合并的,这里让L同学做为管理员进行合并。再合并之前先干下面这件事。

切换到main分支下,pull进行同步一次,保证本地main分支是最新的。

image.png
合并的时候,再切换到dev分支下合并main分支,这样出现冲突了就不会影响main分支。

image.png
没有问题后,再切换到main分支下,合并dev分支。

image.png
然后把main分支推送到远端main分支下即可。

image.png
此时,GitHub上的main分支就是最新版本的了。

image.png
到此,dev分支就没用了。可以删除了。直接在远程仓库中删除dev分支。根据下图即可删除。

image.png

image.png
然后再本地删除dev分支。并取消追踪远程dev分支。

image.png

image.png

总结

同⼀分⽀下进⾏多⼈协作的⼯作模式通常是这样:

  • ⾸先,可以试图⽤ git push origin branch-name 推送⾃⼰的修改;
  • 如果推送失败,则因为远程分⽀⽐你的本地更新,需要先⽤ git pull 试图合并;
  • 如果合并有冲突,则解决冲突,并在本地提交;
  • 没有冲突或者解决掉冲突后,再⽤git push origin branch-name推送就能成功!
  • 一般建议在push之前,先使用pull合并一下最新的代码,然后解决冲突,再进push。
  • 功能开发完毕,将分⽀ merge main,最后删除分⽀。
  • 合并的时候,再dev和mian分支来回切换合并,这样虽然麻烦,但是最大力度保证了main分支的安全。

如果远程仓库就采用一个main分支的方式进行开发的话,再本地也可以使用分支进行开发,开发完后,再本地合并到main分支下,再推送到远程的main分支下就行。

Git常见开发流程场景二

还有一种主流的开发方式就是如果有多需求需要多⼈同时进⾏开发,是不会在⼀个分⽀上进⾏多⼈开发,⽽是⼀个需求或⼀个功能点就要创建⼀个 feature 分⽀。

比如:现在同时有两个需求需要W同学和L同学进⾏开发,那么便可以各⾃创建⼀个分⽀来完成⾃⼰的⼯作。

在场景一中直接从Github上直接创建远程分⽀,其实在本地创建的分⽀也可以通过推送的⽅式发送到远端。下面就使用⽤这种⽅式来创建分支。

创建远程分支&推送到远端

  • 让W同学再本地创建远程分支feature_1,在这个分支下完成功能的开发,然后推送到远端。

image.png
这样 W同学的开发任务就完成了。在Github中,就能看到刚刚推送的分支了。

image.png

  • 对于L同学的操作也是一样的。如下:

image.png

这样,在Github上就多了两个分支。在本地,你看不⻅他新建的⽂档,他看不⻅你新建的⽂档。并且推送各⾃的分⽀时,并没有任何冲突,你俩互不影响,⽤起来很舒服!!功能开发完了 直接合并解即可,合并时有冲突解决冲突即可。

但是有一天,由于L同学请假了,让W同学暂时接手L同学的任务。让W继续在L的feature_2分支下继续开发。

这时就需要让W在自己的电脑上切换到feature_分支下继续进行开发。
这时W同学就需要做如下操作:
1、先拉取远端仓库内容

image.png
2、创建并切换到feature-2分⽀上,可以和远程的feature-2分⽀关联起来

不和远程仓库的feature-2分支关联的话,后续push会失败

image.png

3、然后正常开发,进行推送即可。

image.png

这里由于网络问题,推送失败了。由于Github服务器在国外,需要自己解决代理问题。

下图是正常推送的情况。
image.png

此时在Github上就能查看到有W同学在feature-2完成的开发了。

image.png

这时L同学请假回来了,继续在自己的feature-2分支下完成功开发。L⾸先要获取到W帮他开发的内容,然后接W的代码继续开发。或者W已经帮他开发完了,L也需要在⾃⼰的电脑上看看W写的代码。

L就需要拉取远程仓库了。如下:

image.png
可以发现,pull失败了。这是因为L没有指定本地 feature-2 分⽀与远程 origin/feature-2 分⽀的链接。根据提示,建立追踪链接即可。然后再进行拉取即可。

image.png
目前L的本地代码和远程仓库是一致的。

各自的功能也都开发完毕了。最后需要将代码合并到main中即可。

W先完成的,W先开始合并。
合并之前同样的操作:
1、切换到main分支,pull一下,保证main分支是最新的。
2、切换到feature_1分支 合并main分支
3、再切换到main分支合并feature_1分支
4、将main分支推送到远端

image.png
L同学也开发完了,开始合并。
同样的操作。将main推送到远端即可。
此时,远程的仓库如下:

image.png
到此,新功能开发完毕,这两个分支就可以删除了。再远程仓库删除分支后,本地 git branch -a 依然能看到的解决办法。

远程就剩一个main分支了。
image.png
本地pull之后依然可以看到。

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

image.png
此时我们可以看到那些远程仓库已经不存在的分⽀,根据提⽰,使⽤ git remote prune origin 命令删除。

image.png

这样就删除了那些远程仓库不存在的分⽀以及本地分支。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机考研|双非计算机专业是考研还是就业?主要看这一点!

去看一看招聘就知道了,看看公司需要的开发或者计算机岗位要求的东西你在本科的时候有没有精通的 如果你发现:哎?看着招聘的要求好像本科多少都接触过,但现在已经忘得差不多了,或者是,哦,我知道…

2024/06/18--代码随想录算法7/17|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

198.打家劫舍 力扣链接 动态规划5步曲 确定dp数组(dp table)以及下标的含义: dp[i]: 下标i内(包括i)的房屋,最多可以偷到的金额为dp[i]确定递推公式 dp[i] max(dp[i-1], dp[i-2]nums[i])dp数…

LeetCode 2813.子序列最大优雅度

给你一个长度为 n 的二维整数数组 items 和一个整数 k 。 items[i] [profiti, categoryi],其中 profiti 和 categoryi 分别表示第 i 个项目的利润和类别。 现定义 items 的 子序列 的 优雅度 可以用 total_profit distinct_categories^2 计算,其中 t…

揭秘机架式液冷负载的前景与功能

随着科技的不断发展,数据中心的运行效率和稳定性成为了企业关注的焦点。传统的风冷散热方式已经无法满足日益增长的散热需求,因此,机架式液冷负载应运而生。本文将揭秘机架式液冷负载的前景与功能。 机架式液冷负载具有更高的散热效率&#x…

游戏开发丨基于Tkinter的五子棋小游戏

文章目录 写在前面Tkinter五子棋系列文章写在后面 写在前面 本期内容:基于tkinter的五子棋小游戏 下载地址:https://download.csdn.net/download/m0_68111267/88700190 实验环境 python3.11及以上pycharmtkinter Tkinter Tkinter是Python的一个标准…

百货商场:打造品质生活

走进我们的百货商场,仿佛置身于一个五彩斑斓的梦幻世界。百货,不仅仅是购物的场所,更是一种品质生活的体验。 在这里,您可以找到最适合自己的商品选择。从家居用品到时尚服饰,从美食佳肴到美妆护肤,每一样商…

Spring Cloud Alibaba Nacos持久化配置

所谓的持久化就是将Nacos配置持久化存储到数据库里面,在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力。 ① 找到并执行sql脚本 这里路径为:n…

Java项目中使用OpenCV检测人脸的应用

Java项目中使用OpenCV检测人脸的应用 一、准备工作 将下载好的opencv的jar包放在项目的根目录下&#xff0c;可以新建一个lib的文件夹&#xff0c;将其放在此处&#xff1b; 在pom文件中引入&#xff1a; <profiles><!-- 生产环境 --><profile><id>…

【C语言】解决C语言报错:Uninitialized Variable

文章目录 简介什么是Uninitialized VariableUninitialized Variable的常见原因如何检测和调试Uninitialized Variable解决Uninitialized Variable的最佳实践详细实例解析示例1&#xff1a;局部变量未初始化示例2&#xff1a;数组未初始化示例3&#xff1a;指针未初始化示例4&am…

Java的三个接口Comparable,Comparator,Cloneable(浅拷贝与深拷贝)

Comparable 当我们要进行对象的比较的时候&#xff0c;我们是不能直接用>、< 这些符号直接进行比较的。 由于这是引用类型变量也是自定义类型变量&#xff0c;直接进行比较的时候&#xff0c;我们是通过对象的地址进行比较的&#xff0c;我们可以使用、! 进行两个对象的…

深入学习Java `synchronized` 关键字

深入学习Java synchronized 关键字 synchronized关键字通过确保在同一时间只有一个线程可以执行某个代码块&#xff0c;从而防止多个线程同时访问共享资源时发生数据不一致的问题。 修饰方法 当synchronized用于修饰实例方法时&#xff0c;表示当前实例对象是同步锁。这意味…

暑期计划打卡清单表怎么写 暑期待办计划清单

暑假来临&#xff0c;是不是感觉时间好像突然多了起来&#xff0c;但又不知道该做些什么好&#xff1f;别担心&#xff0c;列一个暑期计划打卡清单表&#xff0c;就能让你的暑假生活变得有条不紊、充实而有意义。 计划清单&#xff0c;就像是给暑假生活绘制的一张地图。没有它…

geopandas缓冲区相交分析(数据量大时推荐)

geopandas缓冲区相交分析(数据量大时推荐) 目录 1.需求 2.实现代码 3.其它 1.需求 [1] 不采用arcgis、qgis等软件实现 [2] 需要自己编写1个gui软件实现相关功能&#xff0c;那么就不能使用arcpy环境 [3] 采用python自己写代码实现 功能需求&#xff1a;点shp、线shp&#x…

06眼动识别系统-改版

06眼动识别系统-改版 原先的模块组成示意图优缺点 新模块设计优缺点 软件方面结语其他以下是废话 试验&#xff0c;本身就是一个摸索的过程&#xff0c;在上一阶段的试验中&#xff0c;我们发现硬件的连接模式&#xff0c;给试验造成了很多麻烦&#xff0c;所以决定对硬件的连接…

SPI协议硬件回环测试

简介 1.单片机型号&#xff1a;STM32L431RCT6 2.方式&#xff1a;硬件上的回环测试 3.使用软件&#xff1a;CubeIDE 一、 软件配置 1.硬件原理图 通过原理图我们可以看出对于我们较为重要的四个管脚为&#xff1a;PA15、PC10、PC11、PC12&#xff1b;下面来配置这四个管脚 1.…

目标检测——TNO多波段图像数据集

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 T…

R语言数据分析案例31-运用差分整合移动平均自回归模型对世界主要国家(俄罗斯)的污染物排放量进行研究预测

一、研究背景与意义 空气污染导致的环境恶化已经成为世界各国许多国家和地区发展受限的重要原因。空气污染物是由气态物质、挥发性物质、半挥发性物质和颗粒物质的混合物造成的&#xff0c;其中典型 的空气污染物就是人们生活中经常使用到的高频词汇雾霾。本文主要对其中的污染…

黄仁勋加州理工毕业典礼演讲:人工智能是我们这个时代最重要的技术

英伟达公司首席执行官黄仁勋周五&#xff08;6月14日&#xff09;在加州理工学院&#xff08;Caltech&#xff09;毕业典礼上发表演讲&#xff0c;鼓励毕业生在逆境中努力&#xff0c;不断寻求新的机遇。 黄说&#xff0c;加州理工学院因其毕业生受人尊敬而闻名&#xff0c;如…

查询Kafka集群中消费组(group)信息和对应topic的消费情况

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…