分享

git获取linux内核源码及分支管理

 lycbje 2014-07-22

1.    环境:ubuntu12.04.

2.    git安装:sudo apt-get install git-core ,安装完后查看版本如下:

          

3.   获取linux内核源码:

    在kernel的官网上有三种版本,mainline,stable,longterm
    mainline是主线版本,最新的,

    stable是稳定版,

    longterm是长期支持版,

     还有一个是eol,当然就是不再支持了。

      获取内核源码可以通过到官网去下载,也可以通过git的方式进行获取。通过网上下载的方法慢且不方便,每次都得全部下载,通过git下载除了第一次要全部下载外后续的下载都比较快,且获取不同版本的内核也很方便,管理方便,与使用SVN获取代码类似,只需要执行checkout命令即可。下面介绍如何利用git获取源码:

      新建一个文件夹,在该文件夹下 使用git命令git clone URL获取linux内核源码如下:

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

      该指令的源地址可以到linux kernel的官方网站(https://www./)获得,点击gitweb选项卡在弹出的界面中切换到第一项选项卡在顶部或底部可以看到git源地址如下:

     

         以上地址用第一个即可,第一次获取源码会比较久,后续再进行获取及其它版本的获取就比较快了。获取完源码后会在内核源码的顶层目录下看到一个隐藏的.git文件夹,该文件夹是git用于版本库管理的文件夹,对linux源码本身无影响,这跟SVN的是类似的。

4.   查询下载的源码的版本:

      下载源码后可以通过在源码顶层目录下执行make kernelversion命令查询源码的版本,如下

       

        也可以通过打开源码顶层目录下的Makefile文件在文件开始处看到,如下

       

     注意:要查看当前运行的系统的内核版本可以使用uname -a,如下

      

当然,也可行通过查看相关文件知道当前运行系统的内核版本。

 

5.    获取不同版本的kernel及分支管理:

       很多时候不仅需要最新稳定版本的内核,也需要以前版本的稳定内核,这时可以通过git的branch和checkout命令实现(必须是先完成了3中的clone才能切换到其它版本进行其它版本源码的获取)。

查看branch的帮助信息可了解branch的使用方法,如下:

     其中选项r可以查看远程的分支版本,选项a可以查看本地和远程的分支版本,通过在branch后加分支名可以创建分支,选项d是删除前合并分支,D则是强制删除。

   创建分支:git branch <分支名>
  切换分支: git checkout <分支名>
  该语句和上一个语句可以和起来用一个语句表示:git checkout -b <分支名>
  删除分支:git branch -d <分支名>, 如果该分支没有合并到主分支会报错,可以用命令git branch -D <分支名>强制删除。

 通过git branch -a查看本地和远程的分支如下:

 

   其中最前面的v3.8.12和v3.8.y这两个是我创建的本地的分支,以remotes开头的为远程的分支,第一行的*(no branch)中的*号是用于标示当前所在的本地分支,由于我当前是在远程分支remotes/origin/linux-3.8.y所以会显示*(no branch)。通过切换分支命令切换到不同的分支,如下切换到本地分支v3.8.12

   

    注:由于我在创建本地的v3.8.12的时候是在远程的3.9.0-rc6的版本上创建的,所以切换到v3.8.12的时候检出的是3.9.0-rc的源码(通过修改3.9.0可得新的分支,此出只为说明用),可以通过make kernelversion查看确认。由于切换到了本地的分支,所以查看分支时看到*号指向了v3.8.12。当然如果你想创建一个新的版本库最好不要在已有的分支或master上进行创建,否则新的创建的分支会以当前的分支进行检出,如上。

删除并查看本地分支如下:

        

    从以上命令执行可知,git不能删除当前所在的分支,必须退出要删除的分支才能对该分支进行删除。通过执行git checkout remotes/origin/linux-3.8.y

切换到远程分支获取3.8.8版本的内核源码,整个获取过程不到一分钟。同样的,可以检出其它版本的linux内核源码,若不清楚远程都有些什么版本可以通过git branch -r或-a查询,选项r只能查远程版本,选项a会把本地和远程的版本都列出。

 

   现在大家都知道git 获取的可不仅仅是“最新”的代码,还包括历史代码。 你还可以用 git log, git tag, git branch -a.git branch -r 等命令查看内核代码的历史信息, 标签信息(不同的正式版本应该都打有相应标签),分支信息等。 可以用 git checkout xxx 的命令来切换到 xxx 版本,xxx就是通过用git branch -a.git branch -r 命令查到的版本。

   git还会涉及到一些分支的合并、提交等的问题,此处不作介绍。

 

6 .   git、svn与gitHub

 git是分布式的版本管理系统,SVN是集中式的版本管理系统。也就是说git可以进行本地提交和检出(可以是本地的单个人或多人间,此时类似SVN,其中某个人的电脑充当了服务器),不需要远程服务器干涉,比如进行了修改后可以进行本地的提交,也可以检出进行再次修改,等到最终确定OK后如果需要,再提交到远程的版本库中,这样就会大大减轻远程服务器的负担,特别适合于开源项目的版本管理,目前linux、android等大型开源项目都是通过git进行管理的,因为这些开源项目面向的是全球,所有人都可能会进行访问。

       而SVN则不能,SVN必须是直接提交到远程服务器的版本库中,没有远程的服务器就无法提交或检出,这样如果很多人对服务器进行访问就会对服务器 造成很大的负担甚至瘫痪,所以SVN这种集中式的管理方式不适合开源项目的版本管理,比较适合公司或个人的非开源项目的代码版本管理。

github是基于git的用于提供代码的托管,GitHub可以托管各种git库,GitHub项目本身自然而然的也在GitHub上进行托管,只不过在一个私有的,公共视图不可见的库中。对于gitHub的使用,要进行用户的注册,开源项目可以免费托管(你可以免费申请托管你自己的开源项目),但私有库则并不如此,更多相关资料和使用方法可以在网上查,此文不作介绍。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多