骆言 2022-10-05 21:20 采纳率: 91.7%
浏览 2929
已结题

请问 Git 如何的诞生背景如何?

什么是“版本控制”?我为什么要关心它呢? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。在 GIT CODE 中,我们对保存着软件源代码的文件作版本控制,但实际上,你可以对任何类型的文件进行版本控制。

我想看一看 Git 诞生的故事

  • 写回答

3条回答 默认 最新

  • zhangrelay 机器人领域优质创作者 2022-10-06 10:36
    关注

    引用如下:
    git 从开始到诞生,Torvalds 这位天才只用了 10 天的时间。

    极具前瞻性的三个诉求
    在确定开发 git 前,Torvalds 对市面上多个版本管理方案进行过评估,但现有的方案都不令人满意,最终决定开发自己的版本管理系统。

    Torvalds 认为,健壮的版本管理系统应当有以下三个特性:

    • 可靠性(reliable)
    • 高效(high-performance)
    • 分布式(distributed)
      这三个特性,被视为 git 的核心灵魂所在,深远的影响了 git 及其他 SCM 的后续发展。

    可靠性(reliable)

    数据的存入取出必须是安全的、一致的。所有行为都要校验,仓库任何部分不允许篡改。在今天看来,这并不是什么高明之举,但在当时,绝大多数的 SCM 都做不到这一点。那时候,人们依赖保护中央服务器来保证数据不被篡改,而不是依靠版本管理自身的设计来保证。

    Torvalds 认为,应当通过算法来保证,仓库任何一个字节被篡改,都能够被发现。

    高效(high-performance)

    这是 git 极具优势的特性。Torvalds 认为,版本管理的所有操作都必须在毫秒级内完成:这是对 svn 最大的批评。查日志、拉分支、合并、提交这些高频率操作,必须能够在本地能够完成,而不是等待服务器响应。这一特性直接决定了 git 能够被广泛传播。

    作为对比,svn 每一步操作都在等待数据包成为了人们口中的诟病。

    分布式(distributed)

    以往人们在备份资料上花了很大精力:传统的中央服务器,资料受损是灾难性事故。现在,所有人电脑中的 git 仓库都是一致的,每个人的仓库都是完整的副本。完整的副本意味着可以在本地做所有事;允许相互同步促使它被设计成为自带数据校验。

    最终,Torvalds 围绕着这三个诉求,用 10 天的时间创造出 git。

    事实证明,这些想法是极具前瞻性的。git 在解决原有诉求的前提下,还解决了长久以来的一些痛点。

    刺破痛点
    从工程的角度看,许多 SCM 方案都有各自的杀手锏,例如 BitKeeper 在超大型项目的优越性能,以及 SVN 精准的权限控制。但在实际生产方面,则有所欠缺。

    代码政治

    大多数 SCM 都存在权限争议问题,特别是在超大型项目上。开发者最常见的发问是,你凭啥不给我权限?在有些企业,代码管理被沦为政治工具,权限则被视为权利的象征。分布式的 git 则不存在此问题,如果你拥有该仓库,你就拥有了所有的权限。

    提交粒度

    如果「提交代码」容易对他人造成影响,那么就没人愿意频繁提交。在开发阶段,由于代码始终无法完美(例如,包含测试代码、代风格错误、还有待改动),以至于总是无法提交代码(强行提交将造成他人无法运行)。导致的结果是,大量改动堆积,最后一次性提交。这样的后果是,单个 commit 提交粒度极大,还会导致合并、code review、乃至回滚的困难。而 git 的 commit 操作不需要推送到远程,因此随意提交也不会不影响他人。

    创建新分支

    在许多 SCM,创建新分支是「重量级操作」,并且所有人可见。在许多项目看来,创建新分支是重大行为。因为创建新分支影响重大,因此开发人员不会随意创建新分支。这直接导致了同一个分支上需要承载大量的业务。而由于 git 的操作是本地化的,你可以随意创建分支(毫秒级操作)并行多个子迭代,迭代完毕且合并分支后,再删除分支标签。最后推送到远程服务器,他人并不知晓你创建过什么分支。

    开源,共筑,影响力
    革新总是艰难的。当 Linux 开发团队决定使用 git 作为版本管理的时候,社区反对声音并不小,理由是 git 太难用了。实际上,确实是这样的,Torvalds 也承认了这点。

    技术服众还不够。Torvalds 的领导力是惊人的,他发动社区力量让大家投入到 git 的开发当中。随着开发的深入,git 命令变得更简单,更易用。另一方面,开源有助于集思广益,并且避免腐败。

    后来的事,大家都知道了。git 逐渐被大众接受,为 git 提供托管服务的 github 于 2008 年 2 月上线,从此 git 点亮万家灯火。

    Git由Linus开发,是由C语言实现的分布式版本控制系统。

    集中式VS分布式
    集中式:版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。
    集中式的缺点:必须联网才能工作,在网速限制的地方效率低。
    分布式:分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库。这样,工作的时候,就不需要联网了。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
    分布式的优点:和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。
    此外,分布式版本控制系统中通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月15日
  • 已采纳回答 10月7日
  • 专家修改了标签 10月6日
  • 创建了问题 10月5日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效