我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Git在项目中的协作模式是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Git在项目中的协作模式是什么

今天小编给大家分享一下Git在项目中的协作模式是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

1、分布式工作流程

与传统的集中式版本控制系统(CVCS)相反,Git 的分布式特性,使开发者间的协作变得更加灵活多样。

在集中式版本控制系统中,每个开发者就像是连接在集线器上的节点,彼此的工作方式大体相像。 而在 Git 中,每个开发者同时扮演着节点和集线器的角色。也就是说, 每个开发者既可以将自己的代码贡献到其他的仓库中,同时也能维护自己的公开仓库, 让其他人可以在其基础上工作并贡献代码。

由此,Git 的分布式协作可以为你的项目和团队,衍生出种种不同的工作流程, 接下来会介绍几种常见Git工作流程。

你可以选择使用其中的某一种,或者将它们的特性混合搭配使用。

2、集中式工作流

Git为了便于客户机之间的协同工作,Git版本控制系统一般会设置一个中央版本库服务器,目的是让所有客户机都从该主机更新版本,提交最新版本,该工作模式下的客户机地位都平等。

集中式工作流像SVN一样,以中央仓库作为项目所有修改的单点实体,所有修改都提交到 Master分支上。这种方式与 SVN 的主要区别就是开发人员有本地库,但是Git 很多特性并没有用到。

如下图:

Git在项目中的协作模式是什么

上图说明:

  • 一个远程仓库。

  • 一个主分支master。

  • 团队每个成员都有一个本地仓库,在本地仓库中进行代码的编辑、暂存和提交工作。

集中式工作流总结:

适用人群:小型开发小团队,习惯使用SVN工具的小团队。

工作方式:

  • 团队组长创建远程仓库,创建一个master分支,组员可读可写。

  • 每个开发人员都git clone远程仓库到本地仓库,在master分支上开发。

  • 每次开发都要git pull更新远程仓库的master分支版本到本地。

  • 每次开发完成就git commit到本地仓库, 接着git push到远程仓库。

缺点:

  • 忘了git push,一直会提交到本地仓库,没有推送到远程仓库。

  • 忘了git pull,导致本地仓库与中央仓库不一致,发生文件冲突。

  • 大量操作git pull,导致增加Git分支合并次数,增加了Git变基次数,降低了Git的性能。

3、分支工作流

功能分支工作流在集中式工作流的基础上,为各个新功能分配一个专门的分支来开发,即在master主分支外在创建一个分支,程序员开发的新功能全部push到此分支上,等到功能成熟的时候,再把此分支合并到主分支master上。

如下图:

Git在项目中的协作模式是什么

分支工作流总结:

适用人群:小型开发团队,熟悉Git分支的团队。

工作方式:

  • 团队组长创建远程仓库,创建一个master分支,组员可读不可写。

  • 每个开发人员都git clone远程仓库到本地仓库。

  • 每个开发人员创建自己的feature分支,在feature分支上开发。(记住,feature分支是基于master分支)

  • 每个开发人员每次开发完成就git commit到本地仓库中自己的feature分支, 接着git push到远程仓库。

  • 通过pull request提醒团队组长,浏览组员提交feature分支。

  • 组长把feature分支拉下来,然后合并到自己本地仓库的master分支上测试。

  • 组长测试feature分支通过之后,由组长负责把feature分支合并到远程仓库的master分支上。

  • 组长在远程仓库把合并过的feature分支删除。

  • 组员在本地仓库把合并过的feature分支删除。

  • 组员将本地仓库分支切换为master分支,然后git pull将本地仓库的master分支更新到远程仓库的master分支版本。

缺点:

  • 增加团队组长的工作量。

  • 增加团队组员提交步骤。

说明:Pull Request作用是可以让其他组员或组长可以查看你的代码,并可以提出代码修改意见或者讨论。

4、GitFlow 工作流(最流行)

