【Git】为什么需要版本控制?版本控制工具有那些?

news/2024/5/10 22:14:27/文章来源:https://blog.csdn.net/zsy3757486/article/details/129143366

目录

一、为什么需要版本控制?

二、版本控制工具有那些?

💟 创作不易,不妨点赞💚评论❤️收藏💙一下


一、为什么需要版本控制?

首先我们要知道什么是版本控制?对版本控制进行文字拆分来理解,版本就是各个不同开发人员对项目代码进行不同程度的修改、不同版本的开发;控制就是对这些代码信息、不同的版本进行集中起来,并对其进行控制管理。最主要的就是对每个人的操作进行记录追踪,什么时候、什么人修改了什么内容都会进行日志记录。

说到版本控制,主要有三大功能:版本管理、共享代码、并行开发。

版本管理:可以回退到历史的任何版本。

例如:项目在此阶段开发出现了一系列bug无法解决或者需求变更等,那么这个时候不可能把项目推翻重写。这个时候只要使用过版本控制软件对代码进行过管理,我们就可以回退到代码正常的任何一个开发阶段的版本。会对版本变更信息进行记录。当然要是什么人删除了修改了什么错误信息,最后导致项目出现问题,这一系列操作都会清清楚楚被记录下来,追踪文件的变更。所以这也是在出现问题该找谁来承担负责提供了数据证明。

共享代码:团队之间可以共享代码。

通过对自己的代码进行提交推送到我们集中存放代码的一个库中,同时呢还可以拉取别人提交推送的代码到之间的本地库中进行代码共享。

并行开发:多人协作作业,团队合作开发,代码进行整合。

团队多人可以同时对同一个项目进行开发作业,然后在对各自开发的代码进行整合。当然所开发的需求内容是不交叉的。如果对同一个地方进行修改在进行提交的时候就会出现冲突,这时候就需要我们手动修改冲突的代码部分然后在进行提交,对冲突进行解决。

简单来说,版本控制就是一种记录文件内容变化对文件内容和操作等进行追踪,以便将来查阅特定版本修订情况的系统。


说了这么多,那为什么需要版本控制呢?其实很简单,就从版本控制的功能来说吧。

使用版本控制之前,一个人开发,一个大型的项目一个人开发会花费很长时间才能完成,效率低下,而且代码质量很难保障。而且中途要是出现什么重大错误的话,想回到上一开发阶段也无法回去,除非将错误解决或者从头来过,这显然是不可能的,所以在开发是时候还有时不时进行项目备份。

使用版本控制之后,多人协作开发,使开发人员的工作更加轻松快捷。工期时间大大缩短,效率得到提升的同时质量有得到了保障。而且即使出现了什么问题,还可以回归到任何历史版本。抛开技术不说,还可以增强团队凝聚力,提高团队语言沟通能力。

总而言之,版本控制使得个人开发过渡到了团队协作。效率大幅度提高、代码得到了更好的管理。


二、版本控制工具有那些?

版本控制的工具可分为集中式版本控制工具和分布式版本控制工具

➢ 集中式版本控制工具

CVS 、SVN(Subversion)、VSS……

集中化的版本控制系统诸如 CVS 、SVN 等, 都有一个单一的集中管理的服务器, 保存所有文件的修订版本, 而协同工作的人们都通过客户端连到这台服务器, 取出最新的文件或者提交更新。多年以来, 这已成为版本控制系统的标准做法。

这种做法带来了许多好处, 每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限, 并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来得轻松容易。

事分两面, 有好有坏。这么做显而易见的缺点是中央服务器的单点故障。如果服务器宕机一小时, 那么在这一小时内, 谁都无法提交更新,也就无法协同工作。


➢ 分布式版本控制工具

Git 、Mercurial 、Bazaar、Darcs……

像 Git 这种分布式版本控制工具, 客户端提取的不是最新版本的文件快照, 而是把代码仓库完整的镜像下来 (本地库)。这样任何一处协同工作用的文件发生故障, 事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作, 实际上都是一次对整个文件仓库的完整备份。

分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:

  1. 服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)

  2. 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)

图解:

集中式控制是用户直接提交到服务器,中间没有任何媒介;而分布式控制中间穿插了一个本地库,版本控制在本地进行,即使断网也可以进行开发。有什么代码冲突也是在本地进行冲突解决,当代码都不会产生冲突时,才能将代码推送到最终的远程仓库中。这样每一次用户进行文件拉取操作时,其实就是对整个文件仓库进行备份。

