Git--多人协作开发

news2024/9/22 9:46:03

文章目录

  • 前言
  • 一、多人协作一
    • 开发目标
    • 将dev分支内容合并至master分支
  • 二、多人协作二
    • 开发者1操作
    • 开发者2操作
    • 突发情况
    • 内容合并至master分支
  • 三、解决git branch -a打印已被删除的远程分支的方法
  • 总结


前言

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

  • 基本完成Git的所有本地库的相关操作,git基本操作,分支理解,版本回退,冲突解决等等
  • 申请码云账号,将远端信息clone到本地,以及推送和拉取

正文开始!!!

一、多人协作一

是时候干最重要的一件事情了,实现多人协作开发!为了这件事情,我们需要先做一些准备工作.我们之前已经将项目clone到了指定目录,如 :
在这里插入图片描述
接下来在windows环境下,再clone同一个项目仓库,来模拟和你一起协作开发的另一名小伙伴 :

在这里插入图片描述
注意,这里我们模拟了两个用户,实际开发中,每个用户都有自己的Gitee/GitHub账号,如果要多人进行协同开发,必须要将用户添加进开发者,用户才有权限进行代码提交 :
在这里插入图片描述
在这里插入图片描述
至此,相当于两个用户,分别在linux和windows上针对同项目进行协作开发,我们的准备工作到此结束.

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

那么接下来,就让我们在Gitee上新建dev远程分支供我们使用 :

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建成功的远程分支是可以通过Git拉取到本地来,以实现完成本地的开发工作.

接下来让我们和另一名开发的小伙伴都将远程仓库进行一次拉取操作,并观察结果 :

  • 对于开发者1要操作的是 :
    在这里插入图片描述
    拉取后可以看到远程的dev分支,接着切换到dev分支供我们进行本地开发.
  • 对于开发者2要操作的是 :

在这里插入图片描述

在这里插入图片描述首先我们在本地创建dev分支,将本地dev分支和远端dev分支进行关联

  • 开发者1
    在这里插入图片描述
  • 开发者2
    在这里插入图片描述

现在,你和小伙伴就可以在dev上完成开发.

开发目标

在这里插入图片描述
首先,我在dev分支上进行一次开发,并push到远程.例如 :

在这里插入图片描述
再来看看码云上目标仓库的状态 :

在这里插入图片描述
在这里插入图片描述
至此,开发者1已经将代码成功推送至码云,接下来加入你的小伙伴要和你协同开发,碰巧也要对file.txt文件作修改,并试图推送,例如 :

在这里插入图片描述
这时推送失败,因为你的小伙伴的最新提交和你推送的提交有冲突,解决办法也很简单,Git已经提示我们,先用git pull把最新提交从origin/dev抓下来,然后在本地进行合并,并解决冲突,在推送.操作如下 :

在这里插入图片描述
解决冲突,重新推送 :

在这里插入图片描述
此时,我们看到远端的码云已经能看到我们的新提交了!
在这里插入图片描述
由此,两名开发者已经开始可以进行协同开发了,不断的git pull/add/commit/push,遇到了冲突,就解决冲突即可.

对于你来说,想要看到小伙伴提交的代码,只需要git pull一下即可.

将dev分支内容合并至master分支

虽然是在分支上进行多人协作开发,但最终的目的是要将开发后的代码合并到master上去,让我们的项目运行最新的代码.操作如下 :
在这里插入图片描述
切换到master分支,pull一下,保证本地的master是最新内容,合并前这么做是一个好习惯.
在这里插入图片描述
切换⾄ dev 分⽀, 合并 master 分⽀这么做是因为如果有冲突,可以在dev分⽀上进⾏处理,⽽不是在在master上解决冲突。这么做是⼀个好习惯.
在这里插入图片描述
切换至master分支,合并dev分支.
在这里插入图片描述
此时,查看远端仓库,master已经是最新代码了 :
在这里插入图片描述
此时,dev分支对于我们来说就没有用了,那么dev分支就可以被删除掉,我们直接可以在远程仓库中将dev分支删除掉 :

在这里插入图片描述

在这里插入图片描述

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

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

二、多人协作二