Gitflow工作流没有用超出上面功能分支工作流的概念和命令,而是为不同的分支,分配一个很明确的角色,并定义分支之间如何交互,和什么时候进行交互。

  • 除了有master主分支(用于存储正式发布的历史版本)外,还有一个作为功能集成分支的develop分支。
    当初始化完成后,某个程序员想要开发一个功能,并不是直接从master分支上拉出新分支,而是使用develop分支作为父分支来拉出新分支。
    当新功能完成后,再合并回父分支,新功能的提交并不与master分支直接交互。

  • 一旦develop分支上有了做一次发布(或者说快到了既定的发布日)的足够功能,就从develop分支上checkout一个发布分支。
    新建的发布分支用于开始发布循环,所以从这个时间点开始之后新的功能,不能再加到这个分支上,该分支只应该做Bug修复、文档生成和其它面向发布任务。
    一旦对外发布的工作都完成了,发布分支合并到master分支,并分配一个版本号打好Tag。
    另外,这些从新建发布分支以来的做的修改,要合并回develop分支上。

  • 维护分支或说是热修复(hotfix)分支用于,快速给产品发布版本(production releases)打补丁,这是唯一可以直接从master分支fork出来的分支。
    修复完成,修改应该马上合并回master分支和develop分支(当前的发布分支),master分支应该用新的版本号打好Tag。
    为Bug修复使用专门分支,让团队可以快速处理掉问题,而不用打断其它工作或是等待下一个发布循环。
    你可以把维护分支想成是一个直接在master分支上处理的临时发布。

总结就是:Gitflow 工作流通过为功能开发、发布准备和维护设立了独立的分支,让发布迭代过程更流畅,充分的利用了分支的特点。严格的分支模型也为大型项目提供了一些非常必要的结构。

下图是完整的Gitflow 工作流开发方式图,但实际开发工作环境可能会精简:

Git在项目中的协作模式是什么

Gitflow工作流总结:

适用人群:任何开发团队,熟悉Git分支的团队。

工作方式:

  • 项目维护者创建项目维护者的远程仓库,创建master分支与develop分支,贡献者可读不可写。

  • 每个贡献者git clone远程仓库中的develop分支到本地仓库。(记住,develop分支相当于master的分支,包括功能开发,修改,测试。master分支相当于最终分支)

  • 每个贡献者在本地仓库创建自己的feature分支,在feature分支上开发。

  • 在feature分支又可以创建多个feature分支,继续开发项目。

  • 每个贡献者每次开发完成就git commit到本地仓库中自己的feature分支, 接着git push到远程仓库。

  • 通过pull request提醒项目维护者,浏览贡献者提交feature分支。

  • 项目维护者把feature分支拉下来,然后合并到自己本地仓库的develop分支上测试。

  • 组长测试feature分支通过之后,由组长负责把feature分支合并到远程仓库的develop分支上。

  • 项目维护者会release分支上git tag打上版本号。

  • 项目维护者可以从develop分支创建release分支,接着把release分支合并到master分支上,同时master分支同步到develop分支。

  • 项目维护者在远程仓库把合并过的feature分支删除。

  • 每个贡献者在本地仓库把合并过的feature分支删除。

  • 每个贡献者将本地仓库分支切换为develop分支,然后git pull将本地仓库的master分支更新到远程仓库的develop分支版本。

说明:Gitflow工作流是Vincent Driessen工程师提出的多分支工作流。

5、Forking 工作流(偶尔使用)

分叉(Forking)工作流也可以叫做分布式工作流,是在 GitFlow工作流的基础上的衍生,充分利用了Git在分支和克隆上的优势,再加上pull request 的功能,以达到代码审核的目的。既可以管理大团队的开发者(developer)的提交,也可以接受不信任贡献者(contributor)的提交。

这种工作流使得每个开发者都有一个服务端仓库(此仓库只有自己可以push推送,但是所有人都可以pull拉取修改),每个程序员都push代码到自己的服务端仓库,但不能push到正式仓库,只有项目维护者才能push到正式仓库,这样项目维护者可以接受任何开发者的提交,但无需给他正式代码库的写权限。

这种工作流适合开源社区的开源项目,大家统一对项目做贡献,但是有一个人或一个团队作为开发者来管理项目,所有的贡献者的代码由开发者审核,其功能完善之后再由开发者push到正式仓库中。

总结:

  • 分叉(Forking)工作流更适合安全可靠地管理大团队的开发者,而且能接受不信任贡献者的提交。

  • 在实际工作中,如果偶尔有需要团队外的成员帮我们解决问题时,可能会用到。

  • 这种工作流程并不常用,只有当项目极为庞杂,或者需要多级别管理时,才会体现出优势。 利用这种方式,项目总负责人(即主管)可以把大量分散的集成工作,委托给不同的小组负责人分别处理,然后在不同时刻将大块的代码子集统筹起来,用于之后的整合。

图示如下:

Git在项目中的协作模式是什么

提示:

  • 每个成员都可以从中央版本库中拉取代码。

  • 每级成员都只能向上一级提交代码。

  • 上一级合并代码之后继续向上级提交代码。

  • 最后只有独裁者才能向中央版本库提交代码。

