您的位置:首页 > 移动开发 > Android开发

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

2015-10-18 15:55 579 查看
使用git查阅Android M中Doze相关代码
管理修改
stat输出修改的统计信息

diff格式

查找代码步骤
在commit message中搜索关键字

查看某个文件的修改

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

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

在历史修改中搜索

例子在Android M源码上搜索doze mode相关的代码
在commit message中搜索定位到相关的commit

查找该文件修改历史

doze mode涉及哪些文件

根据作者查找相关代码

当遇到不能理解的代码

参考资料

使用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 log
git show
git 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 中文版
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: