世界上最流行的软件,抛弃了Git
The following article is from 码农翻身 Author liuxin
世界上使用最流行的软件是什么?
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的生态系统更有效。