在这里插入图片描述
一般情况下,如果有多需求需要多人同时进行开发,是不会在一个分支上进行多人开发的而是一个需要或一个功能点就要创建一个feature分支.

现在同时有两个需求需要你和你的小伙伴进行开发,那么你们俩便可以各自创建一个分支来完成自己的工作.在上个部分我们已经了解了可以从码云直接创建远程分支,其实在本地创建的分支也可以通过推送的方式发送到远端.在这里我就采用这种方式.

开发者1操作

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

在这里插入图片描述
新增需求内容-创建func1文件

在这里插入图片描述
将 feature-1 推送至远端

在这里插入图片描述

开发者2操作

创建并切换到 feature-2 分支

在这里插入图片描述
在分支下为需求新增func2文件
在这里插入图片描述
将 feature-2 分支推送至远端
在这里插入图片描述
此时,在本地你看不见他新建的文档,他看不见你新建的文档.并且推送各自的分支时,并没有任何冲突,你俩互补影响,用起来很舒服!

此时来查看码云上面的状态 :
在这里插入图片描述
对于开发者1的 feature-1 分支 :
在这里插入图片描述
对于开发者2的 feature-2 分支 :

在这里插入图片描述
正常情况下,你俩就可以在⾃⼰的分⽀上进⾏专业的开发了!

突发情况

但天有不测风云,你的小伙伴突然生病了,但需求还没开发完,需要你帮他继续开发,于是他便把 feature-2 分支名告诉你了.这是你就需要在自己的机器上切换到 feature-2分支帮忙继续开发,要做的操作如下 :

先拉去远端仓库的内容

在这里插入图片描述
可以看到远程已经有了 feature-2
在这里插入图片描述

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

在这里插入图片描述
切换成功后,便可以看见 feature-2 分支中的func2文件了,接着就可以帮小伙伴进行开发 :
在这里插入图片描述
推送内容

在这里插入图片描述
查看远程状态,推送成功了 :
在这里插入图片描述
这时,你的小伙伴已经修养的差不多,可以继续进行自己的开发工作,那么首先他要获取到你帮他开发的内容,然后接着你的代码继续开发.或者你已经帮他开发完了,那他也需要在自己的电脑上看看你帮他写的代码 :

在这里插入图片描述
pull无效的原因是小伙伴没有指定本地 feature-2分支 与远程origin/feature-2分支的链接,根据提示,设置 feature和origin/feature-2的链接即可 :

在这里插入图片描述
目前,小伙伴的本地代码和远端保持严格一致.你和你的小伙伴可以继续在不同的分支下进行协同开发了.

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

内容合并至master分支

由于你的小伙伴率先开发完毕,于是开始merge

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
至此,就合并完成了!

当你的小伙伴将其代码mergemaster后,这时你也开发完成了,也需要进行mergemaster操作,于是你 :(在本地实现合并)
在这里插入图片描述
切换至master分支,pull一下,保证本地的master是最新内容,这是一个好习惯!

# 切换至 feature-1分支合并master分支,这么做是因为如果用冲突,可以在 feature-1 分支上进行处理,而不是在master分支上解决冲突.
[huluwa@centos7 ~/remote-gitcode]$ git checkout feature-1 
Switched to branch 'feature-1'
[huluwa@centos7 ~/remote-gitcode]$ git merge master 
Merge made by the 'recursive' strategy.
 func2 | 2 ++
 1 file changed, 2 insertions(+)
 create mode 100644 func2
[huluwa@centos7 ~/remote-gitcode]$ ls
a.so  b.ini  file.txt  func1  func2  README.en.md  README.md

由于 feature-1 分支已经merge进来了新内容,为了保证远程分支最新,最好push一下.
要push的另一个原因是因为在实际开发中,master的merge操作一般不是由我们自己在本地完成.
如果merge出现冲突,不要忘记需要commit才可以push.

在这里插入图片描述
切换至 master分支,合并 feature-1分支

在这里插入图片描述
将 master分支推送至远端

在这里插入图片描述
此时远程仓库的状态 :

在这里插入图片描述
此时,feature-1feature-2分支对于我们来说就没用了,那么我们可以直接在远程仓库中将分支删掉 :

