转, 原文:https://segmentfault.com/a/1190000009475214
-------------------------------
为什么要阅读开源项目
-
源码是唯一的真实
-
加深对项目的理解
-
学习自己没有的知识
-
学习他人的写法,有助于自己代码质量的提高
开源项目难点
-
不知道从哪儿开始
-
文件太多,无法屡清楚结构
-
代码太多,测试编译时耗费太多时间
-
内容太多,难以全面理解
开源项目特点
开源项目最早只是一个idea, 这个idea是这个项目的根,随着项目的发展,特性会越来越多,架构可能会调整,但这个idea总是不变的,它是整个项目的精华.
而我们如果想要理解一个开源项目,弄懂这个idea是必须的, 很多时候我们就是为了深入理解这个idea才产生阅读源码的动机。
随者这个idea的实现,这个项目算是诞生了。但随着越来越多特性的加入,越来越多代码的提交,这个idea越来越深的掩藏起来。所以我们可以从早期版本入手.
最早完成idea的版本中这个idea是最清晰的,代码量是最少的,也是我们理解这个项目的最佳时机.
使用git帮助理解开源项目
早期版本是切入开源项目的好时机,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 alias
有些常用的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'
更多文章的目录在这里
标签:HEAD,git,项目,--,idea,开源,阅读 From: https://www.cnblogs.com/oxspirt/p/17209785.html