【五一创作】版本控制-从零开始学Git-01什么是Git

news2024/10/3 4:33:19

一、版本控制

1.1 概念

什么是"版本控制"?版本控制就是一种记录一个或多个文件内容变化、以便开发者 或者其他用户将来对特定版本的文件进行查阅备份恢复等操作的系统,即版本控制系统。(VCS,version control system)。

1.2 为何需要版本控制

想象一下,你编辑了一个名为"可行性分析报告.docx"的文件,在特殊情况下可能需要保存这个文件不同时间的版本,很多人可能会像下图这样来命名,通过在文件名称后不同的后缀的方式,有的还会加上备份时间的后缀。这样做简单但只限于数据量少的文件,但特别容易出现错误,而且对于庞大数据量且进行过多次改变源代码文件来说,无法人性化的记录和管理,也无法得知何时在某个版本上做了哪些改变。所以迫切需要一个科学化人性化的管理系统来满足这方面的需求。
在这里插入图片描述

在这里插入图片描述
此时如果有一个系统,能满足我们这些需求

1、记录文件的一切修改行为。
2、能够将文件回溯到某个被记录的修改任意时间点的状态,甚至将整个项目都回退到过去某个时间点的状态。
3、在用户编辑文件的同时记录何人、何时在何处做了何种改变。
4、比较不同版本文件的变化细节,查询何人在何处做了何种修改,达到查出问题根源的目的。
5、满足不同用户或开发者跨区域对同一个文件或者项目进行编辑协同工作的效果。

二、 SVN&Git

2.1 集中式版本控制系统

如何让在不同系统上的开发者协同工作? 于是集中式版本控制系统(Centralized Version Control Systems,简称 CVCS)应运而生。 这类系统,诸如 CVS、Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
在这里插入图片描述
在这里插入图片描述
集中式版本控制系统的优缺点:

优点: 1、操作简单易上手、易用性高。 相对于CVS来说,每个项目成员都可以在一定程度上了解到其他项目成员的工作。

2、项目库管理员可以掌控项目组每个开发者的权限

缺点
1、版本库存放在中央服务器,首先需要从中央服务器获取最新版本,中央服务器如果发生单点故障宕机了,那么谁都无法提交更新,也就无法协同工作。

2、如果中心数据库的磁盘发生了损坏且没有进行过实时备份,将会导致丢失所有数据,包括项目的更新历史,只剩下每个人各自机器上保留的单独快照。

3、当想要协同工作提交代码时,如果项目组成员碰巧刚刚在同一分支更新他们的工作,可能会发生冲突导致你的操作可能无法完成。

4、集中式版本控制要求客户端必须先与服务器同步代码,然后才能创建新版代码,具有限制性。

2.2 集中式版本控制系统-SVN

subversion 官网
Github SVN 源码

SVN
Apache Subversion 通常被缩写成 SVN,是一个开放源代码的版本控制系统,Subversion 在 2000 年由
CollabNet Inc 开发,现在发展成为 Apache 软件基金会的一个项目,同样是一个丰富的开发者和用户社区的一部分。

SVN相对于的RCS、CVS,采用了分支管理系统,它的设计目标就是取代CVS。互联网上免费的版本控制服务多基于Subversion。

Subversion 使用情况
虽然在 2006年 时 Subversion 的使用族群仍然远少于传统的 CVS,但已经有许多开放源码团体决定将 CVS 转换为 Subversion。已经转换使用 Subversion 的包括了 FreeBSD、Apache Software Foundation、KDE、GNOME、GCC、Python、Samba、Mono 以及许多团体。有许多的团队换用 Subversion 是因为 Trac 所提供的专案管理环境。除此之外,一些自由软件开发的协作网如SourceForge除了提供 CVS 外,现在也提供专案开发者使用 Subversion 作为源码管理系统, JavaForge、Google Code以及 BountySource 则以 Subversion 作为官方的源码管理系统。

2.3 分布式版本控制系统

分布式版本控制系统(Distributed Version Control System, DVCS)中,客户端(开发者)每次不只是提取最新版本的文件快照, 而是把代码仓库完整的历史操作记录完整的复制克隆下来。这样就能解决集中式版本控制系统无法解决的在中央服务器单点故障等情况下丢失历史记录和数据的问题。如果发生了故障,只要客户端(开发者)将下载好的项目文件,同步到远程仓库即可。
在这里插入图片描述

2.4 分布式版本控制系统-Git

提到Git,就一定要提到一个人,林纳斯·本纳第克特·托瓦兹Linus Benedict Torvalds),就是Linux内核的发明人及该计划的合作者在这里插入图片描述

