源碼是惟一的真實git
加深對項目的理解vim
學習本身沒有的知識架構
學習他人的寫法,有助於本身代碼質量的提升ide
不知道從哪兒開始函數
文件太多,沒法屢清楚結構學習
代碼太多,測試編譯時耗費太多時間測試
內容太多,難以全面理解idea
開源項目最先只是一個idea, 這個idea是這個項目的根,隨着項目的發展,特性會愈來愈多,架構可能會調整,但這個idea老是不變的,它是整個項目的精華.
而咱們若是想要理解一個開源項目,弄懂這個idea是必須的, 不少時候咱們就是爲了深刻理解這個idea才產生閱讀源碼的動機。版本控制
隨者這個idea的實現,這個項目算是誕生了。但隨着愈來愈多特性的加入,愈來愈多代碼的提交,這個idea愈來愈深的掩藏起來。因此咱們能夠從早期版本入手.日誌
最先完成idea的版本中這個idea是最清晰的,代碼量是最少的,也是咱們理解這個項目的最佳時機.
早期版本是切入開源項目的好時機,git是版本控制領域的佼佼者,使用git幫助理解開源項目
git log --reverse
git checkout <commit-id>
切換當前提交的上一次提交
git checkout HEAD~
切換當前提交的下一次提交
git log --reverse --pretty=%H master | grep -A 1 $(git rev-parse HEAD) | tail -n1 | xargs git checkout;
比較上一個分支與當前分支
git diff HEAD~..HEAD
git log --follow path/to/source_file
根據須要,能夠專門閱讀該文件相關的某個特定的commit,不少時候項目初版的代碼會比最新版的代碼簡單不少,閱讀舊版的代碼可能會比較容易。若是是爲了修復bug而讀代碼,這樣的變動歷史有時候能夠提示咱們哪一個commit可能引入了bug。
git grep -w func -A100 -B100
假設有一個內部函數叫作func()
, 沒有文檔,如何知道這個函數怎麼用?除了閱讀內部函數的實現和閱讀實例,基本上沒有其餘方法。對於這種狀況
能夠批量找到func的用例,在vim裏從上往下先掃一遍,找到儘量簡單的用例,而後再返回到源文件中閱讀這個用例的上下文.
有些經常使用的git操做,咱們能夠經過設置git alias加快輸入
git config --global alias.prev 'checkout HEAD~' git config --global alias.next '! f() { git log --reverse --pretty=%H ${1:-master} | grep -A 1 $(git rev-parse HEAD) | tail -n1 | xargs git checkout; }; f' git config --global alias.difp 'diff HEAD~..HEAD'
更多文章的目錄在這裏