世界上使用最流行的軟件是什么?
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的生態系統更有效。
這個世界應該是百花齊放的。
全文完,覺得不錯的點個贊或者在看吧!
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.