当前位置: 首页 > news >正文

Git简介与特点:从Linux到分布式版本控制的革命

Git的诞生:一个偶然的伟大创造

Git是目前世界上最先进的分布式版本控制系统(没有之一)。它的诞生与Linux操作系统的发展密不可分。

很多人都知道,Linus Torvalds在1991年创建了开源的Linux,从此Linux系统不断发展,已经成为最大的服务器系统软件。然而,Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢?

事实令人惊讶:在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!

为什么Linus不把Linux代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统吗?因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比CVS、SVN好用,但那是付费的,和Linux的开源精神不符。

到了2002年,Linux系统已经发展了十年,代码库之大让Linus很难继续通过手工方式管理了。社区的开发者们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitMover公司授权Linux社区免费使用这个系统。

然而,2005年,由于Linux社区有人试图破解BitKeeper的协议,BitMover公司收回了Linux社区的免费使用权。Linus没有选择道歉,而是花了两周时间自己用C写了一个分布式版本控制系统——这就是Git!一个月之内,Linux系统的源码已经由Git管理了!

Git迅速成为最流行的分布式版本控制系统,尤其是2008年GitHub网站上线后,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery、PHP、Ruby等等。

历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。

Git的核心特点

集中式VS分布式版本控制

集中式版本控制系统

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

这种系统最显而易见的缺点是中央服务器的单点故障。如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。要是中央服务器的磁盘发生故障,碰巧没做备份,或者备份不够及时,就会有丢失数据的风险。

分布式版本控制系统

分布式版本控制系统(Distributed Version Control System,简称DVCS)会把服务器上的代码仓库完整地镜像下来。这样每个人的电脑上都有一份完整的服务器代码仓库的镜像,任何一处协同工作用的服务器发生故障,事后都可以用个人电脑上的镜像恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。

版本存储方式的革命性差异

直接记录快照,而非差异比较

Git和其他版本控制系统的主要差别在于,Git只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异。这类系统(CVS、Subversion、Perforce、Bazaar等等)每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容。

Git并不保存这些前后变化的差异数据。实际上,Git更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git不会再次保存,而只对上次保存的快照作一链接。

 

近乎所有操作都是本地执行

在Git中的绝大多数操作都只需要访问本地文件和资源,不用连网。但如果用CVCS的话,差不多所有操作都需要连接网络。因为Git在本地磁盘上就保存着所有当前项目的历史更新,所以处理起来速度飞快。

举个例子,如果要浏览项目的历史更新摘要,Git不用跑到外面的服务器上去取数据回来,而直接从本地数据库读取后展示给你看。所以任何时候你都可以马上翻阅,无需等待。如果想要看当前版本的文件和一个月前的版本之间有何差异,Git会取出一个月前的快照和当前文件作一次差异运算,而不用请求远程服务器来做这件事。

用CVCS的话,没有网络或者断开VPN你就无法做任何事情。但用Git的话,就算你在飞机或者火车上,都可以非常愉快地频繁提交更新,等到了有网络的时候再上传到远程仓库。

Git的安装

Git支持Linux、Windows和Mac系统,安装Git非常简单,可以到Git官方网站直接下载安装程序。

以下是Git安装过程的截图示例:

结语

Git不仅仅是一个版本控制工具,它改变了开发者协作的方式,为开源社区注入了新的活力。从Linus两周的创造到一个全球开发者依赖的核心工具,Git的故事告诉我们:伟大的创新往往源于实际需求和对现状的不满。无论你是独立开发者还是团队一员,掌握Git都将极大提升你的开发效率和工作体验。

http://www.dtcms.com/a/284536.html

相关文章:

  • 找不到或无法加载主类 org.gradle.wrapper.GradleWrapperMain
  • Linux Swap区深度解析:为何禁用?何时需要?
  • 【Java EE初阶 --- 网络原理】网络编程
  • Vue3 + WebSocket
  • 基于现代R语言【Tidyverse、Tidymodel】的机器学习方法
  • 3.2 函数参数与返回值
  • .vscode 扩展配置
  • 浅析网络安全面临的主要威胁类型及对应防护措施
  • 【C++指南】C++ list容器完全解读(四):反向迭代器的巧妙实现
  • 如何做好DNA-SIP?
  • 【41】MFC入门到精通——MFC中 GetLBText()、GetWindowText()、SetWindowText区别
  • 扭蛋机小程序开发:开启线上娱乐新风尚
  • 分布式光伏发电系统中的“四可”指的是什么?
  • 教资科三【信息技术】— 学科知识: 第一章(信息技术基础)
  • 基于springboot+vue+mysql技术的实验室管理系统(源码+论文)
  • 044_设计模式入门(创建型 / 结构型 / 行为型)
  • 【解决方案】鸿蒙 / 矿鸿系统 Shell 无故退出问题(息屏导致)详解
  • Spatial Frequency Modulation for Semantic Segmentation。针对图像下采样造成信息丢失问题的解决思路
  • 深入理解 Spring Boot Starter 的生成机制
  • tcp/udp调试工具
  • Linux内核网络栈深度剖析:inet_connection_sock.c的服务器端套接字管理
  • LINUX例行性工作(计划任务)实验操作 ---at和crontab以及系统级别的计划任务
  • springboot跨域问题 和 401
  • 当下主流摄像头及其核心参数详解
  • 不同场景下git指令的搭配
  • pycharm回车、删除、方向键和快捷键等不能使用原因
  • TRAE Agent 在 SWE-bench Verified 上得分 75.2%,并已开源
  • opencv、torch、torchvision、tensorflow的区别
  • Linux717 SWAP扩容;逻辑卷条带化
  • 前端-HTML