【Git】git 从入门到实战系列(一)—— Git 的诞生,Linus 如何在 14 天内编写出 Git?
<> 博客简介:Linux、rtos系统,arm、stm32等芯片,嵌入式高级工程师、面试官、架构师,日常技术干货、个人总结、职场经验分享
<> 公众号:嵌入式技术部落
<> 系列专栏:C/C++、Linux、rtos、嵌入式开发、流媒体、数据结构、网络协议、开源库、CMake、Makefile、架构设计模式等
本系列系统性总结和梳理git相关内容。对开发者而言,了解 git 产生的背景和设计理念,有助于更好地理解和使用 git;对管理者而言,则能更好地对企业项目开展有效的管理。
1969 年,Linus Torvalds 生于芬兰赫尔辛基市。父亲 Nils Torvalds 毕业于赫尔辛基大学,是一名活跃的共产主义者及电台记者。母亲 Anna Torvalds 同样毕业于赫尔辛基大学,也是一名记者。有趣的是,他的祖父奥 Ole Torvalds 也是一名记者。除此之外,Torvalds 的外祖父 Leo Tornqvist 是芬兰第一批统计学教授。优秀的家庭背景为 Torvalds 奠定了接受良好教育的基础。Torvalds 在 11 岁时,应其外祖父要求用 BASIC 语言编写一些统计学方面的小程序。大众普遍认为,这是他编程经历之始。
1988年,Torvalds 进入赫尔辛基大学计算机科学系就读。在兴趣的趋势下,Torvalds 创造并发布了自制的操作系统,并将其命名为 Linux。1996 年硕士毕业并移居美国,后拥有美国国籍。2003 年,为专心维护 Linux 从全职公司辞职。
在2002年以前,Linux内核的版本控制一直是Linus自己。具体流程如下:开发人员将tarballs和补丁提交给几个Linus信任的助手。助手们通过审核后,将补丁发送给Linus。最后,Linus亲手将它们合并到自己的源代码树中,然后发布。
当然,Linus本人并不是一个“完美的版本控制服务”。1998年,知名程序员Larry McVoy通过Linux内核邮件列表首次提出了BitKeeper的想法,他写道:“很明显,我们的领袖[Linus]目前有点超负荷,补丁可能会丢失。”
尽管如今看来,这种手动的工作流程也未免太原始了,但在当时,Linus认为这种工作流程比其他选择(主要是CVS)更好。
Linus认为CVS的核心问题在于其集中化的性质。由于Linux开发人员有数百名之多,所以Linus认为每个人都拥有自己独立的代码库副本至关重要,因为只有这样他们才能在自己的分支上开发。这不仅对线下的工作有帮助,而且对内部管理也很有帮助。每位开发人员都可以自由地向自己的代码库提交任何代码,而且他们有机会说服社区他们的变更是有价值的。这样可以防止拥有提交权限的贡献者成为唯一的代码库的守门人。
最终Linus选择了商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。后来,Linus对BitKeeper表示了极大的赞赏,认为BitKeeper改变了他的看法,而Git的灵感也来源于此。
安定团结的大好局面在2005年被打破了,原因是Linux内核开发人员Andrew Tridgell违反了许可,并实施了逆向工程。他能够提取BitKeeper代码而不需要遵循BitKeeper许可(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。
Linus充当了三个月的调停,但最终未能达成和解。合作未能成功,这对Linux内核的开发产生了重大影响。因为必须找到一套工具来代替BitKeeper的功能。2005年4月6日Linus通过邮件列表公布了双方合作失败的消息,但实际上他已经展开了紧张的工作。就在2.6.12-rc2发布的三天前,他停止了Linux内核的工作,并全力寻找BitKeeper的替代方案。
Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!即2005年4月17日,他发了一封邮件:“第一次真正的内核Git合并!”牛B是怎么定义的呢?大家可以体会一下。
Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。
历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。
Linus目前受聘于开放源代码开发实验室(OSDL,Open Source Development Labs),全身心的开发Linux内核。尽管这人看上去毫不起眼,比如Linus曾在他的自传《乐者为王》(Just for Fun)中自嘲:“我是一个长相丑陋的孩子,凡是见过我小时候照片的人,都会觉得我的相貌酷似河狸。再想象一下我不修边幅的衣着,以及一个托瓦兹家族祖祖辈辈遗传下来的大鼻子,这样,在你脑海中我的模样就形成了。”但这丝毫也影响不了林纳斯对整个商业社会的巨大价值—Linux代表着网络时代新形式的开放知识产权形态,这将从根基上颠覆以Windows为代表的封闭式软件产权的传统商业模式。更重要的是,这样的颠覆早已悄悄的出现在了商业社会的各个角落。
相关文章:
【Git】git 从入门到实战系列(一)—— Git 的诞生,Linus 如何在 14 天内编写出 Git?
<> 博客简介:Linux、rtos系统,arm、stm32等芯片,嵌入式高级工程师、面试官、架构师,日常技术干货、个人总结、职场经验分享 <> 公众号:嵌入式技术部落 <> 系列专栏:C/C、Linux、rt…...
com.microsoft.sqlserve r:sqljdbc4:jar:4.0 was not found in......如何解决?
这个错误提示说 com.microsoft.sqlserver:sqljdbc4:jar:4.0 这个依赖无法从 Maven 中央仓库(https://repo.maven.apache.org/maven2)下载,导致项目无法构建。以下是解决该问题的几种方法: 方法一:手动安装依赖 下载 J…...
数据集——鸢尾花介绍和使用
文章目录 一、鸢尾花数据集内容二、使用中常转换DataFrame 一、鸢尾花数据集内容 from sklearn import svm, datasets # 鸢尾花数据 iris datasets.load_iris() print(iris.data) X iris.data[:, :2] # 为便于绘图仅选择2个特征 y iris.target它包含了150个样本,…...
ElasticSearch第4篇(亿级中文数据量 ElasticSearch与Sphinx建索引速度、查询速度、并发性能、实测对比)
经过实测:1.09亿的数据量进行中文检索。ElasticSearch单机的检索性能在0.005~5.6秒之间,此检索速度可满足95%的业务场景(注意:每条ES文档平均65个汉字,数据源取自几千本小说,大部分文档在15~300个汉字之间&…...
过期知识:thinkphp5 使用migrate给现有的数据表新增表字段
个人开发网站记录, 这个文章主要是个以后健忘的我看的. 我在搞我的画笔审核 , 发现数据表的画笔数据在审核驳回的时候还是软删除好一些, 免得用户找不到之前上传的画笔数据, 后期也可以考虑重新显示给用户,让用户可以修改画笔信息重新提交审核. 这个时候想起了…...
前端和Postman调用同一个接口,拿到的数据不一样
1、表现 联调一个List接口,Postman自测得到的ID和前端调用得到的ID,结果不一样。前者结果: 后者结果: 同一份代码、同一个数据库,出现这种错误,大概率是类型转换时出问题了,但检查代码发现&…...
1000W长连接,如何建立和维护?千万用户IM 架构设计
1000W长连接,如何建立和维护?千万用户IM 架构设计 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的架构类/设计类…...
vulhub:Apache解析漏洞CVE-2017-15715
Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个换行解析漏洞,在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。 #启动靶机 cd /Vulnhub/vulhub-mast…...
开发中可能会面临的真实问题及处理流程
接口返回数据不符合预期 问题描述:接口返回的数据结构或字段名称与前端预期不符,导致页面展示错误。 处理流程: 检查接口文档:确保前后端约定的接口文档是最新的,并且描述一致。 前后端沟通:与后端开发人员…...
个性化你的生产力工具:待办事项App定制指南
国内外主流的10款待办事项软件对比:PingCode、Worktile、滴答清单、番茄ToDo、Teambition、Todoist、Microsoft To Do、TickTick、Any.do、Trello。 在寻找合适的待办事项软件时,你是否感到选择众多、难以决断?一个好的待办事项工具可以大大提…...
本地部署持续集成工具Jenkins并配置公网地址实现远程自动化构建
文章目录 前言1. 安装Jenkins2. 局域网访问Jenkins3. 安装 cpolar内网穿透软件4. 配置Jenkins公网访问地址5. 公网远程访问Jenkins6. 固定公网地址 前言 本文主要介绍如何在Linux CentOS 7中安装Jenkins并结合cpolar内网穿透工具实现远程访问管理本地部署的Jenkins服务. Jenk…...
【数据结构】了解哈希表,解决哈希冲突,用Java模拟实现哈希桶
哈希表的概念 哈希表(Hash Table)是一种高效的数据结构,用于实现快速的数据存储和检索。它通过将数据映射到一个数组的索引位置,从而能够在平均情况下实现O(1)的时间复杂度进行查找、插入和删除操作。 哈希表的基本概念包括以下…...
qt5 ui转python或C++文件
firstMainWin.ui转换成.py文件,输入以下命令即可 pyuic5 -o firstMainWin.py firstMainwin. ui python -m PyQt5.uic.pyuic Img_ui.ui -o Img_ui.py firstMainWin.ui转换成c文件,输入以下命令即可 uic firstMainWin.ui -o hello.h ##用python转 新建…...
scp命令详解
scp(secure copy)是一个基于 SSH 的命令行工具,用于在不同计算机之间安全地复制文件和目录。scp 提供了在本地和远程主机之间传输文件的简单方法,并且支持加密和认证,确保文件传输的安全性。 基本用法 从本地复制到远…...
算法小白的进阶之路(力扣1~5)
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…...
昇思25天学习打卡营第22天|MindSporeK基于Diffusion扩散模型学习- Diffusion与其他生成模型
Diffusion扩散模型 本文基于Hugging Face:The Annotated Diffusion Model一文翻译迁移而来,同时参考了由浅入深了解Diffusion Model一文。 本教程在Jupyter Notebook上成功运行。如您下载本文档为Python文件,执行Python文件时,请…...
【C++版本】protobuf与gRPC
文章目录 一、Protobuf二、安装以及使用protoc三、gRPC1.Q&A2.学习版rpc3.gRPC压缩算法 参考 一、Protobuf Google Protocol Buffers(protobuf)是一种语言中立、平台中立的序列化协议,旨在高效地将结构化数据进行序列化和反序列化。它主要…...
要抓住国际白银现货行情 以下这几点需要注意
国际白银现货行情最近表现不甚稳定,在七月上旬出现了比较强势的上涨,但随后出现强势的下跌,跌破了30关口。如果我们要抓住国际白银现货行情,那么以下这几点我们就需要注意。 一,建立交易计划,并且按计划执行…...
【计算机毕业设计】720图书馆智能选座系统
🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板ÿ…...
java面向对象重点总结
文章目录 java面向对象重点总结类与实例构造方法方法重载属性与修饰符封装继承多态重构抽象类接口抽象类和接口的区别:集合泛型 java面向对象重点总结 对象是一个自包含的实体,用一组可识别的特性和行为来标识。 面向对象编程,英文叫Object…...
1321:【例6.3】删数问题(Noip1994)
大模拟 #include<bits/stdc.h> using namespace std; int s,len; char c[245]; int main(){cin>>c>>s;//读入高精度数和待删除的数lenstrlen(c);//1、寻找第一个下降序列的转折点,删去//2、如果找不到,意味着全部递增,删…...
使用 Python 中的 ELSER 进行Serverless 语义搜索:探索夏季奥运会历史
作者:来自 Elastic Essodjolo Kahanam 本博客介绍如何使用语义搜索以自然语言表达形式从 Elasticsearch 索引中获取信息。我们将创建一个无服务器 Elasticsearch 项目,将之前的奥运会数据集加载到索引中,使用推理处理器和 ELSER 模型生成推理…...
[HITCON 2017]SSRFme 1
目录 代码审计 符号shell_exec() 函数:GET " . escapeshellarg($_GET["url"]):pathinfo($_GET["filename"]basename() 题目解析 代码审计 118.182.186.90 <?phpif (isset($_SERVER[HTTP_X_FORWARDED_FOR])) {$http_x_headers explod…...
看不见的硝烟:中国网络安全三十年沉浮史
2022 年 5 月 16 日,俄罗斯黑客组织 KillNet 向包括美国、英国、德国在内 10 个国家的政府正式 “宣战”。 2022 年 4 月 28 日,一则消息刷屏,北京健康宝在使用高峰期间,遭受到境外网络攻击。北京健康宝保障团队进行了及时有效应…...
3.7.物体检测算法
物体检测算法 1.R-CNN 首先使用启发式搜索算法来选择锚框,使用预训练模型对每个锚框抽取特征,训练一个SVM来对类别分类,最后训练一个线性回归模型来预测边缘框偏移。 R-CNN比较早,所以使用的是SVM 1.1 兴趣区域(RoI)池化…...
Spring源码解析(27)之AOP的核心对象创建过程2
一、前言 我们在上一节中已经介绍了Advisor的创建过程,当时我们创建的logUtil这bean,他在 resolveBeforeInstantiation返回的是null,那么就会继续往下执行doCreateBean方法。 二、源码分析 protected Object doCreateBean(String beanName,…...
【题解】【数学】—— [CSP-J 2023] 小苹果
【题解】【数学】—— [CSP-J 2023] 小苹果 [CSP-J 2023] 小苹果题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 1.题意分析2.代码 [CSP-J 2023] 小苹果 前置知识:数学分组思想,整体思想。 [CSP-J 2023] 小苹果 题目描述 小 Y 的桌子上…...
python实现微信聊天图片DAT文件还原
完整代码如下: from glob import glob import os from tqdm import tqdmdef get_sign(dat_r):signatures [(0x89, 0x50, 0x4e), (0x47, 0x49, 0x46), (0xff, 0xd8, 0xff)]mats [".png", ".gif", ".jpg"]for now in dat_r:for j, x…...
栈与队列——1.有效的括号
力扣题目链接 给定一个只包括 (,),{,},[,] 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效…...
C语言家教记录(二)
C语言家教记录(二) 导语输入输出表达式算数运算符示例程序赋值运算符简单赋值复合赋值 总结和复习 导语 本次授课内容如下:输入输出、表达式 有时间则讲解选择语句 辅助教材为 《C语言程序设计现代方法(第2版)》 输…...
网站开发工程师是web吗/优化seo设置
很早之前做过一个,白板没界面,20秒暴力刷新,数据库每个team一个n列的对应n个题目的标记项,只能对单个比赛暴力把全部user_id导入单独的气球表(也就是cid1000用这个表的话,cid1001就不能用)。 后…...
网站下载的视频怎么变成本地视频/月饼营销软文
题目:如何实现一个高效的单向链表逆序输出 思路:对链表的逆序输出,需要3个指针分别指向pre cur 和cur的next,对第一次遍历,把当前节点的next指向上一个节点,而需要用指针保存下一个节点(默认head的data无数…...
我想克隆个网站 怎么做/女生学网络营销这个专业好吗
安装MySQLdb pip install MySQLdb安装不成功请使用离线安装方式,pypi:https://pypi.org/project/mysqlclient/#files 选择对应的Python版本,下载.whl文件,并离线安装 pip install mysqlclient-2.0.3-cp37-cp37m-win_amd64.whl操…...
网站建设小程序定制开发/seo站内优化教程
神经网络的基本单元是神经元,它是包括输入、连接、计算和输出功能的模型(MP)。其中,每个连接都对应一个权值,神经元在接受上一层神经元的不同输入信号后,通过对应的连接进行信号的加权传递,再利…...
电子商务网站建设与管理答案/网络营销公司有哪些公司
P1前言在我看来,爬取视频可以分为简单、中等以及困难三种级别。简单级别:网页直接给出了mp4格式的视频链接,所以可以像下载图片一样发个请求就可以轻松获得中等级别:就是网页给出的是ts文件,所有的ts文件会存储在一个m…...
给别人做网站收8000贵不贵/正规排名网站推广公司
在使用linux的过程中有时候会忘记root用户的密码(尤其是进行交接而文档内容不全的时候),这个时候我们就可以进入单用户模式来重置root用户密码。下面来讲解重置root密码的方式,也可以说是破解root密码的方式。系统环境:…...