git与repo

任何一个学习Android开发的开发者如果想要深入学习Android,一定要看Android源码,网上关于下载Android源码的教程有很多,如果你已经FQ了,你可以直接参考Google官网的教程或者老罗最新出的教程,如果你还没有FQ,你可以用清华大学的Android源码镜像

我一开始没有用他们所推荐的Ubuntu下载,而是在听闻Windows 10专业版里内置了一个Ubuntu子系统以后,我尝试用Windows 10下载源码,但遇到很多问题,在网上又搜不到相应的解释,而且repo这个东西搞得我很混乱,完全不知道是个啥,后来公司内部也开始切换到repo和git了,才渐渐搞懂两者的关系,也“成功”在Windows 10 下载了Android 源码。

Git作为一个版本控制工具,功能很强大,新建分支,切换分支都很快,小团队用Git就能很好地管理好了,但如果是Android系统如此庞大的工程呢,我们知道全套Android源码是很大很大的,目录结构也很复杂,如果直接将其init成一个Git库,简直是灾难,也不符合解耦的要求。
Android Source
要知道Git是无法将整个库中间的某个目录单独clone出来的,这样如果我只是负责frameworks的,但我下代码的时候却得把整个都下下来。

那怎么办呢,很简单,分模块嘛,比如就把根目录下的每个目录当做一个单独的Git库,这样开发只要专注于自己的模块就行,其他模块的代码就当看不见。嗯,很好,问题似乎解决了。但这样还不够,你总得有一套完整的Android 源码才能编译出一个版本吧,你怎么知道这个大版本里包含了哪个库呢,有人会说,为啥要记录呢,不就这么些库嘛,依次取出来不就行了。或许对于我们工作中接触到的工程规模来说,这样是够了,但Android,都已经7.1.1了,相比较一开始,Android本身也发生了翻天覆地的变化,有些模块在演进过程中可能就渐渐被抛弃了,这个时候我们就需要一个定义一个文件去记录每一个版本的Android到底用了哪些库。

以上其实就是repo的原理和所解决的问题,让我们来看看repo到底是做的。

当你完成了repo init以后,你会在你的目录下发现一个.repo的隐藏目录,进到.repo/manifest/中,打开default.xml,这就是之前所说的用来记录一个版本中需要哪些库的文件。下图是android-4.0.1_r1版本所对应的default.xml文件:

repo/default.xml

仔细看看,是不是很熟悉?但Google分模块分的更细一些,并不是简单地将一级目录直接就划成一个模块,比如external,它是以二级目录划分的,而device目录下划分得更细一些。而revision定义的则是对应库的对应分支。

好了,这个文件看完关闭之后,我们在.repo/manifest/目录下运行git branch -a来看看。

这里写图片描述

这下就明了了吧,这个manifest目录本身其实也是一个git库,一个Android版本对应一个分支,其中的default.xml就记录着这个版本所需要的库,repo工具再根据这个文件去把取各个库的对应分支并最终组合起来。

总结一下,Git管理单独的模块,而repo管理所有的Git库,将多个Git库组合在一起,形成一个完整的大版本。

转自https://blog.csdn.net/u013171283/article/details/80895125

猜你喜欢

转载自www.cnblogs.com/foolish-xc/p/10994201.html