【Git】--Part4--多人协作

别再纠结SolidWorks了!用FreeCAD 0.19.4从草图到3D零件,保姆级Part Design工作台入门 本文详细介绍了FreeCAD 0.19.4的Part Design工作台,帮助用户从草图到3D零件实现参数化建模。通过对比商业CAD软件,解析了FreeCAD的独特工作流程和高效建模技巧,包括草图约束、特征操作和参数化设计,助力设计师平滑迁移到开源解决方案。 阅读详情

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

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

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

1. 准备工作

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

W同学:

image.png

L同学:

image.png

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

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

2. Git常见开发流程场景一

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

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

2.1 创建dev分支

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

image.png

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

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

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

image.png

2.2 拉取远程dev分支

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

image.png

image.png

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

image.png

2.3 切换到远程dev分支

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

image.png

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

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

image.png

2.4 在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

2.5 将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

2.6 总结

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

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

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

3. Git常见开发流程场景二

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

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

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

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

  • 让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

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

WSL2 Ubuntu复现FoundationPose项目(docker) 复现一个基于深度学习的物体姿态估计框架FoundationPose项目,使用docker,WSL2 阅读详情

相关推荐

基于迁移学习的花卉识别系统

本研究采用了预训练的经典深度学习模型,包括ResNet、AlexNet和VGG,通过微调的方式在Oxford-102数据集和一个自制花卉数据集上进行训练,并对图像进行了多种数据增强操作,以提高模型的泛化能力,致力于实现花卉的高效分类。

m0_71146337的博客 2374

git邀请仓库成员

在团队开发的时候,经常需要同步代码,如果不是仓库内部成员,同步就很费劲,因此需要先加入仓库,才能进行push推送。

weixin_74261199的博客 1721

OV5640调试大坑,关于binning、RES分辨率与EV曝光

OV5640在使用binning模式时,必须考虑使用场景,分辨率下降叠加动态范围压缩,会使目标对象细节在高光环境下大量丢失,2x2的binning模式,分辨率会远低于感光面积的1/4。

chongyun_的专栏 1822

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

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

罅隙的博客 5万+

如何处理NC数据?(Python和IDL语言实现)