Git如何诞生的?
同生活中的许多伟大事物一样,Git 诞生于一个极富纷争大举创新的年代。 Linux 内核开源项目有着为数众多的参与者。 绝大多数的Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。 到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统BitKeeper 来管理和维护代码。 到了 2005 年,开发 BitKeeper的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。 这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用BitKeeper时的经验教训,开发出自己的版本系统。 他们对新的系统制订了若干目标:

速度
简单的设计
对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
完全分布式
• 有能力高效管理类似 Linux内核一样的超大规模项目(速度和数据量)
自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。
它的速度飞快, 极其适合管理大项目,有着令人难以置信的非线性分支管理系统(参见 Git 分支)。

Git是一个免费的开源分布式版本控制系统,旨在以快速高效的方式处理从小型到超大型项目的所有内容。
Git易于学习,性能快如闪电。它超越了像Subversion、CVS、Perforce和ClearCase这样的配置管理工具,具有廉价的本地分支方便的staging区域多个工作流等特性。

Git 是分布式版本控制系统,这意味着项目的本地克隆完整的版本控制存储库。 通过这些功能齐全的本地存储库,无论脱机还是远程都能轻松工作。 开发人员在本地提交工作,然后将存储库的副本与服务器上的副本同步。 这种范例不同于集中式版本控制,集中式版本控制要求客户端必须先与服务器同步代码,即需要服务器端软件的支持然后才能创建新版代码。

经过近二十年的发展,Git目前已经成为最先进、最主流的免费、开源的分布式控制系统。

Git官网
在这里插入图片描述
在这里插入图片描述

2.5 Git与SVN的区别

在这里插入图片描述
Git的优势
1、直接记录快照、而非差异比较(SVN为基于差异的版本控制)
2、近乎所有操作都是本地执行(不需要外联到服务器去获取历史)
3、Git保证完整性(Git中所有的数据在存储前计算校验和,以校验和来引用,意味着无法在Git不知道的情况更改任何文件内容目录内容;如果你在传送过程中损坏文件丢失信息,Git会就可以发现。Git用以计算校验和的机制叫做SHA-1散列 )
4、Git一般只添加数据,Git几乎不会执行任何可能导致文件不可恢复的操作。你执行的Git操作,几乎只往Git数据库里添加数据。
Git的缺点:
1、Git复杂概念多,对新手不太友好,没有SVN易用性高。
2、Git学习周期长,深入学习需要多实践,但掌握后,就能感受到它的强大之处。

三、官方站点一览

subversion 官网
Git官网
About Version Control
about
microsoft-什么是 Git?

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

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

相关文章

15-4-线程-线程同步之互斥量加锁解锁

一、概念 互斥量:互斥量(mutex)从本质上来说是一把锁,在访问共享资源前对加互斥量(实现加锁),在访问完成后释放互斥量(实现解锁)。 加锁后,任何其他试图再次…

SpringMvc拦截器使用介绍

文章目录 拦截器拦截器基本介绍拦截器快速入门拦截器参数 拦截器 拦截器基本介绍 拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行 作用: 在指定的方法调用前后执行预先设定的代码 阻…

详解MySQL索引

目录 1.什么是索引 2.使用索引的优缺点 3.索引的数据结构 4.索引的分类 5.索引的操作 6.复合索引的数据结构 1.什么是索引 当我们想在一本书里面找到具体的章节的时候,最快的办法是去查看这本书的目录,索引就类似于数据库中存储的数据的目录&…

LeetCode-1033. 移动石子直到连续

题目链接 LeetCode-1033. 移动石子直到连续 题目描述 题解 题解一(Java) 作者:仲景 这题目挺难懂的,得画画图才能更好的理解 这也是LeetCode的尿性,习惯了,非得整这种别人看不懂的鸟语 你可以这样理解&a…

总结839

每日必复习:(微习惯,5分钟) 回顾了第二讲数列极限,明天加大回顾力度,复习才是王道。 学习内容: 暴力英语:艾玛沃特森在联合关于女性平等的演讲,背诵并默写了前四段&…

windows/linux文件传输

windows系统下文件传输-FTP python安装pyftpdlib模块 pip install pyftpdlib 这里可能会出现报错,自己看着更换源解决 然后运行python,在2121端口监听 python -m pyftpdlib 然后我们可以使用windows命令行进行操作,自己可以去看下相关文…

Linux配置静态IP地址

