使用 GIT 获得Linux Kernel的代码并查看,追踪历史记录

Linux kernel  的官方 GIT地址是:

http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git

可以从这个地址拿到 kernel 的 代码仓库。

1. 拿代码仓库

[plain] view plaincopyprint?

  1. git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git

2. 查看状态:

[plain] view plaincopyprint?

  1. $ git status
  2. # On branch master
  3. nothing to commit (working directory clean)

3. 更新本地的代码:

[plain] view plaincopyprint?

  1. $ git pull
  2. Already up-to-date.

4. 切换到分支:

[html] view plaincopyprint?

  1. $ git checkout linux-3.10.y
  2. Checking out files: 100% (25952/25952), done.
  3. Switched to branch ‘linux-3.10.y‘

5. 查看分支信息:

[plain] view plaincopyprint?

  1. $ git branch
  2. * linux-3.10.y
  3. master

[plain] view plaincopyprint?

  1. $ git branch  -a
  2. * linux-3.10.y
  3. master
  4. remotes/origin/HEAD -> origin/master
  5. remotes/origin/linux-2.6.11.y
  6. remotes/origin/linux-2.6.12.y
  7. remotes/origin/linux-2.6.13.y
  8. remotes/origin/linux-2.6.14.y
  9. remotes/origin/linux-2.6.15.y
  10. remotes/origin/linux-2.6.16.y
  11. remotes/origin/linux-2.6.17.y
  12. remotes/origin/linux-2.6.18.y
  13. remotes/origin/linux-2.6.19.y
  14. remotes/origin/linux-2.6.20.y
  15. remotes/origin/linux-2.6.21.y
  16. remotes/origin/linux-2.6.22.y
  17. remotes/origin/linux-2.6.23.y
  18. remotes/origin/linux-2.6.24.y
  19. remotes/origin/linux-2.6.25.y
  20. remotes/origin/linux-2.6.26.y
  21. remotes/origin/linux-2.6.27.y
  22. remotes/origin/linux-2.6.28.y
  23. remotes/origin/linux-2.6.29.y
  24. remotes/origin/linux-2.6.30.y
  25. remotes/origin/linux-2.6.31.y
  26. remotes/origin/linux-2.6.32.y
  27. remotes/origin/linux-2.6.33.y
  28. remotes/origin/linux-2.6.34.y
  29. remotes/origin/linux-2.6.35.y
  30. remotes/origin/linux-2.6.36.y
  31. remotes/origin/linux-2.6.37.y
  32. remotes/origin/linux-2.6.38.y
  33. remotes/origin/linux-2.6.39.y
  34. remotes/origin/linux-3.0.y
  35. remotes/origin/linux-3.1.y
  36. remotes/origin/linux-3.10.y
  37. remotes/origin/linux-3.11.y
  38. remotes/origin/linux-3.12.y
  39. remotes/origin/linux-3.13.y
  40. remotes/origin/linux-3.14.y
  41. remotes/origin/linux-3.2.y
  42. remotes/origin/linux-3.3.y
  43. remotes/origin/linux-3.4.y
  44. remotes/origin/linux-3.5.y
  45. remotes/origin/linux-3.6.y
  46. remotes/origin/linux-3.7.y
  47. remotes/origin/linux-3.8.y
  48. remotes/origin/linux-3.9.y
  49. remotes/origin/master

6. 创建一个新分支:

[plain] view plaincopyprint?

  1. $ git checkout -b linux-3.10-charles
  2. Switched to a new branch ‘linux-3.10-charles‘

[html] view plaincopyprint?

  1. $ git branch
  2. * linux-3.10-charles
  3. linux-3.10.y
  4. master

7. 修改文件 init/main.c, 加入一行注释,然后 执行

[html] view plaincopyprint?

  1. git add .

[html] view plaincopyprint?

  1. $ git status
  2. # On branch linux-3.10-charles
  3. # Changes to be committed:
  4. #   (use "git reset HEAD <file>..." to unstage)
  5. #
  6. #   modified:   init/main.c
  7. #

[html] view plaincopyprint?

  1. e$ git add -i
  2. staged     unstaged path
  3. 1:        +2/-0      nothing init/main.c
  4. *** Commands ***
  5. 1: [s]tatus     2: [u]pdate     3: [r]evert     4: [a]dd untracked
  6. 5: [p]atch      6: [d]iff   7: [q]uit   8: [h]elp
  7. What now>

如果选择  revert 命令,相当于 undo  "git add .":

[html] view plaincopyprint?

  1. What now> r
  2. staged     unstaged path
  3. 1:        +2/-0      nothing [i]nit/main.c
  4. Revert>>
  5. reverted one path
  6. *** Commands ***
  7. 1: [s]tatus     2: [u]pdate     3: [r]evert     4: [a]dd untracked
  8. 5: [p]atch      6: [d]iff   7: [q]uit   8: [h]elp
  9. What now> q