如何处理NC数据?(Python和IDL语言实现) NetCDF(network Common Data Form)网络通用数据格式是一种面向数组型并适于网络共享的数据的描述和编码标准。目前,NetCDF广泛应用于大气科学、水文、海洋学、环境模拟、地球物理等诸多领域。用户可以借助多种方式方便地管理和操作 NetCDF 数据集。(参考自:https://zhuanlan.zhihu.com/p/129351199) 在我看来,nc和hdf有异曲同工之妙,我用的数据以hdf结构为主(HDF:层次文件格式,相当于

zhanglingfeng1的博客 4634

BCIC IV 2a数据集实战:从MATLAB导入到EEG信号分析全流程

本文提供了BCIC IV 2a数据集从MATLAB导入到EEG信号分析的完整实战流程。详细解析了数据集结构,区分了EEG与EOG信号,并演示了信号可视化、基础预处理(滤波、分段、基线校正)等关键步骤,帮助脑机接口研究者快速上手处理这一经典运动想象数据集。

weixin_29047919的博客 468

git -拉取

pull 直接拉取= fetch+merge git pull git_ssh master 如zxyt上传了一个index.html.flowe执行pull后,可以看到本地库进行了更新 fetch+merge 如zxyt修改了1.txt,然后push 此时flower进行fetch操作: fetch前,还是旧内容: fetch后: git fetch git_ssh maste ...

qq_43615903的博客 174

基于opencv自定义网格板的相机标定软件源码

本软件开发版使用的是VS2013和QT5.7, 安装版的需要安装VS核心库(目录里的vcredist_x64.exe, 已安装VS的不需要)。采用强大的模板匹配算法,本程序适用于自定义大范围网格标定(本例程网格使用的是自己画的网格板31*21*10cm),网格点识别度高,矫正速度快,精度高。 使用步骤 第1步: 打开图片,打开标定工具GridCalibTool.exe, 然后选择打开一张待标定的图(CalibFiles文件夹下的500.jpg)。如下图: 第2步: 提取待标定区域(去掉多余部分,只保留网

qq_33138437的博客 1119

Github怎么邀请别人加入自己的项目

这里有很多种方法,先说比较广泛的一种: 1.建立一个组织,在建立一个队伍,把人邀请进去,在组织里生成仓库用那个仓库来放文件,然后一起修改就好了。 还有一种是在一个普通的仓库里邀请合作者: 2. 点击settings,然后点击collaborators 再然后就输入被邀请者的名字或者邮箱等等就好了。这样就实现了邀请合作者一起开发项目的目的。...

lyy的博客 3万+

springboot整合sharding-jdbc实现分库分表详解

springboot整合sharding-jdbc实现分库分表详解

congge 9090

(第100天)Oracle GoldenGate 常见故障处理指南

OGG 运维的核心在于细致的配置管理和主动的问题排查。熟悉常见错误、掌握关键操作流程、并善用日志和调试工具,是保障数据同步任务稳定运行的关键。希望这份指南能帮助您更高效地解决 OGG 同步中遇到的问题。祝您运维顺利!

LuciferLiu_DBA 300

GitHub 邀请成员进行团队开发步骤

GitHub 邀请成员进行团队开发步骤

... 3872

74、光谱成像在电子内窥镜及色彩理论中的应用

本文探讨了光谱成像在电子内窥镜中的应用及其与色彩理论的深度融合。通过分析FICE技术、色彩再现模型及胃黏膜光谱测量,展示了光谱信息在提升医学诊断准确性方面的潜力。同时,系统阐述了颜色的物理属性、标准表示方法、同色异谱现象、颜色测量技术(密度法与比色法)以及CIELAB等均匀颜色空间的构建原理。结合流程图与对比表格,梳理了从光信号获取到颜色处理的完整路径,并展望了人工智能与新型视觉模型在未来医疗成像与色彩科学中的发展方向。

g2h3i4j5的博客 152

Git学习 - Part4(分支管理)

git 分支相关操作学习

roy12138的博客 356

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Git学习part1

这方面SVN采用的是增量式管理的方式,而Git采取了文件系统快照的方式。查看修改人、修改时间、修改内容、日志信息。记录代码开发的历史状态 ,允许很多人同时修改文件(分布式)且不会丢失记录。在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空间,不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率。对团队外开发者贡献的代码进行审核——Git独有。多人并行不悖的修改服务器端的同一个文件。对团队中参与开发的人员进行权限控制。

m0_50973548的博客 331

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Git笔记part01

一、备份二、代码还原三、协同开发四、追溯问题代码的编写人和编写时间(扣工资警告)

qq_64137391的博客 404

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Git Commands Ultimate Tutorial [Part 2]

In the last Git Commands article, we have learned how to useGit optionsand what they can do. Today, we will extend our reach and discover everyth...

chunying4842的博客 188

〔Part1〕Git基础教程(git、pull、push、add、commit、repository、branch、head、reset、checkout)

关键词:git、pull、push、add、commit、repository、branch、head、reset、checkout

Le0v1n 的博客 1627

Git Commands Tutorial - Part 1

There are many different ways to use Git. The most common are the originalcommand linetools andGUI(GraphicalUserInterfaces). Here, we will co...

chunying4842的博客 278

GIT项目管理工具(part1)--简介及概念

GIT简介 什么是GIT(项目管理工具) git是一个开源的分布式版本控制系统,用于高效的管理各种大小项目和文件。 代码管理工具的用途(几乎所有的代码管理工具都有这样的功能,不只是git) ●防止代码丢失,做备份 ●项目的版本管理和控制,可以通过设置节点进行跳转 ●建立各自的开发环境分支,互不影响,方便合并 ●在多终端开发时,方便代码的相互传输 git的特点 ●git是开源的,多在(L...

小山羊的学习日志 840

Git入门操作指南Part1

将介绍Git的基本操作及对应Tortoise Git的操作 参考资源:https://www.bilibili.com/video/BV1pW411A7a5?p=15 目录 1.基本操作列表 初始化 查看状态 添加(将文件从工作区添加到暂存区) 提交(将暂存区文件提交到本地库) 查看日志(历史版本) 回退 分支 2.具体操作演示 2.1.git初始化(git init) 2.2.设置签名 2.3.添加文件 2.4.将文件添加到暂存区(add) 2.5.查看版本(日志) ..

qq_41605114的博客 692

【Git】 -- Part1 -- 基础操作

安装完Git后,首先要做的事情是设置你的 和 地址。这样在你向仓库提交代码的时候,就知道是谁提交的,以及提交人的联系方式。设置完成后,可以使用查看你配置的信息。 创建 Git 本地仓库,创建⼀个 Git 本地仓库对应的命令为 。 以下操作是在Linux系统中,以命令行的方式进行的。 创建本地仓库成功后,使用就可以在此目录下看到一个隐藏目录。这个目录是用来跟踪管理仓库的,一般不用修改这个目录里面的文件,否则Git仓库可能会被破坏。从远程拉取一个项目的时候,就会有这个目录。从远程拉取下来的项目,就是已经初始

FBI_BAIGOU的博客 853

GIT项目管理工具(part4)--提交文件暂存记录及同步文件至本地仓库

基本操作 3.将工作内容记录到暂存区 git add [files..] #---------------------- #e.g. 将 a ,b 记录到暂存区 git add a b #---------------------- #e.g. 将所有文件(不包含隐藏文件)记录到暂存区 git add * 4.取消文件暂存记录 git rm --cached [file] 5.将文件同步到...

小山羊的学习日志 741

git --login-i_使用Git- Part -I:基础知识

git --login-i 介绍 Git是由Linux OS的创建者Linus Torvalds创建的流行的分布式版本控制系统。 因此,您可能已经猜到它首先用于版本控制Linux内核代码。 它广泛用于大多数开放源代码和封闭源代码软件的开发中。 得益于Github的普及以及它自己的功能集。 大多数软件开源项目基金会(例如Eclipse Foundation)最近将其项目SVN和CVS...

danpu0978的博客 3602

3步掌握腾讯混元3D-Part:如何快速实现3D部件智能分割与合成

还在为复杂的3D模型部件分割而烦恼吗?腾讯混元3D-Part正是你需要的AI驱动解决方案!这款强大的工具专注于3D模型部件分割与形状合成,能够将普通图像或网格转换为结构化的3D部件,为3D建模、工业设计和游戏开发带来革命性改变。无论你是3D设计新手还是专业建模师,都能通过这套工具轻松实现高质量的部件识别与生成。 ## 🤔 痛点共鸣:传统3D部件分割的三大挑战 在传统3D建模流程中,部件分割往

gitblog_00088的博客 955

git tag怎么使用_Git学习笔记 001 Git基础 part3

标签Git可以给某一个提交打上标签,以显示一些重要信息。一般会用这个标签来标记文件的版本。创建标签标签分为两种,轻量标签(lightweight)和附注标签(annotated)下面是这两种标签的特性轻量标签只是一个特定提交的引用附注标签存储在数据库的完整对象可以被校验包含打标签者的个人信息附注标签如下的命令tag -a创建了附注标签,-m添加了一些注释$ git tag -a v1.0 -m '...

weixin_39610759的博客 115
上一篇: 【Git】--Part3--远程操作 & 配置 & 标签管理
下一篇: 【MySQL】 -- 事务
C++下等马
博客等级 码龄5年 776粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

C++下等马

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

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

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

打赏作者

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

抵扣说明:

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

余额充值