分叉工作流(分布式仓库工作流)总结:

适用人群:大型开发团队,熟悉Git分支的团队。

工作方式:

  • 主项目维护者创建远程仓库,创建一个master分支,从项目维护者可读不可写。

  • 从项目维护者通过fork主项目维护者的远程仓库的副本,到自己的远程仓库,包括master分支。(记住,从项目维护者的远程仓库独立于主项目维护者的远程仓库)

  • 从项目维护者git clone主项目维护者的远程仓库的副本到本地仓库。

  • 从项目维护者创建自己的feature分支,在feature分支上开发。

  • 从项目维护者每次开发完成就git commit到本地仓库中自己的feature分支, 接着git push到远程仓库。

  • 通过pull request命令,从项目维护者合并自己feature分支,到从项目维护者的远程仓库的master分支上。

  • 从项目维护者在远程仓库把合并过的feature分支删除。

  • 从项目维护者在本地仓库把合并过的feature分支删除。

  • 从项目维护者在远程仓库通过pull request向主项目维护者的远程仓库的推送。

  • 主项目维护者通过pull request获取从项目维护者的远程仓库的推送。

  • 主项目维护者进行从项目维护者的远程仓库代码审查,测试。

  • 主项目维护者确认无误后,可以直接合并到主项目维护者的远程仓库。

以上就是“Git在项目中的协作模式是什么”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Git在项目中的协作模式是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Git在项目中的协作模式是什么

今天小编给大家分享一下Git在项目中的协作模式是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、分布式工作流程与传统的
2023-06-30

在JAVA项目中组合模式的实现原理是什么

今天就跟大家聊聊有关在JAVA项目中组合模式的实现原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。组合模式:将不同但是相关的对象组合成树形结构以实现“部分-整体”的层次结构,
2023-05-31

在JAVA项目中实现建造者模式的原理是什么

本篇文章给大家分享的是有关在JAVA项目中实现建造者模式的原理是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。建造者模式:将复杂对象的构造与它的实现相分离,让相同的构建过程
2023-05-31

Java项目中适配器模式的原理是什么

Java项目中适配器模式的原理是什么?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。适配器模式是把一个类的接口适配成用户所期待的,使得原本由于接口不兼容而不能一起工作的一些类可以
2023-05-31

go_package 选项在协议缓冲区文件中的作用是什么?

大家好,今天本人给大家带来文章《go_package 选项在协议缓冲区文件中的作用是什么?》,文中内容主要涉及到,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!问题内容我做了一些研究,包括查看
go_package 选项在协议缓冲区文件中的作用是什么?
2024-04-05

闭包在Golang项目中的设计模式

闭包是一种将函数与其访问的变量环境绑定的技术。在 golang 中,它广泛用于设计模式,如:工厂模式:封装工厂方法和私有数据,用于创建特定类型对象。策略模式:封装策略方法和私有数据,用于在算法之间切换。观察者模式:封装观察者方法和私有数据,
闭包在Golang项目中的设计模式
2024-04-16

项目部署在云服务器中的作用是什么

部署在云服务器中的作用如下:提高系统可用性:云服务器可以提供更高水平的可用性,因为它具有高可用性功能,可以容错和保护系统免受故障或恶意攻击。通过在云服务器中部署应用程序,可以降低系统故障率,并减少停机时间。提高性能和响应时间:云服务器可以提供更快速的响应时间和更短的部署时间。通过使用云服务器,可以提高应用程序的速度和性能,从而提高应用程序的可用性。减少资源占用:许多应用程序使用数据和计算资源,而云服务器可以减...
2023-10-27

php 中FastCGI模式的作用是什么

php 中FastCGI模式的作用是什么?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、说明是一种让交互程序与 Web 服务器通信的协议。FastCGI 是早期通用网关接
2023-06-15

mysql中mvvc模式的作用是什么

MVVC模式在MySQL中指的是Model-View-View-Controller模式,是一种用于开发web应用程序的软件设计模式。在这种模式中,Model代表数据层,View代表用户界面,Controller代表业务逻辑。MVVC模式
mysql中mvvc模式的作用是什么
2024-04-09

php中cli模式的作用是什么

在PHP中,CLI(Command Line Interface)模式是指通过命令行界面执行PHP脚本的模式。CLI模式有以下作用:执行PHP脚本:可以在命令行中直接执行PHP脚本,而不需要通过Web服务器来运行。调试和测试:CLI模式可以
php中cli模式的作用是什么
2024-03-01

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录