分布式控制相当于集中式控制来说,唯一主要区别是,每个开发人员或者客户都会有自己的本地服务器,而不是作为服务器的单个存储库,他们将会拥有整个历史或代码版本及其所有分支的副本在自己的本地服务器或者机器上。基本上,每个客户端或用户都可以在本地工作并断开连接,这比集中式控制更加方便。


写到最后

四季轮换,已经数不清凋零了多少, 愿我们往后能向心而行,一路招摇胜!

🐋 你的支持认可是我创作的动力

💟 创作不易,不妨点赞💚评论❤️收藏💙一下

😘 感谢大佬们的支持,欢迎各位前来不吝赐教

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

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

相关文章

重压之下,特斯拉并不心甘情愿地召回FSD

/ 导读 /近日,美国国家公路交通安全管理局(NHTSA)宣布,其将召回近37万辆已安装或待安装全自动驾驶测试版(FSD Beta)的汽车。其实早在今年1月份的时候,NHTSA就要求特斯拉提交召回申请。而特斯拉在…

2023从0开始学性能(1) —— 性能测试基础【持续更新】

背景 不知道各位大佬有没遇到上面的情况,性能这个东西到底是什么,还是以前的358原则吗?明显并不是适用于现在了。多次想踏入性能测试门槛都以失败告终,这次就以系列的方式来督促自己真正踏进性能测试的门槛。 什么是性能测试 通…

作业:1.实验串口收发一个字符2.实验串口收发一个字符串

main.c代码如下#include "uart4.h" extern void printf(const char *fmt, ...); void delay_ms(int ms) {int i,j;for(i 0; i < ms;i)for (j 0; j < 1800; j); } int main() {//串口初始化uart_init();//实现串口数据收发while(1){//put_char(get_char()1);p…

前端必须知道的http知识

HTTP协议也叫超文本传输协议&#xff0c;是一种基于TCP/IP的应用层通信协议&#xff0c;这个协议详细规定了浏览器和万维网服务器之间互相通信的规则&#xff08;报文&#xff0c;请求报文、响应报文&#xff09; 请求方式 HTTP设定了八种发送请求方式&#xff0c;这八种方法没…

APP测试中ios和androis的区别,有哪些注意点

目录 一、运行机制不同 二、对app内存消耗处理方式不同 三、后台制度不同 四、最高权限指令不同 五、推送机制不同 六、抓取方式不同 七、灰度发版机制不同 八、审核机制不同 总结感谢每一个认真阅读我文章的人&#xff01;&#xff01;&#xff01; 重点&#xff1a;…

独立搭建 handle server

本节主要介绍,如何搭建一个与 GHR隔离的 handle sever,不与外界有任何连通。 下载文件 访问地址下载最新版:http://www.handle.net/download_hnr.html 这里以 9.3.0 版本作为讲解 解压服务端,解压客户端 # 解压 tar -xzvf handle-9.3.0-distribution.tar.gz# 到目录下 …

剑指 Offer 27. 二叉树的镜像

剑指 Offer 27. 二叉树的镜像 难度&#xff1a;easy\color{Green}{easy}easy 题目描述 请完成一个函数&#xff0c;输入一个二叉树&#xff0c;该函数输出它的镜像。 例如输入&#xff1a; 镜像输出&#xff1a; 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,…

性能测试的二八原则

性能测试二八原则&#xff0c;响应时间2/5/8原则 所谓响应时间的“2-5-8原则”&#xff0c;简单说&#xff0c;就是 当用户能够在2秒以内得到响应时&#xff0c;会感觉系统的响应很快; 当用户在2-5秒之间得到响应时&#xff0c;会感觉系统的响应速度还可以; 当用户在5-8秒以内得…

智能小车PWM调速原理

电机驱动电路智能小车电机的驱动芯片采用L293D。L293D是一款单片集成的高电压、高电流、4通道电机驱动&#xff0c;设计用于连接标准DTL或TTL逻辑电平&#xff0c;驱动电感负载&#xff08;诸如继电线圈、DC和步进电机&#xff09;和开关功率晶体管等等。L293D有4个通道&#x…

