世界上最流行的软件,抛弃了Git

2023年 8月 5日 53.5k 0

世界上使用最流行的软件是什么?

Windows ? Android?  Office ?

都不对!

答案是 SQLite !一个嵌入式数据库。

你可能没听说过它,但是它就在你身边的:

每一台智能手机中(Android 和iOS),Mac电脑,Windows 10电脑。

每一个主要的浏览器中(Chrome, Firefox, Safari)

大部分的机顶盒当中

每个PHP和Python安装目录中

很多流行的桌面应用(微信、QQ、 DropBox、 Skype、 iMessage、WhatsApp、 Adobe Acrobat Reader....)

......

不信的话可以在电脑中搜索一下 “*.db”,看看能发现多少个。

SQLite的发明人是Richard Hipp。

图片图片

Richard不但写了SQLite,他还写了另外一个版本控制软件Fossil。

有趣的是SQLite项目使用Fossil来做版本控制。

而Fossil又使用SQLite来存储内容。

有点儿鸡生蛋,蛋生鸡的感觉。

我们不仅要问:现在Git已经是源码管理系统中最流行的软件,SQLite为什么不使用Git,而要另起炉灶呢?

Richard写了一篇文章《Why SQLite Does Not Use Git》,解释了其中的原因,几个要点如下:

1. Git的思维模型过于复杂

Git的复杂性分散了人们对于正在开发软件的注意力,Git用户需要牢记一下所有内容

(1)The working directory

(2)The "index" or staging area

(3)The local head

(4)The local copy of the remote head

(5)The actual remote head

Git提供了很多命令和选项在所有这些位置之间进行文件移动和比较。

相比而言,Fossil只需要考虑他们的工作目录和正在处理的check-in,干扰减少了60%,每个开发人员的大脑周期是有限的,Fossil需要的大脑周期更少,从而可以释放智力资源来专注正在开发的软件。

正如一个使用过Git和Fossil的用户在HackerNews上缩写的:

Fossil让我安心,因为我拥有一切......通过一个命令同步到服务器...... 我从来没有通过Git获得过这种安心。 

2. Git没有提供良好的态势感知能力

当Richard想看看SQLite最近发生了什么情况时,他可以使用Fossil的Timeline功能,在一个屏幕上看到所有更改的摘要,只需几下点击,就可以看到细节信息,甚至用手机也可以,非常方便。

GitHub和GitLab没有提供类似的功能,最接近的是“Network graph”,但是它渲染起来很慢(除非事先有缓存),并且不提供那么多的细节,移动设备上效果更不好。

GitHub的commit视图不错,有详细信息,速度快,可是每次只能提供显示一个分支,无法轻松知道所有最近的更改。 

很多Git用户会使用第三方的Git图形查看器,它们需要单独安装和管理,并且很多是特定平台的(例如仅适用于Mac的GitUp),想用这些图形查看器,首先还得同步本地存储库,很麻烦。 

3. Git 不跟踪历史分支名称

Git保留了commit序列完整的DAG,但branch tag是本地信息,它不会同步,不会保留,这使得查看历史分支变得非常乏味。

Richard用一个分支的例子对比了Git和Fossil,Fossil可以清楚地显示Branch开始的位置,什么时候合并回主干,GitHub则不行,除非使用第三方的工具。

图片图片

4. Git需要更多的管理支持

Git是个复杂的软件,建立Git服务器并不容易,所以大多数开发人员使用第三方服务如GitHub和GitLab,从而引入额外的依赖项。

相比之下,Fossil是个独立的二进制软件,包含GitHub,GitLab的核心功能,建立一个服务器非常高效,只需几分钟时间就拥有一个带有wiki、错误跟踪和论坛的社区服务器,为用户提供打包下载,登录管理等功能。

Fossil对硬件要求很低,可以在 5 美元/月的 VPS 或 Raspberry Pi 上正常运行。

5.Git提供了糟糕的用户体验

下面这个xkcd 的漫画虽然夸张,但是却切中要害。

说实话,很少人质疑Git提供的用户界面不理想,很多底层的实现都展示在了和用户交互的接口中,交互接口设计很糟糕,有个网站甚至专门生成假的Git帮助手册:https://git-man-page-generator.lokaltog.net/#ZWR1Y2F0ZSQkaGVhZA==

Richard的吐槽挺犀利的,但我能感同身受的只有第一点和最后一点:模型复杂,用户体验差。 

我刚开始接触Git时也有很强的抵触情绪:项目组就这么几个人,为什么要用分布式的系统?搞什么本地仓库,远程仓库,还得记住各种各样烦人的命令...... 

集中式管理SVN它不香吗? 

用得多了,发现有两个好处:

(1) 在本地有个副本,可以自由地修改,并且能提交到本地的代码仓库中,先把版本管理起来,这是很爽的一件事情。等到合适的时候再push,什么事情都不耽误。

(2) Git的分支实在是强,创建分支不像SVN那样得复制目录,很轻量级,新特性开发都可以用分支来搞。

当然,代价就是记住,用熟那些复杂的命令。

Richard是个挺有意思的人,他很喜欢造自己的小工具,喜欢自给自足。

除了SQLite和Fossil之外,他还开发了一个Web服务器althttpd,这是个小巧,简单,安全,低资源占用的Web服务器,现在sqlite.org网站就架在它之上,每天处理50万个Http请求,传输200G的数据。

Richard还开发过一个叫CVSTrac的Bug跟踪系统,也是使用SQLite来存储相关数据。 

所以,Richard对Git的吐槽有为自己产品宣传的成分(至少这篇文章在HackerNews中引发了三次大讨论,赚足了眼球,吸尽了流量),但也真的是自己使用觉得觉得不爽的地方。

SQLite选择了Fossil,那是因为对Richard来说,Fossil足够了,并且在某些功能上更好,更能满足自己的需求。 

就像他使用自家的althttpd,而不是Apache一样。

但是对于更多的程序员来说,Git和GitHub的生态系统更有效。

这个世界应该是百花齐放的。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论