一、安装

创建目录和修改环境变量

$ mkdir ~/bin
$ PATH=~/bin:$PATH

下载repo代码

$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

二、帮助

repo help

查询具体命令的帮助

repo help <COMMAND>

Repo 仓库状态

repo help init

状态

repo status .

三、初始化

$ repo init -u <URL> [<OPTIONS>]

示例

$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY repo init -u https://android.googlesource.com/platform/manifest

这个命令会在当前文件夹创建一个 .repo 文件夹,它包含

repo/ : 其实是一个repo的python源码

manifest.xml : 工作树的主配置文件,不要编辑这个文件

projects/ : 每个git工程的 .git结构

local_manifest.xml : 这个文件不是repo创建的,你可以创建这个文件来代替主配置文件,也就是临时测试用用

选项:

-u: 指定manifest仓库地址

-m: 选择仓库中某个manifest文件,如果没有设置,就使用default.xml

-b: 指定一个分支或修正版本

四、拉代码

repo sync

repo sync PROJECT0 PROJECT1 PROJECT2 ...

选项:

-j : 多任务,一般8核心可以开到16任务,过多会起反作用

-c: 只下载当前分支代码

-d: 让工程回退到manifest指定的版本

-f: 如果某个工程同步失败,继续同步

五、修改repo

如果你想修改repo的结构,应该在 .repo/manifests 文件夹里面修改,然后用git命令提交

manifest.xml 文件结构:

<?xml version="1.0" encoding="UTF-8"?>
<manifest> <remote name="shift"
fetch="git://git.mygit.com/" />
<default revision="kk-shift"
remote="shift"
sync-j="1" /> <project path="packages/shift/VideoPlayer" name="platform/packages/shift/VideoPlayer" />
<include name="another_manifest.xml" />
</manifest>
  1. manifest

    这个是配置的顶层元素,即根标志

  2. remote

    name:在每一个.git/config文件的remote项中用到这个name,即表示每个git的远程服务器的名字(这个名字很关键,如果多个remote属性的话,default属性中需要指定default remote)。git pull、get fetch的时候会用到这个remote name。

    alias :可以覆盖之前定义的remote name,name必须是固定的,但是alias可以不同,可以用来指向不同的remote url

    fetch :所有git url真正路径的前缀,所有git 的project name加上这个前缀,就是git url的真正路径

    review :指定Gerrit的服务器名,用于repo upload操作。如果没有指定,则repo upload没有效果

  3. default

    设定所有projects的默认属性值,如果在project元素里没有指定一个属性,则使用default元素的属性值。

    remote :远程服务器的名字(上面remote属性中提到过,多个remote的时候需要指定default remote,就是这里设置了)

    revision :所有git的默认branch,后面project没有特殊指出revision的话,就用这个branch

    sync_j : 在repo sync中默认并行的数目

    sync_c :如果设置为true,则只同步指定的分支(revision 属性指定),而不是所有的ref内容

    sync_s : 如果设置为true,则会同步git的子项目

  4. manifest-server

    它的url属性用于指定manifest服务的URL,通常是一个XML RPC 服务

    它要支持一下RPC方法:

    GetApprovedManifest(branch, target) :返回一个manifest用于指示所有projects的分支和编译目标。

    target参数来自环境变量TARGET_PRODUCT和TARGET_BUILD_VARIANT,组成$TARGET_PRODUCT-$TARGET_BUILD_VARIANT

    GetManifest(tag) :返回指定tag的manifest

  5. project

    需要clone的单独git

    name :git 的名称,用于生成git url。URL格式是:${remote fetch}/${project name}.git 其中的 fetch就是上面提到的remote 中的fetch元素,name 就是此处的name

    path :clone到本地的git的工作目录,如果没有配置的话,跟name一样

    remote :定义remote name,如果没有定义的话就用default中定义的remote name

    revision :指定需要获取的git提交点,可以定义成固定的branch,或者是明确的commit 哈希值

    groups :列出project所属的组,以空格或者逗号分隔多个组名。所有的project都自动属于"all"组。每一个project自动属于

    name:'name' 和path:'path'组。例如,它自动属于default, name:monkeys, and path:barrel-of组。如果一个project属于notdefault组,则,repo sync时不会下载

    sync_c :如果设置为true,则只同步指定的分支(revision 属性指定),而不是所有的ref内容。

    sync_s : 如果设置为true,则会同步git的子项目

    upstream :在哪个git分支可以找到一个SHA1。用于同步revision锁定的manifest(-c 模式)。该模式可以避免同步整个ref空间

    annotation :可以有0个或多个annotation,格式是name-value,repo forall命令是会用来定义环境变量

  6. include

    通过name属性可以引入另外一个manifest文件(路径相对与当前的manifest.xml 的路径)

    name :另一个需要导入的manifest文件名字

    可以在当前的路径下添加一个another_manifest.xml,这样可以在另一个xml中添加或删除project

  7. remove-project

    从内部的manifest表中删除指定的project。经常用于本地的manifest文件,用户可以替换一个project的定义

六、创建快照

你可以根据当前.repo的状态来创建一个配置文件

repo manifest -o snapshot.xml -r

这个文件可以用来保存当前的工作状态

恢复一个快照,可以用下面的命令

cp snapshot.xml .repo/manifests/
repo init -m snapshot.xml
repo sync -d

注意:没有commit的修改不会恢复,已经commit的但是没有push的是可以恢复的,但只能从本地恢复。

七、切换分支

repo start BRANCH_NAME PROJECT_NAME

查看分支

repo branches

提交

repo upload