这个时候再执行 git status:

[html] view plaincopyprint?

  1. $ git status
  2. # On branch linux-3.10-charles
  3. # Changes not staged for commit:
  4. #   (use "git add <file>..." to update what will be committed)
  5. #   (use "git checkout -- <file>..." to discard changes in working directory)
  6. #
  7. #   modified:   init/main.c
  8. #
  9. no changes added to commit (use "git add" and/or "git commit -a")

8. 提交修改:

[plain] view plaincopyprint?

  1. $ git commit -a -m "This is just for testing git"
  2. [linux-3.10-charles 9eabb78] This is just for testing git
  3. 1 file changed, 1 insertion(+), 1 deletion(-)

9. 查看修改记录(git log):

[plain] view plaincopyprint?

  1. commit 9eabb788b5c33efed589b1263aedd69b97e592ac
  2. Author: Taotao Ding <[email protected]>
  3. Date:   Wed May 7 03:36:55 2014 +0900
  4. This is just for testing git
  5. commit 5d897eedc505bb8af1f4865ae381eadbfd3bc8c1
  6. Author: Greg Kroah-Hartman <[email protected]>
  7. Date:   Tue May 6 07:56:24 2014 -0700
  8. Linux 3.10.39
  9. commit 6b32172a1d3cffa74067ced96612bd13658d4fcf
  10. Author: Felipe Balbi <[email protected]>
  11. Date:   Tue Feb 25 10:58:43 2014 -0600
  12. usb: musb: avoid NULL pointer dereference

可以看到,修改已经被记录起来了。

[plain] view plaincopyprint?

  1. git log  -p
  2. commit 9eabb788b5c33efed589b1263aedd69b97e592ac
  3. Author: Taotao Ding <[email protected]>
  4. Date:   Wed May 7 03:36:55 2014 +0900
  5. This is just for testing git
  6. diff --git a/init/main.c b/init/main.c
  7. index e83ac04..febc1e9 100644
  8. --- a/init/main.c
  9. +++ b/init/main.c
  10. @@ -10,7 +10,7 @@
  11. */
  12. #define DEBUG          /* Enable initcall_debug */
  13. -
  14. +/* This is a test line for git */
  15. #include <linux/types.h>
  16. #include <linux/module.h>
  17. #include <linux/proc_fs.h>

10: 查看一个文件最近的修改记录:

[html] view plaincopyprint?

  1. $ git log master..HEAD init/main.c
  2. commit 9eabb788b5c33efed589b1263aedd69b97e592ac
  3. Author: Taotao Ding <[email protected]>
  4. Date:   Wed May 7 03:36:55 2014 +0900
  5. This is just for testing git
  6. commit b7a52f5111bc53ffbfff96330621cbde80df6ba4
  7. Author: Theodore Ts‘o <[email protected]>
  8. Date:   Tue Sep 10 10:52:35 2013 -0400
  9. random: run random_int_secret_init() run after all late_initcalls
  10. commit 47d06e532e95b71c0db3839ebdef3fe8812fca2c upstream.
  11. The some platforms (e.g., ARM) initializes their clocks as
  12. late_initcalls for some unknown reason.  So make sure
  13. random_int_secret_init() is run after all of the late_initcalls are
  14. run.
  15. Signed-off-by: "Theodore Ts‘o" <[email protected]>
  16. Signed-off-by: Greg Kroah-Hartman <[email protected]>

11: 比较两个分支的差异:

[html] view plaincopyprint?

  1. $ git log linux-3.10.y..linux-3.10-charles
  2. commit 9eabb788b5c33efed589b1263aedd69b97e592ac
  3. Author: Taotao Ding <[email protected]>
  4. Date:   Wed May 7 03:36:55 2014 +0900
  5. This is just for testing git

当前分支也可写成  HEAD,所以:

[plain] view plaincopyprint?

  1. $ git log linux-3.10.y..HEAD
  2. commit 9eabb788b5c33efed589b1263aedd69b97e592ac
  3. Author: Taotao Ding <[email protected]>
  4. Date:   Wed May 7 03:36:55 2014 +0900
  5. This is just for testing git

reference:

http://www.opensourceforu.com/2011/05/linux-kernel-development-using-git/

P.S.

配置 username  和 user.email 的方法:

git config    user.email "username"

git config   user.email "[email protected]"

这两个命令改变 .git/config 配置文件 (local)

git config  --global   user.email "username"

git config   --global user.email "[email protected]"

git config --global core.editor "vim"
则改变全局的 git 配置文件  (~/.gitconfig)

时间: 2024-10-23 00:43:34

使用 GIT 获得Linux Kernel的代码并查看,追踪历史记录的相关文章

拥抱开源,如何关注Linux Kernel 邮件列表?

