使用git查阅Android M中Doze相关代码

使用git查阅Android M中Doze相关代码

使用git阅读代码,主要用到这几条命令:

git log
git show
git diff

建议没使用过git的读者先阅读下面的文章:
1. Git教程 - 廖雪峰的官方网站
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
2. Git Community Book 中文版(基本用法、中级技能)
http://gitbook.liuhui998.com/index.html

管理修改

–stat输出修改的统计信息

git跟踪并管理的是修改,而非文件。之所以这样说,是因为每个commit记录的都是修改。

–stat
用于统计修改信息。列出修改的文件和修改的行数。

查看git仓库的三个命令git loggit showgit diff,都可以加上--stat选项列出所修改的文件。所以印证了,git里面能看到的都是修改,git管理的是修改。

git log
git show
git diff

diff格式

diff –gita/f1 b/f1
index6f8a38c..449b072 100644
— a/f1
+++ b/f1
@@ -1,7 +1,7@@
a
a
a
-a
+b
a
a
a

第二部分,变动的位置用两个@作为起首和结束。

@@ -1,7 +1,7@@

前面的”-1,7”分成三个部分:减号表示第一个文件(即f1),”1”表示第1行,”7”表示连续7行。合在一起,就表示下面是第一个文件从第1行开始的连续7行。同样的,”+1,7”表示变动后,成为第二个文件从第1行开始的连续7行。

diff格式的说明,参考《读懂diff - 阮一峰的网络日志》中,五、合并格式的diff

查找代码步骤

在commit message中搜索关键字

git log --stat--grep='doze'

加上—stat后,可以定位到哪个文件与本模块相关。

查看某个文件的修改

–fileName
fileName为任意文件名,查看指定文件的提交信息。(注:文件名应该放到参数的最后位置,通常在前面加上–并用空格隔开表示是文件。)

git log --stat--reverse -- ./services/core/java/com/android/server/DeviceIdleController.java

查找该作者那一段时间的提交

–author=someone
查询指定作者的提交记录

$ git log --author='DianneHackborn'
--since,--affter      

–since,–affter
仅显示指定时间之后的提交(不包含当前日期)
–until,–before
仅显示指定时间之前的提交(包含当前日期)

寻找代码责任人(何时由和人添加)

git blame[filename]
得到整个文件的每一行的详细修改信息:包括SHA串,日期和作者:
也可以用”-L”参数在命令(blame)中指定开始和结束行:
git blame -L 160,+10 sha1_file.c

在历史修改中搜索

使用gitlog –grep=''只搜索commitmessage, -S搜索修改的代码)

gitlog -S
通过查询文件的变更内容来检索出指定提交日志注:-S后没有”=”,与查询内容之间也没有空格符
你也可以用”-L”参数在命令(blame)中指定开始和结束行:

例子:在Android M源码上搜索doze mode相关的代码:

在commit message中搜索,定位到相关的commit

git log --stat--grep='doze'

阅读log后,发现commit4a503b1ece485d44c15eb02ec2bcd464b46e6f7f中,“Separate battery whitelists”是doze的一个重要特性。对DeviceIdleController.java*文件进行了最多的修改。所以定位到DeviceIdleController.java

查找该文件修改历史。

—reverse后,方便查看最早提交的commit

git log --stat --reverse --./services/core/java/com/android/server/DeviceIdleController.java

commit 8ad2af7e5b28f71e7bdfc1bb097937c6c1d22b18
Author: Dianne Hackbornhackbod@google.com
Date: TueMar 17 17:00:24 2015 -0700
Firststab at device idle mode.
……..
…/com/android/server/DeviceIdleController.java | 424++++++++++++++++++++
1 filechanged, 424 insertions(+)

根据修改行数的多少和commit message的描述。记录几重要版本
commit 88e98dfa59e68a860d8c3b462ec03bc0b06d6b5c
commit88e98dfa59e68a860d8c3b462ec03bc0b06d6b5c
以及记录作者Dianne Hackborn

doze mode涉及哪些文件?

git log8ad2af7e5b28f71e7bdfc1bb097937c6c1d22b18 --stat

…/android/hardware/display/DisplayManager.java | 3+-
core/java/android/net/INetworkPolicyManager.aidl | 3+-
core/java/android/os/BatteryStats.java | 82 +++-
…/com/android/internal/app/IBatteryStats.aidl | 1 +
…/com/android/internal/os/BatteryStatsImpl.java | 129++++–
…/com/android/server/DeviceIdleController.java | 424++++++++++++++++++++
…/android/server/am/ActivityManagerService.java | 8+
…/com/android/server/am/BatteryStatsService.java| 26 +-
…/android/server/job/JobSchedulerService.java | 4 +-
…/server/net/NetworkPolicyManagerService.java | 31+-
services/java/com/android/server/SystemServer.java| 1 +
11 fileschanged, 649 insertions(+), 63 deletions(-)

这些是我们需要了解的文件。其中,DeviceIdleController.java修改的行数最多(424行),所以他就是重点研究内容。

根据作者查找相关代码:

发现本文件的提交者和主要的维护者是Dianne Hackborn。为查找相关信息:
1. google这个人名;
2. 查找作者的提交:git log --author='DianneHackborn' –stat
如果发现提交太多,就指定搜索临近时间的commit:
git log--author='Dianne Hackborn' --stat --after={2015-07-18} --before={2015-08-01} –reverse

git log--author='Dianne Hackborn' --stat --since={2015-03-17} --until={2015-04-18}--reverse

当遇到不能理解的代码

找出代码是在哪一个commit中提交的

git blame sha1_file.c

git blame -L 160,+10sha1_file.c

git log-S'val->intval = batt_info->fRSOC+1;' -p --drivers/power/O2_power/oz8806_battery.c

所以规范的commit是很有用的,可以参考网上”GIT_COMMIT_规范要求“相关的文章。

参考资料:

git log - 张贺 - 博客园
Git教程 - 廖雪峰的官方网站
Git Community Book 中文版

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值