William Hua的Blog 2009-04-29 Git和Repo扫盲——如何取得Android源代码
Filed under: Android,开源技术 — 标签:Android, Git, GitWeb, Repo, Version Control, 分布式版本控制 — William Hua @ 10:43
Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的分布式版本控制软件,它不同于Subversion、CVS这样的集中式版本控制系统。在集中式版本控制系统中只有一个仓库(repository),许多个工作目录(working copy),而像Git这样的分布式版本控制系统中(其他主要的分布式版本控制系统还有BitKeeper、Mercurial、GNU Arch、Bazaar、Darcs、SVK、Monotone等),每一个工作目录都包含一个完整仓库,它们可以支持离线工作,本地提交可以稍后提交到服务器上。分布式系统理论上也比集中式的单服务器系统更健壮,单服务器系统一旦服务器出现问题整个系统就不能运行了,分布式系统通常不会因为一两个节点而受到影响。
因为Android是由kernel、Dalvik、Bionic、prebuilt、build等多个Git项目组成,所以Android项目编写了一个名为Repo的Python的脚本来统一管理这些项目的仓库,使得Git的使用更加简单。 这几天William为了拿Android最新的sourcecode,学习了一下git和repo的一些基本操作,整理了一个如何取得Android代码的How-To,今天把他贴上来。 1、Git的安装
在Ubuntu 8.04上安装git只要设定了正确的更新源,然后使用apt-get就可以了,有什么依赖问题,就让它自己解决吧。其中cURL是一个利用URL语法在命令行下工作的文件传输工具,会在后面安装Repo的时候用到。 sudo apt-get install git-core curl 2、安装Repo 首先确保在当前用户的主目录下创建一个/bin目录(如果没有的话),然后把它(~/bin)加到PATH环境变量中 接下来通过cURL来下载Repo脚本,保存到~/bin/repo文件中 curl http://android.git./repo >~/bin/repo 别忘了给repo可执行权限 chmod a+x ~/bin/repo 3、初始化版本库 如果是想把Android当前主线上最新版本的所有的sourcecode拿下来,我们需要repo的帮助。 先建立一个目录,比如~/android,进去以后用repo init命令即可。 repo init -u git://android.git./platform/manifest.git 这个过程会持续很长的时间(至少可以好好睡一觉),具体要多少时间就取决于网络条件了 最后会看到 repo initialized in /android这样的提示,就说明本地的版本库已经初始化完毕,并且包含了当前最新的sourcecode。 如果想拿某个branch而不是主线上的代码,我们需要用-b参数制定branch名字,比如: repo init -u git://android.git./platform/manifest.git -b cupcake 另一种情况是,我们只需要某一个project的代码,比如kernel/common,就不需要repo了,直接用Git即可。 git clone git://android.git./kernel/common.git 这也需要不少的时间,因为它会把整个Linux Kernel的代码复制下来。 如果需要某个branch的代码,用git checkout即可。比如我们刚刚拿了kernel/common.get的代码,那就先进入到common目录,然后用下面的命令: git checkout origin/android-goldfish-2.6.27 -b goldfish 这样我们就在本地建立了一个名为goldfish的android-goldfish-2.6.27分支,代码则已经与android-goldgish-2.6.27同步。我们可以通过git branch来列出本地的所有分支。 4、同步版本库 使用epo sync命令,我们把整个Android代码树做同步到本地,同样,我们可以用类似 repo sync project1 project2 … 这样的命令来同步某几个项目 如果是同步Android中的单个项目,只要在项目目录下执行简单的 git pull 即可。 5、通过GitWeb下载代码 另外,如果只是需要主线上某个项目的代码,也可以通过GitWeb下载,在shortlog利用关键字来搜索特定的版本,或者找几个比较新的tag来下载还是很容易的。 Git最初是为Linux内核开发而设计,所以对其他平台的支持并不好,尤其是Windows平台,必须要有Cygwin才可以。现在,得益于msysgit项目,我们已经可以不需要Cygwin而使用Git了。另外,Git Extensions是一个非常好用的Windows Shell扩展,它能与资源管理器紧密集成,甚至提供了Visual Studio插件。它的官方网站上有一分不错的说明文档,感兴趣的朋友可以看一看。 至于Git的参考文档,我推荐Git Magic,这里还有一个Git Magic的中文版。 分享到: 新浪微博 腾讯微博 豆瓣 开心网 人人网 QQ 空间 邮件 Comments (40)
40 条评论 »
1. 基本上每次来到你的博客都像刘姥姥进了大观园,知道到处都是好东西,可是自己又不敢动手碰,主要还是不懂,呵呵。 评论 by 月夜 — 2009-04-29 @ 18:34
2.
其实纯软件的东西怎么弄都没关系 大不了就是把系统搞暴而已,呵呵 评论 by William Hua — 2009-04-30 @ 10:05
3.
这个你也懂! 评论 by Chocolly — 2009-05-08 @ 09:39
4.
@Chocolly 不懂可以学啊,呵呵 评论 by William Hua — 2009-05-08 @ 11:26
5.
通过代理访问,curl出错,但是apt-get 就可以,这是为什么? 评论 by 漫步 — 2009-07-03 @ 17:32
6.
@漫步 不是很清楚你的具体环境 针对这里的操作,可以用浏览器打开repo的路径,另存就可以了 评论 by William Hua — 2009-07-04 @ 00:06
7.
Hello,昨天遇到一个问题,我在下载好的android源码的kernel目录下做了一些编译工作,但是没有成功,我以为是不是最新源码的问题,于是执行repo sync,希望重新获得一套新的源码,但是由于我的kernel目录下做了相关的操作,系统就提示我需要将这些操作进行提交才可以,我当然不希望提交了,只是本地的一些实验而已。 于是,干脆就将kernel目录全部删除,想这样总可以了吧,但是问题一下子来了。反正就是不能下载到kernel了。 试了很多方法,包括直接mkdir kernel,将以前备份好的kernel再次拷贝回去,通通不行。 最后,将备份好的kernel拷贝回去后,可以repo sync了,但是发现最终repo sync的结果是将kernel整个目录删除了,而且再次repo sync,还是说是完整的,简直晕掉了。 然后又做了一个新的目录,将repo init -u git://android.git./platform/manifest.git和repo sync重新做了一遍,下了我一个晚上啊一个晚上。。。今天早上起来检查,还是没有kernel目录,其他几个目录都有,不清楚到底git是什么原理,怎么检查,因为以前使用svn,似乎还是比较方便,这个就不太知道怎么搞了。 在这里看到git clone git://android.git./kernel/common.git这个命令,搞过来试一试,现在还在下载中,不知道这个能不能搞定,我可不想因为这个重装系统~ William,如果你知道上面我出现的情况是什么原因,能否告知一二,现在在整源码,git文档还没来得及看,多谢多谢 评论 by thinkinnight — 2009-07-19 @ 06:43
8.
使用了git clone git://android.git./kernel/common.git之后,下载了一堆东西,看来是kernel,但是很奇怪,目录名使用的是common,让我一开始没有找到 而且目录下,我要找的arch/arm/mach-goldfish并没有出现,去http://android.git./发现有四个kernel相关的git文件,这四个是否都需要下呢? 还有问题就是,我能否将common改名为kernel? 哈,问题好多啊,大家一起研究研究? 评论 by thinkinnight — 2009-07-19 @ 07:41
9.
@thinkinnight 你好,抱歉今天才回复,看来你是蛮着急的 使用git clone git://android.git./kernel/common.git下载下来的目录名是common是正常的,因为在git里它的项目名就叫common。 Android代码树中有四个和kernel相关的项目,包括common.git、experimental.git、msm.git以及omap.git,其中msm.git和omap.git看名字就知道是为高通的MSM系列和TI的OMAP西类SOC专门修改的kernel版本,experimental.git为实验性项目,所以一般我们都是拿common.git。 最后,如果你要找arch/arm/mach-goldfish(即你需要的是带有goldfish版本的kernel),在执行git clone git://android.git./kernel/common.git拿到common.git的代码后在本地用 git checkout origin/android-goldfish-2.6.27 -b goldfish 切换一下branch即可,这点在我上面的文章中有提到。 评论 by William Hua — 2009-07-20 @ 11:35
10.
多谢William你的回答,呵呵,在做事上我喜欢一口气做下去,遇到哪个block住的地方,就感觉有些着急了,大概。尤其是做android,多件事情一起在做,发现没有时间研究git,找到你这么一个比较好的介绍的地方,又是中文,就来求助了,呵呵。 我主要是看到有文章写到最新的内核源码已经到了2.6.29,所以对你文章里面使用git checkout origin/android-goldfish-2.6.27 -b goldfish来得到goldfish这个分支有些疑惑,我也猜想是通过这个得到goldfish分支的,但是有不少疑问在里面。 1. 我使用git clone git://android.git./kernel/common.git得到的内核代码看,还是取得的是2.6.27的,是我取得有问题,还是现在的确是2.6.27的内核代码? 2. git checkout origin/android-goldfish-2.6.27 -b goldfish是否说明goldfish就是基于2.6.27的内核的呢?因为以前似乎是2.6.25的内核,现在是升级过来,这个关系是怎样的呢? 3. git checkout origin/android-goldfish-2.6.27 -b goldfish是创建了一个branch,我按照这个做,的确是得到了mach-goldfish,但是以前我没有这么做,也一样编译出了emulator,按照以前参考的一些文章的说法,goldfish是针对emulator做的一个ARMV5的架构修改,那原本没有goldfish,make出来可以运行的emulator使用的kernel是使用的什么配置呢?被搞得比较疑惑了。 真是不好意思,问题一堆,能否推荐一些站点,我自己去看,如果问题太多,而没有时间回答的话,其实邮件列表里面信息也很多,但是比较零碎,还没有专门抽出时间来看掉,如果有专门的网页会好些,谢谢了。 评论 by thinkinnight — 2009-07-20 @ 19:43
11.
@thinkinnight 你好, 1、你取到的代码没有问题,当前common.git中的主线还是2.6.27,29是开发分支 2、goldfish有基于2.6.27的版本,也有基于更新的2.6.29的版本,25和23都是很早以前了。这么说吧,goldfish内核基本上只是针对Android模拟器添加了相应虚拟设备的驱动而已,所以只要有2.6.27的标准内核,就会有2.6.27的goldfish内核,29也一样。 3、这条命令是把本地的git版本库切换到goldfish分支(而不是创建)。至于编译emulator,这和kernel没有实质的联系,emulator是google在qemu的基础上添加了特有的goldfish虚拟设备并给target-arm添加了一些新的指令集而来的,它的编译与kernel无关。emulator运行起来以后,会载入你所编出来的kernel(通过-kernel参数),如果你用的不是goldfish的kernel,这些新添加的虚拟设备就没有driver来驱动了。 这方面的问题我有接触,尽管问吧,把我问倒了我去讨论组找答案,呵呵 评论 by William Hua — 2009-07-23 @ 00:59
12.
呵呵,首先谢谢William的回答了。那我有问题就放心问了,哈哈。 你的回答就是我想要了解的答案,看了之后感觉清楚多了。 不过对于最后一个还有些疑问,我知道emulator是在qemu的基础上搞出来的,相当于虚拟硬件,而通过emulator -kernel等参数,将kernel放入emulator中运行,不过我源码到手后(主线的源码),就直接进行了make,记得emulator也能够启动进入android系统,按照我的想法,那肯定也是通过-kernel参数加上某个kernel的位置来运行的,那这里我使用的kernel是在哪里呢?那既然不是goldfish的kernel,那又是标准的kernel吗?还是MSM的?还是什么的呢? 谢谢 哦,还有,是不是可以给你发邮件啊?问题描述起来总是比较多的,在评论里面有时会写很多内容,呵呵。或者两种方式一起交流? 评论 by thinkinnight — 2009-07-23 @ 10:49
13.
@William Hua 其实我觉得你应用回答说“略懂” 《赤壁》的老诸总这样回答啊 评论 by chocolly — 2009-07-26 @ 22:22
14.
@thinkinnight 你好,理论上,用标准的kernel也能够用emualtor引导起来 只是所使用的虚拟设备和goldfish kernel不同而已 我亲自实践过,确实可以进入系统 emulator有一个默认的查找kernel的路径,所以如果你的kernel正好在那里的话,不加-kernel参数也没问题(某个环境变量似乎有一样的效果,没实践过,不太记得了:P) 邮件当然没问题,gtalk也可以,我一般都在线 评论 by William Hua — 2009-07-29 @ 19:09
15.
[...] 本文转自William Hua的Blog,原文在此。 [...] Pingback by Android开发环境的建立(3) « suny的世界 — 2009-09-01 @ 15:22
16.
您好! 我有个问题想向您请教一下:我用repo sync同步完源码后,为什么在system/core/目录下没有mountd子目录? 谢谢!! 评论 by 弹 — 2009-11-18 @ 17:41
17.
hi, 我在Windows下用git下载一个Email app的源码 比如我想下载针对模拟器android-1.6_r2的源码,我看有个tags是android-1.6_r2,如何下载这个版本的源码了?git命令是怎样的了? 谢谢 评论 by cxz — 2009-12-11 @ 21:38
18.
[...] 本文转自William Hua的Blog,原文在此。 [...] Pingback by Android开发环境的建立(3)——获取Android源代码【转贴】 » 不然你要我怎么样 — 2009-12-17 @ 00:04
19.
[...] 请先参考我的另一篇文章如何取得Android源代码,确保正确地拿到了Android kernel/common项目的 Goldfish分支(该分支用于构建运行在emulator上的系统内核,而主线则是用于构建运行在实际设备上的内核代码)上的内核代码。另外,需要提 醒一下大家的是Android的sourcecode目前只能在Linux或者Mac OS下做交叉编译编译,Windows并没有被支持,以下将以Ubuntu 8.04为Host OS来说明。 [...] Pingback by 【转贴】如何构建Android 1.5 Linux内核映像 » 不然你要我怎么样 — 2009-12-19 @ 00:22
20.
[...] 转自:http://www./2009/04/29/git-and-repo-for-dummies/ [...] Pingback by tek-life » [转]Git和Repo扫盲——如何取得Android源代码 — 2010-02-12 @ 13:16
21.
您好! 我想知道,我该如何开始接触android的更低一点的层,或者开始学习源码?我是不是需要一个linux环境,我是不是该先学习linux。 谢谢! 我的基本介绍: 我对android的API 已经有一定的了解,使用上没有什么问题,我已经做过几个android的实际应用。 我懂c++,java ,不懂Linux 评论 by 初学者 — 2010-03-09 @ 13:50
22.
[...] 请先参考如何取得Android源代码一文,通过repo来取得当前最新的android主线代码(或者拿名为android-SDK-1.5_r1的tag也无妨)。 [...] Pingback by 【转贴】如何构建Android 1.5系统映像 » 不然你要我怎么样 — 2010-03-19 @ 17:35
23.
你好 我按照文中的步骤进行操作 执行完 repo sync 之后 我等了一天 并没有在Android目录下看到下载的东西 请问这是怎么回事
评论 by songyinghao — 2010-05-10 @ 12:10
24.
@songyinghao William大虾,对,我也是这种情况,执行 repo init -u git://android.git./platform/manifest.git 命令后,它只是进行了初始化安装,获取了我的name和email,并没有进行下载; 而执行repo sync后,看似在搜索下载,可等了一晚上,发现目录里什么也没有! 这是怎么回事,救命阿! 评论 by Lazy Cat — 2010-05-26 @ 09:58
25.
@Lazy Cat 没有下载完,那个目录下是空的。好像是放在那个缓冲里了,我一直在找这个缓冲,谁知道在哪里? 评论 by ine — 2010-07-01 @ 10:08
26.
@Lazy Cat repo init确实只是初始化,repo sync才会下载 网络不佳时,确实会碰到下了一半短线的情况,只能重试 或者些个脚本一直try 下载完了以后会把内容checkout出来这是你才能看到 而之前,都在.repo目录下 评论 by William Hua — 2010-08-13 @ 20:09
27.
@初学者 先试试把emulator编出来吧 然后可以改改framework 评论 by William Hua — 2010-08-13 @ 20:10
28. cxz : hi, 我在Windows下用git下载一个Email app的源码 比如我想下载针对模拟器android-1.6_r2的源码,我看有个tags是android-1.6_r2,如何下载这个版本的源码了?git命令是怎样的了? 谢谢 最简单的办法,就是在gitweb上操作,直接下这个snapshot 评论 by William Hua — 2010-08-13 @ 20:10
29.
[...] 第二部分 推荐的文章:http://www./Edu/264/29748.htm && http://www./2009/04/29/git-and-repo-for-dummies/ [...] Pingback by 猫左羽右 » 从零开始学习Android之环境配置 — 2010-10-16 @ 02:02
30.
你好,william看了你上面的文章介绍如何使用git下载Android的源码,让我在以前的基础上又多了一些更多的了解。在这里我想请教你一个问题,我下载的源码都已经编译完了(kernel 2.6.29),但是下载道板子上的时候没有任何图像出现,用串口调试也仅仅是出现一些启动信息。因为没有触摸屏,所以想把它通过TV输出,在网上查了一下方法,有人说是改framebuffer里的Fb,让其指到TV的设备上,这样就可以了,也有人说在Android中修改js文件,两种方法我都试了,但是没有成功。现在是找不到思路了,请问这种情况,我应该怎么去修改,让其出现在显示屏上,谢谢! 评论 by bevis — 2010-12-03 @ 09:58
31.
[...] 转自:http://www./2009/04/29/git-and-repo-for-dummies/ [...] Pingback by [转]如何取得Android源代码 | Hi Java! — 2010-12-04 @ 15:32
32.
[...] 请先参考我的另一篇文章如何取得Android源代码,确保正确地拿到了Androidkernel/common项目的Goldfish分支(该分支用于构建运行在emulator上的系统内核,而主线则是用于构建运行在实际设备上的内核代码)上的内核代码。另外,需要提醒一下大家的是Android的sourcecode目前只能在Linux或者Mac OS下做交叉编译编译,Windows并没有被支持,以下将以Ubuntu 8.04为Host OS来说明。 [...] Pingback by » Blog Archive » 如何构建Android 1.5 Linux内核映像 — 2011-01-07 @ 03:20
33.
[...] 源文档 <http://www./2009/04/29/git-and-repo-for-dummies/> [...] Pingback by [转]Git和Repo扫盲——如何取得Android源代码 | { yeah : 必须哒 } — 2011-01-27 @ 11:48
34.
[...] —————————————– 参考资料:Git和Repo扫盲——如何取得Android源代码 [...] Pingback by Launcher源码初探_How Android » How Android — 2011-03-02 @ 00:07
35.
楼主神人,膜拜。 评论 by rickystudio — 2011-03-18 @ 20:29
36.
在windows下用git+脚本下载成了,但源码很乱,分析目录估计都得很长时间。目前还没有编译,在寻找 platforms 中的android.jar 源码. 评论 by Mr.TianShu — 2011-05-24 @ 21:19
37.
“如果需要某个branch的代码,用git checkout即可。比如我们刚刚拿了kernel/common.get的代码,那就先进入到common目录,然后用下面的命令:” kernel/common.get笔误,应该为kernel/common.git 评论 by tek-life — 2011-05-26 @ 16:06
38.
@tek-life 多谢指正! 评论 by William Hua — 2011-07-04 @ 09:27
39.
主要来复习下repo。。。 评论 by walfred — 2011-07-04 @ 14:16
40.
第三步 初始化没有多长时间的 关键是在同步 repo sync需要花很多时间的 评论 by walfred — 2011-07-04 @ 14:20
这篇文章上的评论的 RSS feed TrackBack URL 留下评论
姓名 (必填) 电子邮件 (不会被公开) (必填)
站点
页面:留言本
链接 关于 Daisy Daisy的Blog 朋友 Chocolly的Blog Tiger的Blog Uranus的Blog 链接 Androd中文社区 Android Fans Android Resource BriefSay.Com D调的华丽 Estoremap Gphone玩家中文网 Hong Kong Jean的博客 Life side Lwy’s Dreamland Neeke’s Blog TaKe it EASy! Tao’s opinion zhtlancer's blog 一家门 二月鸟的天空 刘荣星的博客 别用鼠标点我的博客 坏人 Huài Rén 怀念1997年的秋天 智康博客 月夜 灰狼博客 疯中舞步,梦的河流 短歌行 祭奠青春 笨猫’s Blog 菜鸟的技术站 还是那只鱼 分类目录: Android William和Daisy WordPress 业界动态 互联网 嵌入式开发 开源技术 生活点滴 移动互联网 项目管理 Search:
Archives: 2011 年四月 2010 年十一月 2010 年七月 2010 年六月 2010 年三月 2009 年十月 2009 年九月 2009 年七月 2009 年六月 2009 年五月 2009 年四月 2009 年三月 2009 年二月 2008 年十月 2008 年六月 2007 年七月 2007 年五月 2007 年三月 2007 年一月 2006 年十月 2006 年九月 Meta: 登录
RSS 评论 RSS 有效的 XHTML XFN WP Powered by WordPress |
|