所有讓你直接看最新源碼的文章都是在扯淡峦椰,你應(yīng)該從“某個(gè)版本”開始閱讀代碼趣席。
之前想過(guò)寫這篇文章,但是沒(méi)有想到一個(gè)好的內(nèi)容根穷、好的突破點(diǎn)姜骡。在《GitHub 漫游指南》指南里,我們提到過(guò)《如何在GitHub“尋找靈感(fork)”》屿良,但是并不是關(guān)于閱讀源碼的好文章圈澈。
我們并不建議所有的讀者都直接看最新的代碼,正確的姿勢(shì)應(yīng)該是:
- clone某個(gè)項(xiàng)目的代碼到本地
- 查看這個(gè)項(xiàng)目的release列表
- 找到一個(gè)看得懂的release版本尘惧,如1.0或者更早的版本
- 讀懂上一個(gè)版本的代碼
- 向后閱讀大版本的源碼
- 讀最新的源碼
最好的在這個(gè)過(guò)程中康栈,可以自己造輪子來(lái)實(shí)現(xiàn)一遍。
閱讀過(guò)程
在我閱讀的前端庫(kù)褥伴、Python后臺(tái)庫(kù)的過(guò)程中,我們都是以造輪子為目的展開的漾狼。所以在最開始的時(shí)候重慢,我需要一個(gè)可以工作,并且擁有我想要的功能的版本逊躁。
緊接著似踱,我就可以開始去實(shí)踐這個(gè)版本中的一些功能,并理解他們是怎么工作的。再用git
大法展開之前修改的內(nèi)容核芽,可以使用IDE自帶的Diff工具:
或者類似于SourceTree
這樣的工具囚戚,來(lái)查看修改的內(nèi)容。
在我們理解了基本的核心功能后轧简,我們就可以向后查看大驰坊、中版本的更新內(nèi)容了。
開始之前哮独,我們希望大家對(duì)版本號(hào)管理有一些基本的認(rèn)識(shí)拳芙。
版本號(hào)管理
我最早閱讀的開始軟件是Linux,而下面則是Linux的Release過(guò)程:
表格源自一本書叫《Linux內(nèi)核0.11(0.95)完全注釋》皮璧,簡(jiǎn)單地再介紹一下:
- 版本0.00是一個(gè)hello,world程序
- 版本0.01包含了可以工作的代碼
- 版本0.11是基本可以正常的版本
這里就要扯到《GNU 風(fēng)格的版本號(hào)管理策略》:
1.項(xiàng)目初版本時(shí)舟扎,版本號(hào)可以為 0.1 或 0.1.0, 也可以為 1.0 或 1.0.0,如果你為人很低調(diào)悴务,我想你會(huì)選擇那個(gè)主版本號(hào)為 0 的方式睹限;
2.當(dāng)項(xiàng)目在進(jìn)行了局部修改或 bug 修正時(shí),主版本號(hào)和子版本號(hào)都不變讯檐,修正版本號(hào)加 1羡疗;
- 當(dāng)項(xiàng)目在原有的基礎(chǔ)上增加了部分功能時(shí),主版本號(hào)不變裂垦,子版本號(hào)加 1顺囊,修正版本號(hào)復(fù)位為 0,因而可以被忽略掉蕉拢;
4.當(dāng)項(xiàng)目在進(jìn)行了重大修改或局部修正累積較多特碳,而導(dǎo)致項(xiàng)目整體發(fā)生全局變化時(shí),主版本號(hào)加 1晕换;
5.另外午乓,編譯版本號(hào)一般是編譯器在編譯過(guò)程中自動(dòng)生成的,我們只定義其格式闸准,并不進(jìn)行人為控制益愈。
因此,我們可以得到幾個(gè)簡(jiǎn)單的結(jié)論:
- 我們需要閱讀最早的有核心代碼的版本
- 我們需要閱讀1.0版本的Release
- 往后每一次大的Release我們都需要了解一下
示例
以Flask為例:
一夷家、先Clone它蒸其。
二、從Release頁(yè)面找到它的早期版本:
三库快、 從上面拿到它的提交號(hào)8605cc3
摸袁,然后checkout到這次提交,查看功能义屏。在這個(gè)版本里靠汁,一共有六百多行代碼
還是有點(diǎn)長(zhǎng)
四蜂大、我們可以找到它的最早版本:
然后查看它的flask.py
文件,只有簡(jiǎn)單的三百多行蝶怔,并且還包含一系列注釋:
五奶浦、接著,再回過(guò)頭去閱讀
- 0.1版本
- 踢星。澳叉。。
- 最新的0.10.1版本