git操作Linux kernel



Linux kernel  的官方 GIT地址是:

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

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

1. 拿代码仓库

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

2. 查看状态:

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

3. 更新本地的代码:

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

4. 切换到分支:

  1. $ git checkout linux-3.10.y   
  2. Checking out files: 100% (25952/25952), done.  
  3. Switched to branch 'linux-3.10.y'  
$ git checkout linux-3.10.y 
Checking out files: 100% (25952/25952), done.
Switched to branch 'linux-3.10.y'
5. 查看分支信息:

  1. $ git branch    
  2. * linux-3.10.y  
  3.   master  
$ git branch  
* linux-3.10.y
  master
  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  
$ 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. 创建一个新分支:

  1. $ git checkout -b linux-3.10-charles   
  2. Switched to a new branch 'linux-3.10-charles'  
$ git checkout -b linux-3.10-charles 
Switched to a new branch 'linux-3.10-charles'
  1. $ git branch   
  2. * linux-3.10-charles  
  3.   linux-3.10.y  
  4.   master  
$ git branch 
* linux-3.10-charles
  linux-3.10.y
  master
7. 修改文件 init/main.c, 加入一行注释,然后 执行

  1. git add .  
git add .
  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. #  
$ git status
# On branch linux-3.10-charles
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	modified:   init/main.c
#

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

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

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

8. 提交修改:

  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(-)  
$ 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):

  1. commit 9eabb788b5c33efed589b1263aedd69b97e592ac  
  2. Author: Taotao Ding <htdkd@hotmail.com>  
  3. Date:   Wed May 7 03:36:55 2014 +0900  
  4.   
  5.     This is just for testing git  
  6.   
  7. commit 5d897eedc505bb8af1f4865ae381eadbfd3bc8c1  
  8. Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>  
  9. Date:   Tue May 6 07:56:24 2014 -0700  
  10.   
  11.     Linux 3.10.39  
  12.   
  13. commit 6b32172a1d3cffa74067ced96612bd13658d4fcf  
  14. Author: Felipe Balbi <balbi@ti.com>  
  15. Date:   Tue Feb 25 10:58:43 2014 -0600  
  16.   
  17.     usb: musb: avoid NULL pointer dereference  
  18.       
commit 9eabb788b5c33efed589b1263aedd69b97e592ac
Author: Taotao Ding <htdkd@hotmail.com>
Date:   Wed May 7 03:36:55 2014 +0900

    This is just for testing git

commit 5d897eedc505bb8af1f4865ae381eadbfd3bc8c1
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Tue May 6 07:56:24 2014 -0700

    Linux 3.10.39

commit 6b32172a1d3cffa74067ced96612bd13658d4fcf
Author: Felipe Balbi <balbi@ti.com>
Date:   Tue Feb 25 10:58:43 2014 -0600

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

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

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

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

    This is just for testing git

commit b7a52f5111bc53ffbfff96330621cbde80df6ba4
Author: Theodore Ts'o <tytso@mit.edu>
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" <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

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

    This is just for testing git

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

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

    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@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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值