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

Linux kernel  的官方 GIT地址是:

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

1. 拿代码仓库

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

2. 查看状态:

$ git status

# On branch master

nothing to commit (working directory clean)

3. 更新本地的代码:

$ git pull

Already up-to-date.

4. 切换到分支:

$ git checkout linux-3.10.y

Checking out files: 100% (25952/25952), done.

Switched to branch 'linux-3.10.y' 5. 查看分支信息:

$ git branch

* linux-3.10.y

master

$ git branch  -a

* linux-3.10.y

master

remotes/origin/HEAD -> origin/master

remotes/origin/linux-2.6.11.y

remotes/origin/linux-2.6.12.y

remotes/origin/linux-2.6.13.y

remotes/origin/linux-2.6.14.y

remotes/origin/linux-2.6.15.y

remotes/origin/linux-2.6.16.y

remotes/origin/linux-2.6.17.y

remotes/origin/linux-2.6.18.y

remotes/origin/linux-2.6.19.y

remotes/origin/linux-2.6.20.y

remotes/origin/linux-2.6.21.y

remotes/origin/linux-2.6.22.y

remotes/origin/linux-2.6.23.y

remotes/origin/linux-2.6.24.y

remotes/origin/linux-2.6.25.y

remotes/origin/linux-2.6.26.y

remotes/origin/linux-2.6.27.y

remotes/origin/linux-2.6.28.y

remotes/origin/linux-2.6.29.y

remotes/origin/linux-2.6.30.y

remotes/origin/linux-2.6.31.y

remotes/origin/linux-2.6.32.y

remotes/origin/linux-2.6.33.y

remotes/origin/linux-2.6.34.y

remotes/origin/linux-2.6.35.y

remotes/origin/linux-2.6.36.y

remotes/origin/linux-2.6.37.y

remotes/origin/linux-2.6.38.y

remotes/origin/linux-2.6.39.y

remotes/origin/linux-3.0.y

remotes/origin/linux-3.1.y

remotes/origin/linux-3.10.y

remotes/origin/linux-3.11.y

remotes/origin/linux-3.12.y

remotes/origin/linux-3.13.y

remotes/origin/linux-3.14.y

remotes/origin/linux-3.2.y

remotes/origin/linux-3.3.y

remotes/origin/linux-3.4.y

remotes/origin/linux-3.5.y

remotes/origin/linux-3.6.y

remotes/origin/linux-3.7.y

remotes/origin/linux-3.8.y

remotes/origin/linux-3.9.y

remotes/origin/master

6. 创建一个新分支:

$ git checkout -b linux-3.10-charles

Switched to a new branch 'linux-3.10-charles'

$ git branch

* linux-3.10-charles

linux-3.10.y

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

$ git status

# On branch linux-3.10-charles

# Changes to be committed:

#   (use "git reset HEAD ..." to unstage)

#

#   modified:   init/main.c

#

e$ git add -i

staged     unstaged path

1:        +2/-0      nothing init/main.c

*** Commands ***

1: [s]tatus     2: [u]pdate     3: [r]evert     4: [a]dd untracked

5: [p]atch      6: [d]iff   7: [q]uit   8: [h]elp

What now>

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

What now>r

staged     unstaged path

1:        +2/-0      nothing [i]nit/main.c

Revert>>

reverted one path

*** Commands ***

1: [s]tatus     2: [u]pdate     3: [r]evert     4: [a]dd untracked

5: [p]atch      6: [d]iff   7: [q]uit   8: [h]elp

What now>q 这个时候再执行 git status:

$ git status

# On branch linux-3.10-charles

# Changes not staged for commit:

#   (use "git add ..." to update what will be committed)

#   (use "git checkout -- ..." to discard changes in working directory)

#

#   modified:   init/main.c

#

no changes added to commit (use "git add" and/or "git commit -a")

8. 提交修改:

$ git commit -a -m "This is just for testing git"

[linux-3.10-charles 9eabb78] This is just for testing git

1 file changed, 1 insertion(+), 1 deletion(-) 9. 查看修改记录(git log):

commit 9eabb788b5c33efed589b1263aedd69b97e592ac

Author: Taotao Ding 

Date:   Wed May 7 03:36:55 2014 +0900

This is just for testing git

commit 5d897eedc505bb8af1f4865ae381eadbfd3bc8c1

Author: Greg Kroah-Hartman 

Date:   Tue May 6 07:56:24 2014 -0700

Linux 3.10.39

commit 6b32172a1d3cffa74067ced96612bd13658d4fcf

Author: Felipe Balbi 

Date:   Tue Feb 25 10:58:43 2014 -0600

usb: musb: avoid NULL pointer dereference 可以看到,修改已经被记录起来了。

git log  -p

commit 9eabb788b5c33efed589b1263aedd69b97e592ac

Author: Taotao Ding 

Date:   Wed May 7 03:36:55 2014 +0900

This is just for testing git

diff --git a/init/main.c b/init/main.c

index e83ac04..febc1e9 100644

--- a/init/main.c

+++ b/init/main.c

@@ -10,7 +10,7 @@

*/

#define DEBUG          /* Enable initcall_debug */

-

+/* This is a test line for git */

#include 

#include 

#include 

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

$ git log master..HEAD init/main.c

commit 9eabb788b5c33efed589b1263aedd69b97e592ac

Author: Taotao Ding 

Date:   Wed May 7 03:36:55 2014 +0900

This is just for testing git

commit b7a52f5111bc53ffbfff96330621cbde80df6ba4

Author: Theodore Ts'o 

Date:   Tue Sep 10 10:52:35 2013 -0400

random: run random_int_secret_init() run after all late_initcalls

commit 47d06e532e95b71c0db3839ebdef3fe8812fca2c upstream.

The some platforms (e.g., ARM) initializes their clocks as

late_initcalls for some unknown reason.  So make sure

random_int_secret_init() is run after all of the late_initcalls are

run.

Signed-off-by: "Theodore Ts'o" 

Signed-off-by: Greg Kroah-Hartman 

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

$ git log linux-3.10.y..linux-3.10-charles

commit 9eabb788b5c33efed589b1263aedd69b97e592ac

Author: Taotao Ding 

Date:   Wed May 7 03:36:55 2014 +0900

This is just for testing git

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

$ git log linux-3.10.y..HEAD

commit 9eabb788b5c33efed589b1263aedd69b97e592ac

Author: Taotao Ding 

Date:   Wed May 7 03:36:55 2014 +0900

This is just for testing git

reference:

P.S.

配置 username  和 user.email 的方法:

git config    user.email "username"

git config   user.email "email@server"

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

git config  --global   user.email "username"

git config   --global user.email "email@server"

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