日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

Git 15 周年:当年的分道扬镳,成就了今天的开源传奇

發(fā)布時(shí)間:2023/11/22 综合教程 44 生活家
生活随笔 收集整理的這篇文章主要介紹了 Git 15 周年:当年的分道扬镳,成就了今天的开源传奇 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  4 月 7 日,全球最主流的版本控制系統(tǒng) —— Git迎來(lái)15 周年紀(jì)念日,項(xiàng)目主要維護(hù)者 Junio C Hamano(濱野純) 先生發(fā)郵件慶祝了這一日子。

  我們知道,所有的軟件項(xiàng)目在整個(gè)生命周期中都要經(jīng)過(guò)不斷迭代,在一個(gè)又一個(gè)的新版本中完善自己的功能。開(kāi)源項(xiàng)目更是如此,一個(gè)健康的開(kāi)源項(xiàng)目,在“集市”模式下接受來(lái)自世界各地開(kāi)發(fā)者提交的代碼 ,版本更新頻率通常更高。如何管理項(xiàng)目的版本更新,是項(xiàng)目開(kāi)發(fā)、維護(hù)過(guò)程中必須考慮的問(wèn)題。

  什么是版本控制工具

  在開(kāi)始我們的故事之前,首先讓我們來(lái)認(rèn)識(shí)一下版本控制工具。版本控制的核心述求是歷史紀(jì)錄查詢(xún)和實(shí)現(xiàn)協(xié)同開(kāi)發(fā)。以開(kāi)源項(xiàng)目來(lái)說(shuō),在多人協(xié)作開(kāi)發(fā)的模式下,每個(gè)人都向服務(wù)器提交自己的文件,就可能存在著代碼被多次修改、替換的風(fēng)險(xiǎn),但是版本控制能夠在每次更新操作后進(jìn)行相應(yīng)的記錄。一旦發(fā)生誤操作,開(kāi)發(fā)者能夠根據(jù)服務(wù)器中的版本記錄,將項(xiàng)目恢復(fù)到出現(xiàn)問(wèn)題之前的其他版本。因此,借助版本控制技術(shù),軟件開(kāi)發(fā)項(xiàng)目可以被分割為若干模塊,每個(gè)模塊并行地進(jìn)行開(kāi)發(fā)工作,從而有效地提高了整體編程效率。

  主流的版本控制工具主要分為兩種,即集中式與分布式。

  集中式版本控制工具類(lèi)似網(wǎng)吧的管理系統(tǒng),所有項(xiàng)目的歷史文件與版本信息都存放在服務(wù)器上,而客戶(hù)端就只能保存當(dāng)前的狀態(tài)信息。這種所有雞蛋裝在一個(gè)籃子里的模式缺點(diǎn)非常明顯,一旦服務(wù)器損壞,項(xiàng)目所有的歷史數(shù)據(jù)就會(huì)丟失,因此需要大規(guī)模的安全備份。比較有代表性的集中式版本控制工具有 SVN、VSS、CVS 等。

  分布式版本控制工具最大的特性就是任意客戶(hù)端之間可以互聯(lián),當(dāng)然也包括服務(wù)器。這樣一來(lái),開(kāi)發(fā)者的客戶(hù)端本地也存有項(xiàng)目完整的歷史記錄,當(dāng)有一個(gè)客戶(hù)端損壞時(shí),可以從另一個(gè)沒(méi)有被損壞的客戶(hù)端中提取歷史數(shù)據(jù),恢復(fù)之前的狀態(tài)。在協(xié)同開(kāi)發(fā)時(shí),各個(gè)客戶(hù)端之間可以很好地同步開(kāi)發(fā)進(jìn)度,避免出現(xiàn)重復(fù)提交等問(wèn)題。

  毫無(wú)疑問(wèn),分布式版本控制工具擁有更為先進(jìn)的理念,其誕生的過(guò)程也是得益于網(wǎng)絡(luò)通信技術(shù)的普及與開(kāi)源社區(qū)的蓬勃發(fā)展。

  天才的幫手

  我們的故事始于 1991 年,大名鼎鼎的開(kāi)源項(xiàng)目 Linux 問(wèn)世,作者 Linus Torvalds 一躍成為 IT 界的大明星,被人們稱(chēng)為天才。由于當(dāng)時(shí) Linux 社區(qū)仍采用傳統(tǒng)的集中式版本管理,開(kāi)發(fā)者提交的 patch 都匯集到 Linus 這里,讓他肩上的擔(dān)子很重。

  ( Linus Torvalds )

  在項(xiàng)目早期,Linus 以最原始的人力來(lái)完成 Linux 版本管理工作,包括逐條細(xì)看每個(gè) patch、手動(dòng)合并開(kāi)發(fā)者提交的代碼、更新版本歷史信息等。由于這段“痛苦”的經(jīng)歷,Linus 本人曾多次公開(kāi)吐槽 “代碼管理是計(jì)算機(jī)領(lǐng)域最無(wú)趣的事”……

  然而隨著社區(qū)的逐漸壯大,Linux 的系統(tǒng)變得越來(lái)越龐大,代碼越來(lái)越繁雜,繼續(xù)依靠手動(dòng)合并代碼顯然已經(jīng)不太現(xiàn)實(shí)。

  1999 年,一家名為 BitMover 的公司發(fā)布了一款收費(fèi)的分布式版本控制軟件 BitKeeper ,BitMover 的 CEO Larry 給 Linux 社區(qū)特別提供了一個(gè)可以免費(fèi)使用的版本,期望 BitKeeper 能幫助 Linus 免于陷入不斷加重的 Linux 內(nèi)核管理工作中,但條件是不能破解這款產(chǎn)品

  Linus 在使用 BitKeeper 之后不久就愛(ài)上了它,直言其是“ Best tool for the job ”。BitKeeper 讓每個(gè)開(kāi)發(fā)者都擁有自己的主副本( master copy ),完整的副本意味著可以在本地做所有事,而不是所有的 patch 只能提交到服務(wù)器(Linus)這里。于是,Linus 可以把一些 patch 的審查工作交給 Liunx 子系統(tǒng)的維護(hù)者們,對(duì)于比較值得信任的維護(hù)者甚至不需要他自己再審查一遍,而他只需要對(duì)一些自己不太信任的維護(hù)者 “重點(diǎn)關(guān)照” 即可。2002 年,Linux 內(nèi)核主線(xiàn)代碼就全面開(kāi)始使用 BitKeeper。

  盡管 BitKeeper 的出現(xiàn)賦予了 Linux 社區(qū)更好的協(xié)同開(kāi)發(fā)能力,讓 Linux 內(nèi)核的開(kāi)發(fā)效率成倍提高,但其閉源的特性仍然讓 Linus 在開(kāi)源界遭到了一些非議。開(kāi)源泰斗 RSM 就嚴(yán)厲批評(píng) Linus 不該使用一款非自由的軟件來(lái)管理世界上最大的開(kāi)源項(xiàng)目。這些負(fù)面的聲音也為之后 Linux 與 BitKeeper 的分道揚(yáng)鑣埋下了伏筆。

  分道揚(yáng)鑣

  事實(shí)證明,指望一個(gè)全球最活躍的開(kāi)源社區(qū)長(zhǎng)期使用一個(gè)閉源工具似乎不太切合實(shí)際,畢竟這里聚集了一批全世界最有能力的程序員。于是,社區(qū)內(nèi)開(kāi)始出現(xiàn)“需要一個(gè)類(lèi) BitKeeper 的開(kāi)源工具”的聲音,甚至有實(shí)干者已經(jīng)開(kāi)始著手實(shí)現(xiàn)這件事情。

  2005 年,Linus 本人所屬公司 OSDL 的老板 Andrew Morton 資助的一個(gè)項(xiàng)目組開(kāi)始對(duì) BitKeeper 協(xié)議進(jìn)行反向編譯,試圖破解 BitKeeper 以創(chuàng)造出一個(gè)類(lèi)似的開(kāi)源工具。BitMover 公司很快發(fā)現(xiàn)了這一動(dòng)作,Larry 表示這破壞了免費(fèi)版 BitKeeper 的許可協(xié)議,盡管這件事或許與 Linus 本人無(wú)關(guān),但確實(shí)嚴(yán)重影響了公司的利益,他們最終決定逐步停止對(duì)免費(fèi)版 BitKeeper 的支持,但會(huì)給 Linux 進(jìn)行工具迭代的時(shí)間。

  這樣的矛盾在早期的商業(yè)公司與開(kāi)源社區(qū)之間十分常見(jiàn),由于此時(shí)與開(kāi)源項(xiàng)目相關(guān)的商業(yè)模式并不成熟,很多像 BitMover 一樣的商業(yè)軟件公司選擇站在開(kāi)源社區(qū)的對(duì)立面,以保護(hù)自己賴(lài)以生存的傳統(tǒng)商業(yè)模式。這些軟件公司被業(yè)內(nèi)稱(chēng)為保守派,尤其是以微軟、Oracle、SAP 等為首的大型軟件開(kāi)發(fā)商,他們堅(jiān)持以付費(fèi)的原則提供專(zhuān)有企業(yè)軟件,憑借產(chǎn)品的技術(shù)壁壘收取高額的許可費(fèi)。這樣的商業(yè)模式不僅被追求開(kāi)放自由的開(kāi)源社區(qū)所唾棄,高昂的軟件采購(gòu)成本也讓很多企業(yè)的 IT 采購(gòu)人員頭疼不已。

  不過(guò),BitMover 的做法在當(dāng)時(shí)來(lái)看確實(shí)也無(wú)可厚非,他們正當(dāng)?shù)鼐S護(hù)了自己的合法權(quán)利,挽回了因產(chǎn)品被破解可能帶來(lái)的經(jīng)濟(jì)損失。但令他們?nèi)f萬(wàn)沒(méi)有想到的是,開(kāi)源社區(qū)強(qiáng)大的生產(chǎn)力可以成為他們發(fā)展的沃土,也能成為毀滅他們的武器。

  用開(kāi)源的方式創(chuàng)造 Git

  失去 BitKeeper 意味著 Linux 需要重新尋找一個(gè)分布式版本控制系統(tǒng),Linus 考察了當(dāng)時(shí)所有的系統(tǒng),卻沒(méi)有一個(gè)能夠讓他滿(mǎn)意。

  “ 于是他在郵件列表里發(fā)了一封郵件,說(shuō)自己寫(xiě)了一些代碼,準(zhǔn)備作為在找到更好的版本管理系統(tǒng)之前的過(guò)渡系統(tǒng)。我覺(jué)得這似乎是件挺有意思的事情,于是就把代碼下載了下來(lái),看了一下發(fā)現(xiàn)只有 1244 行。” 這是目前 Git 的主要維護(hù)者、Google 工程師 Junio C Hamano(濱野純)在一次采訪(fǎng)中的描述。

  是的,天才 Linus 只花了 10 天的時(shí)間,用 C 語(yǔ)言寫(xiě)了 1244 行代碼,這就是如今火遍全球的分布式版本控制系統(tǒng) Git 的雛形。Linus 把寫(xiě)好的代碼發(fā)到 Linux 社區(qū)的郵件列表里,并邀請(qǐng)社區(qū)里的開(kāi)發(fā)者一起來(lái)完善它。“ 在一周時(shí)間內(nèi)發(fā)生了很多事,不過(guò)歸納起來(lái)就是 Linux 的內(nèi)核開(kāi)發(fā)者們聽(tīng)說(shuō) Linus 要用個(gè)‘新玩意’來(lái)管理代碼,如果那個(gè)‘新玩意’太難用的話(huà)大家都痛苦,還不如一起想辦法把這個(gè)東西做好用點(diǎn)。” Hamano 就是收到郵件并首批參與 Git 項(xiàng)目的開(kāi)發(fā)者之一。

  據(jù) Hamano 回憶,當(dāng)時(shí) Linus 考察了市面上所有的版本控制系統(tǒng),沒(méi)有一款讓他滿(mǎn)意的原因是它們都沒(méi)有代碼合并(merge)功能。 “ 因?yàn)?Linus 只寫(xiě) C 和 Shell,而 merge 的邏輯實(shí)在太復(fù)雜,所以他多次發(fā)郵件到郵件列表,說(shuō)要是有人能夠用腳本語(yǔ)言實(shí)現(xiàn)一個(gè)就好了。不過(guò)誰(shuí)也沒(méi)有上鉤。就這么過(guò)了一個(gè)星期,一直關(guān)注郵件列表的我用 Perl 把 Linus 過(guò)去多次提到的 merge 算法實(shí)現(xiàn)并投到了郵件列表里。這是我第一次有一定規(guī)模地向開(kāi)源項(xiàng)目貢獻(xiàn)代碼。然而,盡管我詳細(xì)地寫(xiě)了將近 30 個(gè)測(cè)試用例以及各種分支條件下應(yīng)該怎么處理的表格,6 個(gè)小時(shí)以后 Linus 提交到 master 分支的卻是個(gè)截然不同的東西。據(jù)本人說(shuō)是想到了更好的辦法所以就這么著了。”

  雖然聽(tīng)起來(lái)有些任性,但 Linus 給出的新方案確實(shí)讓 Hamano 折服。

  對(duì)于 merge 功能,BitKeeper 的做法是在 work tree 里基本上只存放自己的文件,而 merge 不發(fā)生在這里。merge 時(shí)首先會(huì)創(chuàng)建一個(gè)臨時(shí)文件夾,在里面展開(kāi) merge 結(jié)果,發(fā)生沖突時(shí)就在里面解決,然后提交 commit 并在 work tree 里展開(kāi),這樣就算 merge 完成了。這個(gè)方法很好地解決了協(xié)同開(kāi)發(fā)常常遇到的代碼沖突問(wèn)題。類(lèi)似于把發(fā)生沖突的兩人關(guān)進(jìn)一個(gè)小黑屋,“決出勝負(fù)”后的勝利者再進(jìn)入 work tree 。

  而 Linus 決定取消這個(gè)臨時(shí)文件夾,直接在 work tree 上 merge 。具體來(lái)說(shuō),就是每次提交 commit 之前會(huì)生成記錄本次提交內(nèi)容的 index,而這個(gè) index 遵循“三步合并”原則,比如我們有一個(gè)共同的版本,你在這個(gè)版本的基礎(chǔ)上做了一些變更,我在這個(gè)版本的基礎(chǔ)上做了另一些變更,然后將這兩個(gè)差分 merge 起來(lái)。那么把原始版本、我修改的版本、你修改的版本分別作為 stage1,stage2,stage3 依次添加到 index 里,merge 就算完成了。例如最簡(jiǎn)單的情況,我和你都沒(méi)有做出變更,那么 merge 的結(jié)果就是沒(méi)有變更。如果我做了變更而你沒(méi)有,那么最后得到的就是我變更以后的代碼,反之亦然。另外還有一種特殊的情況,就是你和我都做了“相同”的變更。

  開(kāi)源本質(zhì)上就是大家一起做一個(gè)項(xiàng)目,互相 merge 的過(guò)程。Git 就是在這樣的模式下誕生并日趨完善,成長(zhǎng)為全球最主流的開(kāi)源版本控制系統(tǒng)。而 Linus 做的事情只是花 10 天時(shí)間寫(xiě)了 1244 行代碼,然后審查大家提交的 patch 。“雖然最早是我做了全部的編碼和設(shè)計(jì),但之后的維護(hù)都由 Hamano 來(lái)做,他把 Git 做得更接地氣,讓所有人都能使用。” Linus 曾在 Google 進(jìn)行的一次演講中毫不吝嗇地夸贊了自己的伙伴。

  (圖右為 Junio C Hamano)

  作為開(kāi)源項(xiàng)目的管理者,Linus 不僅是個(gè)智商超群的編程天才,他的管理情商也很高。在維護(hù)一個(gè)開(kāi)源項(xiàng)目時(shí),對(duì)別人說(shuō)“No”是家常便飯。當(dāng) Linus 拒絕別人的 commit 時(shí),他總會(huì)在回復(fù)中強(qiáng)調(diào)“拒絕這個(gè) commit 不是因?yàn)槟愕哪芰Σ恍校沁@個(gè) commit 不合適”,同時(shí)還會(huì)指出 commit 中的亮點(diǎn)并給予肯定,讓對(duì)方覺(jué)得自己的工作沒(méi)有白費(fèi),這樣就不會(huì)打擊貢獻(xiàn)者的熱情。“ 我那時(shí)候也是,Linus 對(duì)我說(shuō),雖然你的提交沒(méi)有采用,但測(cè)試用例還是能用的,針對(duì)現(xiàn)在的實(shí)現(xiàn)你稍微修正一下吧。” Hamano 回憶說(shuō)。

  在 Hamano 等人的協(xié)助下,Git 誕生近一個(gè)月后,Linux 系統(tǒng)的源碼就全部改用 Git 進(jìn)行版本管理,而其他的開(kāi)源項(xiàng)目社區(qū)也如獲至寶,Git 的名氣很快就在開(kāi)源界傳播開(kāi)來(lái)。

  截然不同的命運(yùn)

  2008 年,基于 Git 實(shí)現(xiàn)的代碼托管平臺(tái) GitHub 面世,從此 Git 更是享譽(yù)全球。有意思的是,GitHub 當(dāng)初并不是由 Git 社區(qū)的人做的,而是出自 Ruby 社區(qū)的開(kāi)發(fā)者之手,兩個(gè)社區(qū)在最初的關(guān)系還有些不太和睦,原因是 Git 社區(qū)的人對(duì)于 GitHub 那群人拿 Git 去做商業(yè)化感覺(jué)很不爽……當(dāng)然,這些都是老開(kāi)發(fā)者口中的陳年往事了。毫無(wú)疑問(wèn),GitHub 對(duì)于 Git 的普及做出了巨大的貢獻(xiàn)。Hamano 也表示:“ 有 GitHub 替我們做文檔以及用戶(hù)支持,何樂(lè)而不為呢。”

  和 Git 的飛速發(fā)展形成鮮明對(duì)比的是,與 Linux 分道揚(yáng)鑣后的 BitKeeper 每況愈下,盡管后者是世界上首個(gè)商用級(jí)的分布式版本控制工具,但在 Git 誕生之后,BitKeeper 的市場(chǎng)占有率斷崖式下滑,幾乎淪落到無(wú)人問(wèn)津的地步。Git 與 BitKeeper 的不同境遇可以說(shuō)是 21 世紀(jì)初軟件行業(yè)的縮影,傳統(tǒng)的軟件商業(yè)模式在開(kāi)源浪潮的席卷下迎來(lái)了前所未有的挑戰(zhàn)。

  當(dāng)然,挑戰(zhàn)往往伴隨著機(jī)遇。于是,也有一批人開(kāi)始反思傳統(tǒng)軟件商業(yè)模式的局限性,試圖尋找一種能夠適應(yīng)開(kāi)源的全新商業(yè)模式。很快,以 Red Hat、MySQL、SugarCRM 為代表的開(kāi)源行業(yè)公司開(kāi)始崛起,他們的商業(yè)模式是利用開(kāi)源項(xiàng)目來(lái)推出增值服務(wù),即免費(fèi)向用戶(hù)提供軟件基礎(chǔ)功能,而通過(guò)收費(fèi)的增值服務(wù)來(lái)獲取利益。

  比如 Red Hat 在 RHEL 推出的訂閱服務(wù),在用戶(hù)免費(fèi)使用這款企業(yè)級(jí) Linux 系統(tǒng)的前提下,他們可以通過(guò)訂閱,獲得每一版本產(chǎn)品一定時(shí)間內(nèi)的技術(shù)服務(wù)支持。這種支持包括但不限于系統(tǒng)升級(jí)、管理、維護(hù);安全性和技術(shù)認(rèn)證支持;其他硬件和軟件支持。此外,Red Hat 還通過(guò)積極地投身開(kāi)源社區(qū)為品牌贏得業(yè)內(nèi)認(rèn)可,從而促進(jìn)其他收費(fèi)產(chǎn)品的銷(xiāo)售。自 2001 年確立商業(yè)模式以來(lái),Red Hat 已經(jīng)實(shí)現(xiàn)連續(xù) 19 個(gè)自然年的營(yíng)收增長(zhǎng),創(chuàng)造了開(kāi)源界的商業(yè)傳奇。

  當(dāng) Red Hat 們利用開(kāi)源項(xiàng)目取得前所未有的成功之后,許多傳統(tǒng)軟件開(kāi)發(fā)商也開(kāi)始意識(shí)到,開(kāi)源已經(jīng)是無(wú)法阻擋的時(shí)代趨勢(shì)。2018 年,曾經(jīng)的“保守派”代表微軟收購(gòu) GitHub,進(jìn)一步布局開(kāi)源;2019 年,藍(lán)色巨人 IBM 斥資 340 億美元收購(gòu) Red Hat,完成公司歷史上最大規(guī)模的收購(gòu)……越來(lái)越多的軟件巨頭參與到了開(kāi)源社區(qū)的建設(shè)中,積極擁抱開(kāi)源。

  值得一提的是,2016 年,在 Git 誕生 11 年之后,曾經(jīng)與 Linux 短暫攜手的 BitKeeper 宣布開(kāi)源,只可惜為時(shí)已晚。

總結(jié)

以上是生活随笔為你收集整理的Git 15 周年:当年的分道扬镳,成就了今天的开源传奇的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。