源码是惟一的真实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'
更多文章的目录在这里