如何阅读项目源代码

如何阅读项目源代码(github)

Github工程项目过大?难以阅读怎么办,本文就根据本身阅读代码的经验,总结一下如何阅读源代码的经验。php

借鉴博客

看他人的源码分析是最简单也是最直接的项目经验获取方式,一篇好的源码分析博客,一定是脉络清晰的,通常包括几个部分:git

UML类图 核心架构分析 关键代码分析
有助于梳理项目 有助于了解项目概况 有助于面试装逼
  • 好的项目类与类之间的关系清晰明了,反应在类图上就是类图结构清晰了。
  • 核心架构分析的重用性,就不用多说了。看懂了,对本身从0开始码项目,是很具优点的哦。
  • 关键代码分析是很重要,像三级缓存啦,网络数据传输啦(retrofit),这些项目代码目的性强,设及数据库,内存,网络,看完以后不由拜服,感受人生就该写此代码,但公司对这种底层服务要么封装很好,要么用的是开源库,不多能让你写这些东西,不过作作技术积累,或者面试官装逼仍是极好的。

利用工具git

好了,本人默认各位看官阅读的代码使用git工具进行管理。
咳咳,在开始以前,首先介绍一下工具git,git是项目版本管理工具,看本文以前,已经默认你们都了解git了,若是不了解,能够看些入门教程,本人强力推荐廖雪峰老师的git教程github

无git,不开心

若是是“来路不明”的代码,极可能没有用到git管理本身的项目,这种代码只能自求多福了,通常没有什么特别好的阅读思路。
——————————————————————————————————
1. 代码短(1000行左右),硬读没问题。
2. 代码长(超过10000行),只能自求多福了。推荐工具:source insight
3. 代码阅读经常使用手段:全局搜索;定位核心代码;
忽略项目中使用的开源库代码;最好能本身制做类图,或者流程图,便于理清思路。
——————————————————————————————————
这种项目,助顺风。web

git,终于等到你

这里以github上的开源项目为例,毕竟使用的人最多吧。本文主要以开源项目philm为例,大神膜拜啊!!
看看界面。
项目主页面
点击图上的绿色图标(clone or download)
这里必须用git clone命令下载项目,不能直接下载zip文件,这样就不带git信息。面试

git clone https://github.com/chrisbanes/philm.git

以后呢,利用git log查看一下,做者有多少条commit。通常commit越大,表明代码量越大。数据库

git log | wc -l

上面的代码能够计算出本项目有多少commit。编程

接下来呢?
以后能先看看有多少commit,通常优秀的开源项目,commit内包含做者的编程意图,好比该commit是实现什么功能,修复什么bug。philm的commit页面以下图所示哦:
这里写图片描述缓存

此外,点击release能够知道该项目有多少版本,
这里写图片描述网络

好了,咱们此次对项目有了大概的了解,能够知道该项目庞大,想在短时间内看完彷佛不太可能,并且master主分支的最新代码包含功能齐全,但通常为了学习项目,太多的功能就意味着要花费过多的时间在细枝末节上,从长远看不利于学习。架构

此时呢?git就派上用场了,通常咱们会喜欢先看看做者第一条commit提交了什么代码。咱们能够新建一个first-commit分支,该分支只包含第一条commit的代码,为了新建分支还须要知道commit id。
为了方便的查看log可使用如下命令将log日志打印至txt文本。

git log > ../log.txt

接下来,查看commit id
这里写图片描述

看看第一条commit id是a2917109f68db4c9bc976a8826fcc26923cc2b34
新建分支的命令到此就能够写出来了<><>

git checkout -b <branch-name> <commit-id>
git checkout -b first-commit a2917109f68db4c9bc976a8826fcc26923cc2b34

这时候代码可只有简单的一些文件咯。

此时你发现代码可能没法编译,这是因为做者才刚开发,可能并无编译,那接下来怎么作呢??

  • 能够查看commit信息,看看做者在哪条commit发布了可编译的代码。
    或者,利用github上的release上,做者第一个版本发布在哪条commit。

这里写图片描述

看上图发现——第 一个版本的commit是f8a44d4。接下来发生什么咱们都清楚了吧,git checkout -b一下吧。

又或者好比说这个philm项目,最新代码用到了dagger,但dagger是个学习成本高的开源库,虽然很牛逼。咱们也能够切换一个没有dagger的分支。
这里写图片描述

看看,id号为6593d67e6f1d2a4bb00103f922f0cc41f41c2b10就没有dagger哦,世界终于清净了。

好了,终于写完了,喜欢的点个赞吧。