不點(diǎn)藍(lán)字關(guān)注,我們哪來故事?
2022 年 2 月 15 日,GitHub 通過推特平臺廣播了一則消息:「我們的朋友 HTTPie 最近不小心將自己設(shè)為了私密,丟掉了所有的 Star。如果你仍然愛它,就給它一顆 Star 作為情人節(jié)禮物。」

10 年攢下的 Star 突然清零?這是怎么回事?昨天,項(xiàng)目作者 Jakub Rozto?il 在博客中正式回應(yīng)了這一事件。十年獲得 5.4W Star 的開源項(xiàng)目HTTPie 項(xiàng)目的第一次提交還是在十年之前。
可能一些人對這個項(xiàng)目不夠熟悉,這是一個開源 CLI HTTP 客戶端。團(tuán)隊(duì)從頭開始構(gòu)建了它,以使終端的 API 交互盡可能人性化。

HTTPie(發(fā)音為 aitch-tee-tee-pie)可用于測試、調(diào)試以及通常與 API 和 HTTP 服務(wù)器交互。http&https 命令允許創(chuàng)建和發(fā)送任意 HTTP 請求。它們使用簡單自然的語法,并提供格式化和彩色輸出。從 2012 年 2 月 25 日在哥本哈根的第一次公開提交之后,項(xiàng)目作者 Jakub Rozto?il 就一直在 GitHub 平臺上托管該項(xiàng)目。他自己也是 GitHub 平臺的忠實(shí)粉絲。
這些年來,HTTPie 逐漸成長為平臺上最受歡迎的 API 工具,收獲了 5.4W 個 Star 和 1k 的關(guān)注。
HTTPie 項(xiàng)目受益于 GitHub 的「social coding」功能,同時,GitHub 也受益于自身平臺上托管的這個受歡迎的項(xiàng)目。在過去十年中,可能有數(shù)百萬開發(fā)人員訪問了 HTTPie 項(xiàng)目的 GitHub 頁面。但在幾周前,HTTPie 項(xiàng)目積累的 5.4W Star 一夜清零。在這篇博客中,項(xiàng)目作者 Jakub Rozto?il 詳細(xì)介紹了事情經(jīng)過:我不小心將項(xiàng)目的 repo 設(shè)為了私有,GitHub 級聯(lián)刪除了我們花費(fèi) 10 年時間建立的社區(qū)。如果你是一位下游維護(hù)者,或者曾經(jīng)關(guān)注過 HTTPie 以獲取通知,你可能需要重新關(guān)注一下 repo。Star 也是一樣,如果過去十年里你曾為該項(xiàng)目加注 Star,那現(xiàn)在 HTTPie 應(yīng)該已不再是你的 Star 項(xiàng)目列表中的一員。將 repo 設(shè)為私有會永久刪除所有關(guān)注者和 Star,這是 GitHub 的一個特性。我知道這一點(diǎn),而且我顯然無意 httpie/httpie 隱藏。
最直接的原因是我認(rèn)為我在另一個 repo 中——一個沒有內(nèi)容且 0 Star 的項(xiàng)目。我真正打算做的是隱藏 HTTPie 組織的配置文件 README,這是我在一周前創(chuàng)建但沒有機(jī)會填充的。讓我走上錯誤道路的是一個完全不相關(guān)的操作:我剛剛在我的個人資料上做了同樣的事情(即隱藏了一個空的 README),將其設(shè)為 jakubroztocil/jakubroztocil 私有。在配置文件和存儲庫方面,GitHub 的概念模型會將用戶和組織視為非常相似的實(shí)體。在這種情況下,由于我只是想在我們組織的個人資料上重復(fù)相同的操作,我的大腦切換到了「自動駕駛」模式。目前我沒有意識到這個包含配置文件 README 的特殊 repo 的命名存在不一致問題,并且它對于用戶和組織有所不同:name/name 與 name/.github.這就是為什么我一開始要隱藏 httpie/httpie,而不是 httpie/.github,并且沒有意識到我的錯誤。確實(shí)有一個確認(rèn)框,旨在阻止像我這樣的情況下的用戶做一些愚蠢的事情。它會告訴你「你將永遠(yuǎn)失去這個存儲庫的所有 Star 和關(guān)注者」。問題在于,對于沒有提交和任何 Star 的 repo ,它的提示框和具有 10 年歷史及 55k Star 與關(guān)注者的 repo 是完全一樣的。它說的是:「警告:這是一個潛在的破壞性行動。」
套用一句話:一個盒子告訴你「你要拆房子!如果里面有人,他們都會死。」但如果你混淆了地址并認(rèn)為你正準(zhǔn)備拆的是一個空房子,那后果將不堪設(shè)想。實(shí)際上,此處的對話應(yīng)該更加結(jié)合上下文,并且再次解釋一下情況,比如說「你即將殺死 55000 人。」那肯定會讓我停下來。當(dāng)我回到組織頁面時,你可以想象我的困惑,我不僅仍然可以看到空的 README,同時我們最受歡迎的 repo 找不到了。片刻之后,我意識到發(fā)生了什么事。所以我回到 repo 的設(shè)置來翻轉(zhuǎn)開關(guān)。但 GitHub 不允許我這樣做——整整半個小時。
為什么這么久呢?因?yàn)檫@是 GitHub 級聯(lián)刪除我們 10 年來的 Star 和關(guān)注者所花費(fèi)的時間。而且我沒有辦法阻止這個過程。我所能做的就是開始發(fā)消息給 GitHub 尋求支持,刷新頁面并等待 Star 數(shù)量達(dá)到零,然后才能再次將其公開。GitHub 顯然有備份,并且有恢復(fù) repo 的方法。GitHub 團(tuán)隊(duì)曾經(jīng)自己不小心將 GitHub 桌面應(yīng)用程序 repo 設(shè)為私有,然后他們在幾個小時內(nèi)就恢復(fù)了一切,當(dāng)時前 GitHub CEO 給出的解釋是:
然而,在我們的事件中,他們拒絕這樣做,理由是操作具有不良影響,并且會消耗資源成本。我們甚至提出為所需的任何資源提供經(jīng)濟(jì)補(bǔ)償,但遺憾的是,他們還是拒絕了。相對于在 GitHub 上恢復(fù)最受歡迎的社區(qū)項(xiàng)目之一以外,他們還有其他優(yōu)先事項(xiàng)。因此,GitHub 恢復(fù)存儲庫的前提是他們自己的項(xiàng)目,而不是社區(qū)項(xiàng)目。這次危機(jī)讓我們得到了很多教訓(xùn),這里主要分享 3 點(diǎn):教訓(xùn) 1:UI/UX 設(shè)計(jì)彈出的對話框要清晰明了,減少抽象的文字說明。以一種不需要用戶思索的方式設(shè)計(jì)確認(rèn)對話框。當(dāng)用戶要刪除或損壞某些文件時,不要用抽象的語言描述,以免讓用戶難以了解即將發(fā)生的狀況,特別是會造成級聯(lián)刪除的行為。例如,以下是我們在 HTTPie for Desktop 中的處理方式:
對話框需要反映操作影響的嚴(yán)重性。當(dāng)完全沒有額外影響時,對話框應(yīng)該盡量簡單,否則會浪費(fèi)用戶有限的注意力,從而降低用戶的敏感度:
教訓(xùn) 2:數(shù)據(jù)庫設(shè)計(jì)使用軟刪除(soft-delete)。人非圣賢,孰能無過。人們在刪除操作上可能會犯錯誤,因此應(yīng)該盡可能使用軟刪除,延遲硬刪除(hard-delete)操作。
教訓(xùn) 3:與 GitHub 的關(guān)系這是我們的人為錯誤,GitHub 明確表示他們沒有法律義務(wù)幫助我們。我們長達(dá)十年的互惠互利關(guān)系是根據(jù) GitHub 的服務(wù)條款確定的,除此之外,再無其他。畢竟,GitHub 有過有爭議的行為,這些行為違背了開源社區(qū)的精神。微軟(已收購 GitHub)盡管擁有一定的開源精神,但并不總是有很好的聲譽(yù)。我們希望 GitHub / 微軟 有朝一日能夠改變他們的態(tài)度,并恢復(fù)我們的項(xiàng)目社區(qū),他們擁有實(shí)現(xiàn)這一點(diǎn)的所有數(shù)據(jù)和方法。我們也希望他們改進(jìn) UI 和數(shù)據(jù)庫設(shè)計(jì),以防止這種情況未來發(fā)生在其他團(tuán)隊(duì)身上。最后,盡管我們的 GitHub star 量化為虛無,但 HTTPie 現(xiàn)在發(fā)展得非常好,從最初作為一個副項(xiàng)目到現(xiàn)在變成了一家公司,我們的團(tuán)隊(duì)正在將 HTTPie 發(fā)展成一個 API 開發(fā)平臺。用于 Web 和桌面的 HTTPie 私有測試版收到了很好的反饋,我們迫不及待地想在接下來的幾周內(nèi)公開發(fā)布它。歡迎加入我的知識星球,一起劍指大廠,不斷升級加薪。劍指大廠,一個指導(dǎo)程序員進(jìn)入大公司/獨(dú)角獸的精品社群,致力于分享職場達(dá)人的專業(yè)打法,包括「學(xué)習(xí)路線+簡歷模板+實(shí)習(xí)避坑+筆試面試+試用轉(zhuǎn)正+升職加薪+跳槽技巧+副業(yè)外快」。劍指大廠不僅是一個獲取信息的圈子,還是一個規(guī)劃職業(yè)的導(dǎo)師。已在知識星球,更新如下(點(diǎn)擊下圖了解更多):
若覺得文章對你有幫助,隨手轉(zhuǎn)發(fā)分享,也是我們繼續(xù)更新的動力。
?「C語言中文網(wǎng)」官方公眾號,關(guān)注手機(jī)閱讀教程??