如今开源如此火爆,以至于张口闭口不提到都仿佛不是搞IT 的,那么如何拥抱开源?本文适合初学者,如有大神至此,goto exit ! 一.如何加入开源 以Linux 为例,这么一个成功的开源项目需要做哪些工作?一个开源项目,研发人员都是时间以及空间上分散的,那么如何联系如何相互讨论成为一个很重要很重要的问题! Linux 或者说更早的开源都是基于邮件列表以及IRC 这两个核心的联系方式: 邮件列表(Mailing List)的起源可以追溯到1975年,是互联网上最早的社区形式之一,也是Intern

PopMetal和PX2上运行upstream linux kernel代码

Rockchip的平台,以其强大的性能和丰富的功能,在开源社区大受欢迎,Linux内核对其提供越来越丰富的支持. Linux内核目前发布的最新稳定版本是Linux 4.2,Linux 4.3的合并窗口已经打开,大概下周会发布rc1版本,最终的稳定版本 会在一两个月内发布.在Linux内核的每一个版本中,都会合并国内外大量Linux kernel hacker们为Rockchip平台提交的代码,使得 upstream对Rockchip平台的支持越来越完善. Chipspark打造的两款开发板PX2

Linux Kernel系列 - 黄牛X内核代码凝视

Hanks.Wang - 专注于操作系统与移动安全研究.Linux-Kernel/SELinux/SEAndroid/TrustZone/Encription/MDM    Mail - [email protected] 牛X的内核代码凝视 大牛的代码质量高稳定性好,并且逻辑清晰易读性比較强,今天看到Linux Kernel红黑树的代码时,瞬间被大牛的代码凝视秒杀了,看到这样凝视的代码真的有阅读的欲望.啥也不说了,上图吧 watermark/2/text/aHR0cDovL2Jsb2cuY3N

Linux Kernel系列 - 牛X的内核代码注释

Hanks.Wang - 专注于操作系统与移动安全研究,Linux-Kernel/SELinux/SEAndroid/TrustZone/Encription/MDM    Mail - [email protected] 牛X的内核代码注释 大牛的代码质量高稳定性好,而且逻辑清晰易读性比较强,今天看到Linux Kernel红黑树的代码时,瞬间被大牛的代码注释秒杀了,看到这样注释的代码真的有阅读的欲望,啥也不说了,上图吧 Linux Kernel系列 - 牛X的内核代码注释

linux kernel的中断子系统之(七):GIC代码分析

一.前言 GIC(Generic Interrupt Controller)是ARM公司提供的一个通用的中断控制器,其architecture specification目前有四个版本,V1-V4(V2最多支持8个ARM core,V3/V4支持更多的ARM core,主要用于ARM64服务器系统结构).目前在ARM官方网站只能下载到Version 2的GIC architecture specification,因此,本文主要描述符合V2规范的GIC硬件及其驱动. 具体GIC硬件的实现形态有两

Linux Kernel文件系统写I/O流程代码分析(一)

Linux Kernel文件系统写I/O流程代码分析(一) 在Linux VFS机制简析(二)这篇博客上介绍了struct address_space_operations里底层文件系统需要实现的操作,实际编码过程中发现不是那么清楚的知道这里面的函数具体是干啥,在什么时候调用.尤其是写IO相关的操作,包括write_begin, write_end, writepage, writepages, direct_IO以及set_page_dirty等函数指针. 要搞清楚这些函数指针,就需要纵观整个

Linux Kernel - Debug Guide (Linux内核调试指南 )

http://blog.csdn.net/blizmax6/article/details/6747601 linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 建立调试环境 发行版的选择和安装 安装交叉编译工具 bin工具集的使用 qemu的使用 initrd.img的原理与制作 x86虚拟调试环境的建立 arm虚拟调试环境的建立 arm开发板调试环

Linux Kernel 开发报告 25 周年版

Linux基金会发布 2016 年度 Linux 内核开发报告,这次恰逢 Linux 内核 25 周年(腾云科技ty300.com),所以相比往年又更多的回顾性内容,值得一读. Linux 内核开发报告 2016 版 一些有趣的信息: 自 3.18 内核以来,合并自Linux Kernel内核的新功能覆盖面更为广泛,且涉及安全性的新功能越来越多 4.0 系列的引入仅仅是由于 Linus (基础教程qkxue.net)觉得小版本号已经超越正常人手指和脚趾数量的总和了.每一个内核版本发布都是传统意义

2. ubuntu下载编译linux kernel

一. 引言 诚如老罗所言,android源代码里面并没有带linux kernel代码.它使用的是预先编译好的kernel,大家可以使用adb shell cat proc/version就可以查看到,如下: [email protected]:~/working_directory$ adb shell cat proc/version Linux version 2.6.29-00261-g0097074-dirty ([email protected]) (gcc version 4.4.