google repo使用说明

date: 2013.05.29; modification:2015.03.04

目录:

1 概述

Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的分布式版本控制软件.

Android也是由git管理的代码仓库, 但是Android是由kernel, Dalvik, Bionic, prebuilt, build等多个Git项目组成, 单独使用git来一个个的手动管理比较麻烦, 所以Android项目编写了一个名为Repo的Python的脚本来统一管理这些项目的仓库, 使得Git的使用更加简单.

2 名词

3 安装

$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

网上有说下载repo的地址为:

curl http://android.git.kernel.org/repo >~/bin/repo

但是我试着不好用, 目前(2013.05.29)用我上面写的可以用. 如果还是不行的话, 请参考: 官网链接

4 使用流程

  1. 上面所说的下载repo, 只是下载了一个简单的叫repo的shell脚本. 这其实只是个皮. 真正的repo也就是python的脚本, 要用repo init来下载.
  2. 用repo init来获取真正的repo(python写成的)的git仓库, 以及Android源码的列表信息(manifest)的git仓库. 这些会放在当前路径下一个.repo文件夹里.
  3. 用repo sync来获取真正的Android代码.

5 命令使用

总体的命令格式为:

repo COMMAND OPTIONS

获取帮助:

repo help COMMAND

5.1 init

格式:

repo init -u URL [OPTIONS]

选项:

注: 对于下文提到的其他的命令, 需要在刚刚repo init所在的路径(即.repo的父级), 或者其子目录下执行.

使用:

如果使用默认:

repo init -u https://android.googlesource.com/platform/manifest

如果指定某个分支:

repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1

授权:

repo init -u https://android.googlesource.com/a/platform/manifest

本地镜像:

mkdir <somepath>/android_mirror
cd <somepath>/android_mirror
repo init -u https://android.googlesource.com/mirror/manifest --mirror
repo sync

将本地镜像作为仓库服务器使用:
mkdir <somepath2>/myandroid
cd <somepath2>/myandroid
repo init -u /usr/local/aosp/mirror/platform/manifest.git
repo sync

5.2 sync

格式:

repo sync [PROJECT_LIST]

作用:

说明: * 如果rebase造成了merge冲突, 则需要手动执行git命令(如git rebase --continue)来解决冲突.

选项:

还不太理解, 暂时原文拷贝:

5.3 查看android各版本分支

git --git-dir .repo/manifests/.git/ branch -a

5.4 status

格式:

repo status [PROJECT_LIST]

作用:

类似于git status. 只是输出格式如下:

说明:

输出为两列字母:

第一列大写字母, 表示index(staged)与上次commit的区别:

letter meaning description
- no change same in HEAD and index
A added not in HEAD, in index
M modified in HEAD, modified in index
D deleted in HEAD, not in index
R renamed not in HEAD, path changed in index
C copied not in HEAD, copied from another in index
T mode changed same content in HEAD and index, mode changed
U unmerged conflict between HEAD and index; resolution required

第二列小写字母, 表示当前工作路径与index(staged)的区别:

letter meaning description
- new/unknown not in index, in work tree
m modified in index, in work tree, modified
d deleted in index, not in work tree

5.5 start

格式:

repo start BRANCH_NAME [PROJECT_LIST]

作用:

创建新分支. 可以用"."表示当前路径下的工程(project).

6 常见问题

6.1 repo init - gpg: 无法检查签名: 找不到公钥的解决方法

6.1.1 方法一

出现此问题是repo版本不对的问题, 具体原因可网上搜索下, 据说是google 代码传错导致. 我更换过repo后, 问题已经解决.

curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

6.1.2 方法二

删除用户目录下的.repoconfig($ sudo rm -r ~/.repoconfig), 再repo init, 问题解决.

为什么会有这个问题? 可以看看自己下载的repo代码中是不是写道新建一个.repoconfig文件夹, 用来保存一些签名版本信息. 如果使用过其它来源的repo, 签名信息在repo init时会与.repoconfig中内容不一致, 就会报这个错. 把这个文件夹删除, 用电脑中当前的repo重新生成签名信息, 就解决问题.

7 参考文献

source.android.com:Downloading the Source source.android.com:Repo command reference