Git 学习笔记 | Git 的简介与历史

Git 学习笔记 | Git 的简介与历史

  • [Git 学习笔记 | Git 的简介与历史](#Git 学习笔记 | Git 的简介与历史)
    • [Git 简介](#Git 简介)
    • [Git 历史](#Git 历史)

Git 学习笔记 | Git 的简介与历史

Git 简介

Git是分布式版本控制系统(Distributed Version Control System,简称 DVCS),分为两种类型的仓库:本地仓库和远程仓库。

工作流程如下:

  1. 从远程仓库中克隆或拉取代码到本地仓库(clone/pull)
  2. 从本地进行代码修改
  3. 在提交前先将代码提交到暂存区
  4. 提交到本地仓库。本地仓库中保存修改的各个历史版本
  5. 修改完成后,需要和团队成员共享代码时,将代码push到远程仓库

所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。

不会因为服务器损坏或者网络问题,造成不能工作的情况。

Git 流程图:

Git 是目前世界上最先进的分布式版本控制系统。

Git 历史

同生活中的许多伟大事物一样,Git 诞生于一个极富纷争大举创新的年代。

很多人都知道,Linus 在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。

Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢?

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

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

不过,到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。而授权的前提是:Linux 社区的人不能开发具有相同功能的竞争产品。

另一方面,BitKeeper不是开源的。显然与Linux 的开源精神不相符,所以linux 社区的很多人抱怨,不愿意使用。

Andrew Tridgell (Samba 开发服务的创造者) 非常不满,偷偷违反了和 BitKeeper 的协议,反编译 BitKeeper 的源代码,开发了个爬虫,然后爬取信息被人发现了。BitKeeper 公司的领导非常不满意,然后开始发布消息说,(下个版本)不再为Linux 提供免费的服务。

Linus 本人就出面协调(几周或者几个月),但是不管用,没办法。

Linus 本人花了 10 天的时间发明了 Git,一个月之内,Linux系统的源码已经由Git管理了。

Git 出来以后毕竟是一个人做的,开始并不好用(刚开始只能用勉强可以用来形容),还是很多人抱怨,发展了很多年都没有干过其他软件。

直到 2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,从此 git 迎来了飞速发展,当下git 已经成为了最流行的版本控制工具。

相关推荐
彧azz1 小时前
算法设计与分析:贪心与动态规划
数据结构·学习·算法·贪心算法·动态规划
一条小小yu3 小时前
基于数据库唯一索引 + 过期时间的分布式锁
学习
传奇开心果编程3 小时前
【ArkUI 练中学】第15课:UI 界面设计与实战
学习·ui·华为·harmonyos
zjxtxdy4 小时前
SPI通信协议
笔记·单片机
玄芯散人5 小时前
【筑基·058】Git协作工作流:冲突解决和PR流程
git·版本控制·团队协作
传奇开心果编程5 小时前
【springboot基础语法学与练】第 1 课:从零开始
java·spring boot·后端·学习
扶风ff5 小时前
练题簿小程序:家庭在线练题,课后复习更简单
学习·小程序
传奇开心果编程5 小时前
【Flutter入门练中学】第2课:布局系统
学习·flutter·ui
彧azz6 小时前
Linux 网络编程学习总结
linux·网络·笔记·学习·面试
一尘之中6 小时前
指挥控制中心与指控系统:概念、应用、厂商与DDS技术全景
学习·架构·ai写作