个人PC访问虚拟机的基本原理: PC借助虚拟网卡访问虚拟机(VMWare)的网关,再通过网关连接虚拟机。因此,PC的虚拟网卡,虚拟机的网关,虚拟机,三者的IP地址应在同一网段。(默…

【方法】如何在PPT文稿中插入Word表格?

我们在做PPT文稿的时候,经常需要导入其他文档的内容,比如想在PPT里插入Word表格,要怎么操作呢?方法很容易,来看看下面的具体操作步骤吧。 首先,打开PPT后,点击菜单【插入】列表中的【对象】。 …

nodejs+vue+java农村信息化服务平台

用户的登录模块:用户登录本系统,对个人的信息等进行查询,操作可使用的功能。 用户注册模块:游客用户可以进行用户注册,系统会反馈是否注册成功。 添加管理员模块:向本系统中添加更多的管理人员,…

【Linux】基础IO_文件描述符

环境:centos7.6,腾讯云服务器Linux文章都放在了专栏:【Linux】欢迎支持订阅 相关文章推荐: 【Linux】冯.诺依曼体系结构与操作系统 【C/进阶】如何对文件进行读写(含二进制)操作? 【Linux】基…

【机器学习】第四节:监督学习算法对比评估

作者🕵️‍♂️:让机器理解语言か 专栏🎇:机器学习sklearn 描述🎨:本专栏主要分享博主学习机器学习的笔记和一些心得体会。 寄语💓:🐾没有白走的路,每一步都算…

C语言:指针【进阶】习题练习及分析讲解

目录 一维数组关于strlen函数和sizeof()的练习整型数组字符数组指针 二维数组笔试题 前言: 前面我们刚刚学完了C语言:指针详解【进阶】的知识,这部分的知识还是要重在理解加实践,今天我这里就分享一些有关C语言指针方面的练习供大…

优雅编程,从空格、空行、缩进和注释开始

很多初学者的代码其实都不够“漂亮”,那是因为没有养成好的编码习惯。本篇博客以C语言为例,总结一些好习惯。其实,很多习惯都是肌肉记忆,举个例子:请你写一个程序,输入2个整数并输出它们的和。有些朋友可能…

使用eclipse创建一个图书管理系统(1)-----搭建架构

目录 思维导图: 图书管理系统的创建: 第一步:搭建框架-------使用者 第二步:搭建框架------被使用者 第三步:操作方法 第四步:main函数 思维导图: 前言: 昨天学了一下使用Java…

演出剧院门票售票预约小程序开发制作功能介绍

基于微信小程序的票务预约小程序,广泛适用于演出主办方、剧院、艺术中心、活动中心售票、景区门票售票、儿童游乐园售票、会务签到、展会售票签到、教育培训报名预约、健身预约功能。 多场景售票支持: 售票软件支持多种场景的售票,支持选座、…

python3+Scrapy:爬虫框架问题合集 【参考转载大佬文章 + 自己解决方法】

1、发送请求403报错排查 参考链接链接: 使用scrapy做爬虫遇到的一些坑:爬虫使用scrapy爬取网页返回403错误大全以及解决方案 参考链接链接: 使用scrapy做爬虫遇到的一些坑:网站常用的反爬虫策略,如何机智的躲过反爬虫Crawled (403) 参考链接…

javaEE 初阶 — Cookie 与 Session

文章目录 Cookie 的四个问题Cookie 的典型应用Cookie 与 Session 的区别代码示例体现两者的关联关系1. 设计思路2. 编写前端登录页面3 编写 LoginServlet 处理登录请求3.1 服务器是如何组织会话的 4. 编写 IndexServlet 生成主页4.1 抓包观察交互过程 Cookie 的四个问题 1、Coo…

Doris(25):Doris的函数—Bitmap函数

1 BITMAP_AND(BITMAP lhs, BITMAP rhs) 计算两个输入bitmap的交集,返回新的bitmap. select bitmap_count(bitmap_and(to_bitmap(1), to_bitmap(2))) cnt; select bitmap_count(bitmap_and(to_bitmap(1), to_bitmap(1))) cnt; 2 BITMAP_CONTAINS(BITMAP bitmap, BIGINT input…

VGAM | tobit模型

专注系列化、高质量的R语言教程 推文索引 | 联系小编 | 付费合集 本篇来介绍tobit模型,使用的工具包是VGAM。 library(VGAM) 目录如下: 1 Tobit分布2 tobit模型3 运行模型 例1例2例34 其他 1 Tobit分布 tobit模型主要应用于因变量存在删失的情况。以正态…

交换机-Exchanges

交换机 Exchanges 概念 RabbitMQ 消息传递模型的核心思想是: 生产者生产的消息从不会直接发送到队列。实际上,通常生产者甚至都不知道这些消息传递传递到了哪些队列中。相反,生产者只能将消息发送到交换机(exchange),交换机工作的内容非常简…