使用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 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仓库的三个命令
git log
git show
git diff
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
加上—stat后,可以定位到哪个文件与本模块相关。
fileName为任意文件名,查看指定文件的提交信息。(注:文件名应该放到参数的最后位置,通常在前面加上–并用空格隔开表示是文件。)
查询指定作者的提交记录
–since,–affter
仅显示指定时间之后的提交(不包含当前日期)
–until,–before
仅显示指定时间之前的提交(包含当前日期)
得到整个文件的每一行的详细修改信息:包括SHA串,日期和作者:
也可以用”-L”参数在命令(blame)中指定开始和结束行:
git blame -L 160,+10 sha1_file.c
gitlog -S
通过查询文件的变更内容来检索出指定提交日志注:-S后没有”=”,与查询内容之间也没有空格符
你也可以用”-L”参数在命令(blame)中指定开始和结束行:
阅读log后,发现
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。
…/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行),所以他就是重点研究内容。
1. google这个人名;
2. 查找作者的提交:
如果发现提交太多,就指定搜索临近时间的commit:
或
或
或
所以规范的commit是很有用的,可以参考网上”GIT_COMMIT_规范要求“相关的文章。
Git教程 - 廖雪峰的官方网站
Git Community Book 中文版
管理修改
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/f1index6f8a38c..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后,可以定位到哪个文件与本模块相关。
查看某个文件的修改
–fileNamefileName为任意文件名,查看指定文件的提交信息。(注:文件名应该放到参数的最后位置,通常在前面加上–并用空格隔开表示是文件。)
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 中文版
相关文章推荐
- Android应用程序资源文件的编译和打包原理
- Android Studio使用疑难问题汇总
- Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
- Android 弹出软键盘android:windowSoftInputMode设置总结
- Android 学习笔记之Volley开源框架解析(二)
- Android greenDao的简单配置和使用
- Android通知之通知栏点击通知后返回正在运行的程序,而不是一个新Activity
- android stidio so动态库找不到问题
- Android高效加载大图片,防止OOM
- Android6.0新特性??
- Binder
- Android Java连接MySQL数据库
- Diving Into Android 'M' Doze
- Android应用程序资源查找过程分析
- Android 实现子View的状态跟随父容器的状态
- android 37 线程通信Looper
- Android MySQL入门
- Android RecyclerView滚动定位
- Android 即时通讯
- android 消息推送