安全删除不需要的分支

repo prune

八、基本工作流程

repo start 开始一个新的工作分支Use to start a new topic branch.

git commit提交修改Use git add to stage changes.

repo upload上传修改

九、一些问题

如果repo长时间没有响应,可以试试杀掉python进程

killall python

如果想要repo执行时的更多信息,可以加上 --trace 选项

参考1.http://xda-university.com/as-a-developer/repo-tips-tricks

参考2.https://source.android.com/source/using-repo

参考3.https://source.android.com/source/developing

参考4.http://blog.csdn.net/shift_wwx/article/details/19557031

Repo 的使用小结的更多相关文章

  1. repo的小结

    repo仅仅是google用Python脚本写的调用git的一个脚本,主要是用来下载.管理Android项目的软件仓库. 1. 下载 repo 的地址: http://android.git.kern ...

  2. repo 小结

    repo只是google用Python脚本写的调用git的一个脚本,主要是用来下载.管理Android项目的软件仓库. 1. 下载 repo 的地址: http://android.git.kerne ...

  3. npm 重点小结

    npm作为javascript一个用得比较广的包管理工具,已经集成在了node里面,基本一安装node就可以用npm了,十分方便.这里的小结主要沿着官方文档的思路,挑出一些比较重点的,平时常用的部分进 ...

  4. 【转】repo sync同步Android 源代码下载到99%出错

    原文网址:http://blog.csdn.net/mr_president/article/details/7693707 根据Google官网上的方法在我们实验室搭建了一个本地的Android代码 ...

  5. g4e基础篇#4 了解Git存储库(Repo)

    章节目录 前言 1. 基础篇: 为什么要使用版本控制系统 Git 分布式版本控制系统的优势 Git 安装和设置 了解Git存储库(Repo) 起步 1 – 创建分支和保存代码 起步 2 – 了解Git ...

  6. Mysql 5.7 基于组复制(MySQL Group Replication) - 运维小结

    之前介绍了Mysq主从同步的异步复制(默认模式).半同步复制.基于GTID复制.基于组提交和并行复制 (解决同步延迟),下面简单说下Mysql基于组复制(MySQL Group Replication ...

  7. iPad mini Retina越狱小结【2014年02月06日 - 初稿】

    Update History 2014年02月06日 - 初稿 0.引言 本来一直都没有苹果的产品除了第一代的iPod(没怎么使用最后大学送人了 @李清纯(255270520) ,巧合的是老妈学校发了 ...

  8. Git&Repo 命令大全 ***

    首先理解几个基本概念: origin:默认远程版本库: master:默认开发分支: 查看本地更新状态: git status jiangzhaowei@ubuntu$ git status # On ...

  9. linux命令小结

    查看IP  ip a 测试ip   ping 10.0.0.128 测试端口   telnet 10.0.0.128  22  # telnet + ip + 端口 Linux - CentOS 7. ...

随机推荐

  1. Mysql 创建普通用户、数据库、表、插入记录,用户赋权

    C:\phpStudy\MySQL\bin>mysql -uroot -proot -h127.0.0.1 //创建用户 mysql> insert into mysql.user (ho ...

  2. 【原创】纯CSS画黄金梅丽号!

    代码如下 <!DOCTYPE html> <!-- saved from url=(0055)http://jadyoap.bj.bcebos.com/ife%2FcssCatAni ...

  3. ASP.Net GridView 基础 属性和事件

    GridView 控件激发的事件: 我们后期重点看的是RowCommand.RowCreated.RowDataBound这三个事件.

  4. 【luogu P2831 愤怒的小鸟】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2831 写点做题总结:dp,搜索,重在设计状态,状态设的好,转移起来也方便. 对于一条抛物线,三点确定.(0, ...

  5. LWIP network interface 即 LWIP 的 硬件 数据 接口 移植 首先 详解 STM32 以太网数据 到达 的第一站: ETH DMA 中断函数

    要 运行  LWIP  不光 要实现  OS  的 一些 接口  ,还要 有 硬件 数据 接口 移植 ,即 网线上 来的 数据 怎么个形式 传递给  LWIP ,去解析 做出相应的 应答  ,2017 ...

  6. Gradle Goodness: Automatic Clean Tasks

    Gradle adds the task rule clean<Taskname> to our projects when we apply the base plugin. This ...

  7. .NET Core中NETSDK1061错误解决(转载)

    NETSDK1061错误解决 在vs生成和运行都正常,发布的时候报错 .netcore控制台项目引用另一个类库 错误信息 NETSDK1061: 项目是使用 Microsoft.NETCore.App ...

  8. DG不同步,MRP0进程打不开

    问题描述:主库备库之前正常连接,但是昨天磁盘空间满了之后,由于不知什么原因将备库重做日志删了,今天早上发现DG不同步的报警. 当时思路如下:1.通过select thread#,low_sequenc ...

  9. 虚拟机重启网络服务失败,当查看状态显示错误Failed to start LSB......

    重启网络失败截图 从本质上来看出现这样的问题,是因为拷贝过来的虚拟机重新分配了网卡MAC地址.这样造成的结果是配置文件中MAC与当前网卡MAC不一致.所以只需要修改一下配置文件即可. 用ip addr ...

  10. 11.1 js中级,数据类型、数据储存方式、作用域内存空间的区别以及例识别。

    一. 基本数据类型和引用数据类型的区别. 1.基本数据类型:基本数据类型就是简单的操作值. 2.引用数据类型:就是把引用的地址赋给变量. 堆内存: 就是存放代码块的,存放形式有两种 1)对象以键值对的 ...