在这里插入图片描述
这就是多⼈协作的⼯作模式,⼀旦熟悉了,就⾮常简单.
在这里插入图片描述

三、解决git branch -a打印已被删除的远程分支的方法

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

在这里插入图片描述
使用命令git remote show origin,可以查看remote地址,远程分支,还有本地分支与之相对于关系等信息.

在这里插入图片描述
此时我们可以看到远程仓库已经不存在的分支,根据提示,使用git remote prune origin命令 :
在这里插入图片描述
这样就删除了那些远程仓库不存在的分⽀。对于本地仓库的删除,之前的课程已经学过了,⼤家可以⾃⾏从操作。


总结

(本章完!!!)

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

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

相关文章

学无止境·MySQL(4-2)(多表查询加强版)

多表练习试题 试题2(加强版)1、创建表2、表中添加数据3、找出销售部门中年纪最大的员工的姓名4、求财务部门最低工资的员工姓名5、列出每个部门收入总和高于9000的部门名称6、求工资在7500到8500元之间,年龄最大的人的姓名及部门7、找出销售部…

【Python】面向对象 - 封装 ② ( 访问私有成员 | 对象无法访问私有变量 / 方法 | 类内部访问私有成员 )

文章目录 一、访问私有成员1、对象无法访问私有变量2、对象无法访问私有方法3、类内部访问私有成员 一、访问私有成员 1、对象无法访问私有变量 在下面的 Python 类 Student 中 , 定义了私有的成员变量 , # 定义私有成员__address None该私有成员变量 , 只能在类内部进行访问 …

分析图中常见的这种“箭头”,如何用GIS绘制?

小伙伴们, 在各种分析图、空间结构图中, 是不是经常看到这种“扇形”的箭头, 同时伴随着一些“引绿入城”等分析语言。 于是,你有没有好奇, 这种箭头是怎么做出来的? 强大的GIS是否可以绘制出这种箭头? 还是那句话—— 别问,问就是能! 其实ArcMap 和 ArcGIS P…

【大数据实战电商推荐系统】概述版

文章目录 第1章 项目体系框架设计(说明书)第2章 工具环境搭建(说明书)第3章 项目创建并初始化业务数据3.1 IDEA创建Maven项目(略)3.2 数据加载准备(说明书)3.3 数据初始化到MongoDB …

41. 同时在线人数问题

文章目录 题目需求思路一实现一学习链接题目来源 题目需求 现有各直播间的用户访问记录表(live_events)如下。 表中每行数据表达的信息为:一个用户何时进入了一个直播间,又在何时离开了该直播间。 现要求统计各直播间最大同时在…

Stable Diffusion系列课程上:安装、提示词入门、常用模型(checkpoint、embedding、LORA)、放大算法、局部重绘、常用插件

文章目录 一、Stable Diffusion简介与安装二、文生图(提示词解析)2.1 提示词入门2.2 权重2.3 负面提示词( Negative prompt)2.4 出图参数设置2.5 新手念咒方法 三、图生图3.1 图生图入门3.2 随机种子解析3.3 图生图拓展 四、模型4…

MySQL基础篇第3章(运算符)

文章目录 1、算术运算符1.1 加法与减法运算符1.2 乘法与除法运算符1.3 求模&#xff08;求余&#xff09;运算符 2、比较运算符2.1 等号运算符2.2 安全等于<>2.3 不等于运算符2.4 空运算符2.5 非空运算符2.6 最小值运算符2.7 最大值运算符2.8 BETWEEN AND运算符2.9 IN运算…

cmake操作目录

目录 cmake如何使用子目录 demo cmake生成build目录结构 如果指定子目录编译文件名字(binaryDir) 如果指定子目录编译的路径(binaryDir) 子目录相关的作用域 demo 子目录中定义project cmake如何使用子目录 如果项目比较小的话,我们将所有源码文件放到一个目录里面是没…

wpf border控件和Effect学习

Border&#xff08;边框&#xff09;控件绘制一个边框、一个背景。 常用的属性&#xff0c; Background&#xff1a;填充 Border 边界之间的区域或者说是绘制该区域的背景&#xff0c;是一个Brush对象。 BorderBrush&#xff1a;用于绘制外部边框颜色&#xff0c;是Bru…

