repo是什么?
官方的定义:Repo是谷歌用python脚本写的调用git的一个脚本,可以实现管理多个git库。
Android的源代码使用Repo 命令行工具来管理多个git仓库,大概有百多个。要想克隆和管理百多个 Git 仓库,不是一件简单的事情。Repo 命令行工具对 Git 部分命令封装,将百多个 Git 库有效的进行组织。
Linux下安装Repo
linux下的Repo安装,稍简单些。
$ curl http://android.git.kernel.org/repo >~/bin/repo
$ chmod a+x ~/bin/repo
$ export PATH=$PATH:~/bin
Windows下Repo安装
repo原本是谷歌搞的一个方便下载AOSP的工具基于git,但由于种种原因不能直接在Windows上使用。但好在有windows版本以用。Repo的Windows版本:
https://github.com/esrlabs/git-repo
链接地址:GitHub - esrlabs/git-repo: repo - The multiple repository tool (also works on MS Windows!)
如果按照网上搜到的方法,安装会遇到不少问题。这里介绍下一个一定能成功的方法。
网上的方法:
一、环境准备:
1.安装Git for Windows,360软件管家里可以直接搜到64位的git for windows。
2.安装Python 2.7,360软件管家里可以直接搜到Python 2.7。
3.配置系统环境变量,Git 和python加入到环境变量。
二、安装Repo:
1.在任意处打开 Git Bash 命令行,注意必须是Git的git bash命令行。
mkdir ~/bin curl https://raw.githubusercontent.com/esrlabs/git-repo/stable/repo > ~/bin/repo curl https://raw.githubusercontent.com/esrlabs/git-repo/stable/repo.cmd > ~/bin/repo.cmd chmod a+rx ~/bin/repo
2.下载Android的AOSP源代码,新建aosp目录,cd aosp进入目录。
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-10.0.0_r25 --repo-url=https://github.com/esrlabs/git-repo.git
3.上一步repo init执行成功后,执行repo sync开始正式下载源代码。
遇到的问题:
Could not resolve host: raw.githubusercontent.com
这个地址可能被墙了,即使手动改hosts文件也不一定管用。
一定能够成功的办法
1.打开github上的git-repo仓库,把仓库代码clone或者zip包下载下来。
https://github.com/esrlabs/git-repo
把repo和repo.cmd复制一份放置在C:\Users\Administrator\bin
注意环境不同可能不一定是这个路径。这个位置是前几步mkdir ~/bin创建的目录。可以在git bash下进入到bin目录通过pwd命令查看路径。
2.在需要下载android源码的aosp目录下,新建个.repo文件夹。在.repo文件夹下再建个repo文件夹。把下载的git-repo仓库内的源码放在repo文件夹下。
或者省略这步,直接把下载的 git-repo仓库放到git bash的~/bin下应该也可以。
3.下载Android 源码。
https://mirrors.tuna.tsinghua.edu.cn/
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-10.0.0_r25
最后, repo sync命令,即开始最终的代码下载。
LineageOS 14.1下载
Lineage OS 系统介绍
大伙还记得 CyanogenMod 吗?给安卓手机刷过机的用户基本都知道 CyanogenMod 的ROM,其实国内很多第三方的ROM都是基于 CyanogenMod 的ROM修改优化的,最近Cyanogen 团队重新以Lineage OS的新项目来出发,继续为众多安卓手机开发完备独居特色的操作系统。
该系统ROM相当的纯净,也就几百兆大小,运行自然也流畅,可以拿一些老旧手机刷机来练练手。对LineageOS刷机感兴趣的可关注论坛,有详细的刷机教程:LineageOS中文论坛 - Powered by Discuz!
LineageOS 14.1基于android7.1。
下载过程:
新建文件夹lineageOS,在lineageOS文件夹内新建.repo文件夹,在.repo文件夹内,拷贝进去repo那个代码仓库。接下来:
repo init -u git://github.com/lineageos/android.git -b cm-14.1 repo sync -c
即可下载。为了加快下载速度,可把 .repo里面的manifests文件夹修改里面的default.xml文件,修改如下,使用国内镜像https://github.com.cnpmjs.org/替换github.com
<remote name="github" fetch="https://github.com.cnpmjs.org/" review="https://github.com.cnpmjs.org/" />
https://android.googlesource.com 镜像使用如下替换:
<remote name="aosp" fetch=".." review="https://android-review.googlesource.com/" />
改为下面的即可:
<remote name="aosp" fetch="git://aosp.tuna.tsinghua.edu.cn/android/" review="https://android-review.googlesource.com/" revision="refs/tags/android-7.1.2_r36" />
repo相关知识介绍
.repo/manifests是个被git管理的仓库,这里放的是所有的manifest文件(*.xml)。
因为被git管理,固然有分支,-b可以切换到你想要的分支然后再下载相关的xml文件,当然具体下载那个xml还要看-m参数了,所以如果你仅仅指定-b而没有-m的话,就是下载-b指定分支下的default.xml文件。
如果不指定-b参数,那么会默认使用master分支。
repo sync [project-list]
下载最新本地工作文件,更新成功,这本地文件和repository 中的代码是一样的。 可以指定需要更新的project , 如果不指定任何参数,会同步整个所有的项目。
如果是第一次运行 repo sync , 则这个命令相当于 git clone ,会把 repository 中的所有内容都拷贝到本地。
如果不是第一次运行 repo sync , 则相当于 git remote update ; git rebase origin/branch . repo sync 会更新 .repo 下面的文件。
如果在merge 的过程中出现冲突, 这需要手动运行 git rebase --continue
repo默认会同步git库的所有远程分支的代码,但实际开发过程中,用到的分支是有限的。使用sync的-c参数,可以只下载manifest中设定的分支,这会节省代码下载时间以及本地的磁盘空间。
在repo init的时候,会从远程下载manifests和repo这两个git库。默认情况下这两个git库的地址都是写死在repo这个python脚本里面的。
对于AOSP而言,这两个git库的地址显然是google提供的。 但由于google访问受限的缘故,会导致init时,无法下载manifests和repo。这时候,可以使用init的-u和–repo-url参数,自定义这两个库的地址,辅以–no-repo-verify来绕过代码检查。最后,想要快速下载android的源代码的话,可以试下这个操作。
github的国内访问太慢了,使用国内镜像源吧。记住这个地址github的国内镜像源:
https://github.com.cnpmjs.org/
在本地得到.repo文件夹,进去会看到manifests文件夹,修改里面的default.xml文件 。
把里面的fetch="https://github.com/",review="https://github.com/"替换为:"https://github.com.cnpmjs.org/"
<remote name="github" fetch="https://github.com.cnpmjs.org/" review="https://github.com.cnpmjs.org/" />