大家好,我是何三,80后老猿,独立开发者
在当今软件开发领域,Git几乎已成为版本控制系统的代名词,从个人项目到企业级开发,Git的身影无处不在。然而,你可能不知道的是,世界上使用最广泛的软件——SQLite嵌入式数据库——却选择了一个名为Fossil的版本控制系统,而非行业标准的Git。这一现象引发了技术社区的广泛讨论:为什么SQLite要"逆流而行"?Git真的完美无缺吗?今天,我们就来深入探讨这个技术热点,看看SQLite创始人Richard Hipp的选择给我们带来了哪些启示。
谁是世界最流行的软件?
当我们谈论"世界上最流行的软件"时,大多数人会想到Windows、Android或Office这些耳熟能详的名字。但事实上,真正的冠军是一个你可能从未直接使用过,却无处不在的软件——SQLite嵌入式数据库。
SQLite的普及程度令人震惊:
- 几乎每台智能手机(Android和iOS)
- 每台Mac电脑和Windows 10电脑
- 所有主流浏览器(Chrome、Firefox、Safari)
- 大多数机顶盒
- PHP和Python的安装目录
- 微信、QQ、DropBox、Skype等流行桌面应用
正如一位技术博主所说:"不信的话可以在电脑中搜索一下'*.db',看看能发现多少个SQLite数据库文件"。这种无处不在的存在,使SQLite当之无愧地成为世界上部署最广泛的软件。
SQLite与Fossil的"鸡生蛋,蛋生鸡"关系
SQLite的创始人Richard Hipp不仅开发了这个改变世界的数据库,还创造了一个名为Fossil的版本控制系统。有趣的是,SQLite项目使用Fossil来做版本控制,而Fossil又使用SQLite来存储内容,形成了一种奇妙的"鸡生蛋,蛋生鸡"的关系。
Richard Hipp专门写了一篇文章《Why SQLite Does Not Use Git》,详细解释了他选择Fossil而非Git的原因。这些观点不仅反映了一个资深开发者对工具选择的思考,也揭示了Git在设计上的一些固有缺陷。
Git的五大"罪状":SQLite创始人的犀利批评
1. 思维模型过于复杂
Git的复杂性堪称"版本控制瑞士军刀",但其学习曲线也异常陡峭。Richard指出,Git用户需要同时牢记五个概念:
- 工作目录(Working directory)
- 暂存区(Index或staging area)
- 本地头(Local head)
- 远程头的本地副本(Local copy of the remote head)
- 实际的远程头(Actual remote head)
"Git提供了很多命令和选项在所有这些位置之间进行文件移动和比较",而Fossil只需要开发者关注工作目录和正在处理的check-in,"干扰减少了60%"。正如一位同时使用过Git和Fossil的开发者在HackerNews上所说:"Fossil让我安心,因为我拥有一切...通过一个命令同步到服务器...我从来没有通过Git获得过这种安心"。
2. 态势感知能力不足
当Richard想了解SQLite项目的最新动态时,Fossil的Timeline功能让他"在一个屏幕上看到所有更改的摘要,只需几下点击,就可以看到细节信息,甚至用手机也可以,非常方便"。
相比之下,GitHub和GitLab最接近的功能是"Network graph",但"渲染起来很慢(除非事先有缓存),并且不提供那么多的细节,移动设备上效果更不好"。GitHub的commit视图虽然信息详细且速度快,但"每次只能显示一个分支,无法轻松知道所有最近的更改"。
3. 不跟踪历史分支名称
Git保留了commit序列完整的DAG(有向无环图),但branch tag是本地信息,它不会同步,也不会保留。"这使得查看历史分支变得非常乏味"。Richard通过一个分支的例子对比了Git和Fossil:Fossil可以清楚地显示分支开始的位置和合并回主干的时间,而GitHub则无法做到这一点,除非使用第三方工具。
4. 管理支持要求高
"Git是个复杂的软件,建立Git服务器并不容易",这导致大多数开发者依赖GitHub、GitLab等第三方服务,从而"引入额外的依赖项"。
相比之下,Fossil是一个独立的二进制软件,包含GitHub和GitLab的核心功能。"建立一个服务器非常高效,只需几分钟时间就拥有一个带有wiki、错误跟踪和论坛的社区服务器"。Fossil对硬件要求极低,"可以在5美元/月的VPS或Raspberry Pi上正常运行"。
5. 用户体验糟糕
那个著名的xkcd漫画虽然夸张,却切中要害地描述了Git的学习曲线。Richard犀利地指出:"很少人质疑Git提供的用户界面不理想,很多底层的实现都展示在了和用户交互的接口中,交互接口设计很糟糕"。甚至有一个网站专门生成假的Git帮助手册来讽刺这一点。
Git的不可替代优势
尽管Richard对Git的批评十分犀利,但客观地说,Git之所以能成为行业标准,也有其不可替代的优势:
-
本地副本的自由度:Git允许开发者在本地自由修改并提交到本地仓库,"先把版本管理起来,等到合适的时候再push,什么事情都不耽误"。
-
强大的分支功能:"Git的分支实在是强,创建分支不像SVN那样得复制目录,很轻量级,新特性开发都可以用分支来搞"。
-
丰富的生态系统:GitHub、GitLab等平台构建了庞大的开发者社区和工具链,这是Fossil难以比拟的。
正如技术博主"码农翻身"所说:"Richard对Git的吐槽有为自己产品宣传的成分...但也真的是自己使用觉得不爽的地方。SQLite选择了Fossil,那是因为对Richard来说,Fossil足够了,并且在某些功能上更好,更能满足自己的需求。就像他使用自家的althttpd,而不是Apache一样。但是对于更多的程序员来说,Git和GitHub的生态系统更有效。这个世界应该是百花齐放的"。
工具选择的哲学
SQLite选择Fossil而非Git的案例,给我们带来了关于工具选择的深刻启示:
-
没有放之四海而皆准的工具:即使是像Git这样几乎成为行业标准的工具,也不一定适合所有项目。SQLite的特殊性(单人主导开发、强调简单性)使Fossil成为更合适的选择。
-
认知负荷是关键考量:开发者的大脑周期是有限的,工具应该帮助开发者专注于核心业务逻辑,而不是消耗在工具本身的使用上。
-
自给自足的价值:Richard Hipp开发了SQLite、Fossil、althttpd等多个工具,形成了自洽的工具链。这种"自给自足"的哲学在某些场景下能带来独特的优势。
-
简单即美:Fossil的设计哲学强调简单性和一体化,这与SQLite的"小即是美"理念高度一致。
百花齐放的技术生态
SQLite放弃Git而选择Fossil的故事,不是要否定Git的价值,而是提醒我们:在技术选型时,应该根据项目特性和团队需求做出理性选择,而不是盲目追随行业潮流。
Git凭借其强大的功能和丰富的生态系统,无疑仍是大多数项目的首选。但对于某些特定场景——如小型项目、单人开发或强调简单性的项目——Fossil等替代方案可能提供更优的解决方案。
正如Richard Hipp用althttpd而非Apache服务sqlite.org网站一样(每天处理50万个Http请求,传输200G数据),有时最简单的工具就是最合适的工具。
在技术的世界里,没有绝对的"最好",只有"最适合"。SQLite的选择告诉我们:了解自己的需求,保持开放的心态,才能在纷繁复杂的工具海洋中找到最适合自己的那一款。
你对Git和Fossil有什么看法?欢迎在评论区分享你的观点!