Vue 和 React 前端框架的比较

Vue 和 React 前端框架的比较 本文研究了流行的前端框架 Vue 和 React 之间的区别。通过对它们的学习曲线、视图层处理方式、组件化开发、响应式数据处理方式和生态系统及社区支持进行比较分析&#xff0c;得出了它们在不同方面的优劣和特点。该研究对于开发者在选择合适的前端…

QC51XX---I2c使用

QCC51XX---系统学习目录_嵌入式学习_force的博客-CSDN博客 今天我们聊聊I2C的使用。在开发过程中多多少少会加入一些外围传感器可以给用户带来更好的使用体验。例如,利用接近传感器识别戴上耳机和取下耳机,从而去自动暂停播放音乐,或接听转移通话。又例如,用触摸或敲击替代…

【vant】打开vant表单的正确形式(基于vant表单的二次封装)

前言 最近在用vant做关于移动端的项目,由于表单字段太多,不想写直接写到template中,这样太繁琐了,所以我们以把表单弄成schema配置形式: // data.ts import type { ItemSchema } from /typing/helper; import { StudentField } from /components; import { getDictTextByCode…

在tplink路由器xdr6088中运行Docker潘多拉(pengzhile/pandora)遇到无法访问的问题

在xdr6088中搜索安装pengzhile/pandora一切正常&#xff0c;但是按照常规运行docker后&#xff0c;直接访问8899端口无法打开页面&#xff0c;进入终端 运行如下命令 /usr/local/bin/python /usr/local/bin/pandora-cloud -s 0.0.0.0:8899 即可成功运行&#xff0c;然后客户端…

RabbitMQ在SpringBoot中的高级应用(2)

过期时间 1.单独的设置队列的存活时间,队列中的所有消息的过期时间一样 Bean//创建交换机public DirectExchange ttlQueueExchange(){// 交换机名称 是否持久化 是否自动删除return new DirectExchange("ttl_queue_log",true,false);}Bean//创建队列publ…

Swagger3学习笔记

参考https://blog.csdn.net/YXXXYX/article/details/124952856 https://blog.csdn.net/m0_53157173/article/details/119454044 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifact…

云之道知识付费V2小程序V3.1.1独立平台版安装使用教程

据播播资源了解&#xff0c;云之道知识付费小程序是一款专注于知识付费的小程序源码&#xff0c;为内容创业者、自媒体和教育培训机构提供全方位的互联网解决方案。 由播播资源小编全套安装云之道知识付费V2独立版系统&#xff0c;系统支持无限多开&#xff0c;相比上几版出现…

如何创建电子商务平台

创建一个电商平台已经变得简单而又高效&#xff0c;其中乔拓云作为一家专业的第三方平台&#xff0c;提供了丰富的模板和工具&#xff0c;帮助商家快速搭建自己的电商平台。本文将介绍如何通过乔拓云平台创建电商平台&#xff0c;并提供一些建议和注意事项。 首先&#xff0c;商…

wincc项目中VBS脚本密码的研究

文章目录 前言一、分析二、验证及使用 前言 很多时候我们在wincc中写全局脚本时会为自己的脚本添加密码&#xff0c;但很久很久以后再想修改密码忘记了怎么办呢。 一、分析 经过分析v7.0,v7.3,v7.5密码稍有不同&#xff0c;但同样最多可以设置21位的密码。 二、验证及使用

支持向量机(SVM)

目录 1 引言 2 支持向量机的理论基础 1. 什么是支持向量&#xff0c;它们在模型中的作用是什么&#xff1f; 2. 线性支持向量机的数学原理 3. 解释如何通过核技巧来处理非线性问题 4. 支持向量机的优点和局限 3 支持向量机的实践 1. 如何使用Python的sklearn库创建和训练…

【计算机组成与体系结构Ⅰ】实验4 存储器原理实验

一、实验目的 1&#xff1a;了解双端口静态存储器IDT7132的工作特性及使用方法。 2&#xff1a;了解半导体存储器如何读写。 二、实验总结 0&#xff1a;实验内容 双端口存储器RAM&#xff1a; 左端口的数据部分与数据总线DBUS7-DBUS0相联&#xff1b;右端口的数据引脚与指…