SpringBoot2核心技术-核心功能【05、Web开发】

目录 1、SpringMVC自动配置概览 2、简单功能分析 2.1、静态资源访问 1、静态资源目录 2、静态资源访问前缀 2.2、欢迎页支持 2.3、自定义 Favicon 2.4、静态资源配置原理 3、请求参数处理 0、请求映射 1、rest使用与原理 2、请求映射原理 1、普通参数与基本注解 …

Vulnhub靶场----1、DC-1

文章目录一、环境搭建二、渗透流程三、思路总结一、环境搭建 靶场下载地址&#xff1a;https://download.vulnhub.com/dc/DC-1.zip Kali地址&#xff1a;192.168.144.148 DC-1靶机地址&#xff1a;192.168.144.149 二、渗透流程 端口扫描&#xff1a;nmap -A -T4 192.168.144.1…

基于 U-Net 网络的遥感图像语义分割 完整代码+论文

一、研究目的U-Net 是一种由全卷积神经网络启发的对称结构网络&#xff0c;在医疗影像分割领域取得了很好的效果。 此次研究尝试使用 U-Net 网络在对多光谱遥感影像数据集上进行训练&#xff0c;尝试使用卷积神经网络自动分割出建筑&#xff0c;希望能够得到一种自动分割遥感影…

基于Java+SpringBoot+Vue+Uniapp前后端分离健身预约系统设计与实现

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战✌ 博主作品&#xff1a;《微服务实战》专栏是本人的实战经验总结&#xff0c;《Spring家族及…

数字经济讨论题

自2001年以来&#xff0c;Alphabet&#xff08;Google&#xff09;已进行了200多次并购。下面列出了并购年份。选择Alphabet进行的三笔并购讨论这些并购是如何使Alphabet拥有新的或增强的现有业务领域重要的是考虑何时进行所选择的收购。谷歌已经从一家提供互联网搜索引擎的公司…

【VUE3.0_CSS功能】

CSS功能组件css作用域深度选择器&#xff08;标签名空格:deep(标签名)&#xff09;插槽选择器&#xff08;:soltted(标签名)&#xff09;全局选择器&#xff08;:global(类名)&#xff09;动态CSS&#xff08;v-bind&#xff09;useCSSModule拓展知识&#xff1a;deep的写法组件…

拒绝背锅:测试项目中的风险管理一定要知道

测试经理除了要管理产品线的质量保障和日常部门事务工作外&#xff0c;另一项比较重要的就是测试项目全流程的管理。 今天不聊整体的测试项目流程如何开展&#xff0c;而是想聊一聊在同行中比较高频出现的一个字眼&#xff1a;风险管理。 什么是风险管理 引用百度上的解释&a…

亿级高并发电商项目-- 实战篇 --万达商城项目 十二(编写用户服务、发送短信功能、发送注册验证码功能、手机号验证码登录功能、单点登录等模块)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是小童&#xff0c;Java开发工程师&#xff0c;CSDN博客博主&#xff0c;Java领域新星创作者 &#x1f4d5;系列专栏&#xff1a;前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶 &#x1f4…

ES6的迭代器与迭代协议Symbol.iterator

前言ES6新增了两个协议&#xff1a;可迭代协议&#xff1a;对象必须具有Symbol.Iterator属性&#xff0c;属性值为一个函数&#xff0c;当这个对象被迭代时&#xff0c;就会调用该函数&#xff0c;返回一个迭代器。迭代器协议&#xff1a;描述了迭代器对象的具体规则。迭代器迭…

数据分析-深度学习 NLP Day2关键词提取案例

训练一个关键词提取算法需要以下几个步骤&#xff1a;1&#xff09;加载已有的文档数据集&#xff1b;2&#xff09;加载停用词表&#xff1b;3&#xff09;对数据集中的文档进行分词&#xff1b;4&#xff09;根据停用词表&#xff0c;过滤干扰词&#xff1b;5&#xff09;根据…

推荐5款免费且无广告的软件,助你提升效率

有时候一些小工具&#xff0c;能给你带来一些意想不到的效果&#xff0c;我们来看看下面这5款工具&#xff0c;你又用过其中几款呢&#xff1f; 1.文件大小查看——Folder Size Folder Size是一个可以查看文件大小的软件&#xff0c;使用它可以一键查看文件夹里的文件大小。你…