Repo 的使用小结
一、安装
创建目录和修改环境变量
$ 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>
manifest
这个是配置的顶层元素,即根标志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没有效果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的子项目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的manifestproject
需要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命令是会用来定义环境变量include
通过name属性可以引入另外一个manifest文件(路径相对与当前的manifest.xml 的路径)
name :另一个需要导入的manifest文件名字
可以在当前的路径下添加一个another_manifest.xml,这样可以在另一个xml中添加或删除projectremove-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 的使用小结的更多相关文章
- repo的小结
		
repo仅仅是google用Python脚本写的调用git的一个脚本,主要是用来下载.管理Android项目的软件仓库. 1. 下载 repo 的地址: http://android.git.kern ...
 - repo 小结
		
repo只是google用Python脚本写的调用git的一个脚本,主要是用来下载.管理Android项目的软件仓库. 1. 下载 repo 的地址: http://android.git.kerne ...
 - npm 重点小结
		
npm作为javascript一个用得比较广的包管理工具,已经集成在了node里面,基本一安装node就可以用npm了,十分方便.这里的小结主要沿着官方文档的思路,挑出一些比较重点的,平时常用的部分进 ...
 - 【转】repo sync同步Android 源代码下载到99%出错
		
原文网址:http://blog.csdn.net/mr_president/article/details/7693707 根据Google官网上的方法在我们实验室搭建了一个本地的Android代码 ...
 - g4e基础篇#4 了解Git存储库(Repo)
		
章节目录 前言 1. 基础篇: 为什么要使用版本控制系统 Git 分布式版本控制系统的优势 Git 安装和设置 了解Git存储库(Repo) 起步 1 – 创建分支和保存代码 起步 2 – 了解Git ...
 - Mysql 5.7 基于组复制(MySQL Group Replication) - 运维小结
		
之前介绍了Mysq主从同步的异步复制(默认模式).半同步复制.基于GTID复制.基于组提交和并行复制 (解决同步延迟),下面简单说下Mysql基于组复制(MySQL Group Replication ...
 - iPad mini Retina越狱小结【2014年02月06日 - 初稿】
		
Update History 2014年02月06日 - 初稿 0.引言 本来一直都没有苹果的产品除了第一代的iPod(没怎么使用最后大学送人了 @李清纯(255270520) ,巧合的是老妈学校发了 ...
 - Git&Repo 命令大全 ***
		
首先理解几个基本概念: origin:默认远程版本库: master:默认开发分支: 查看本地更新状态: git status jiangzhaowei@ubuntu$ git status # On ...
 - linux命令小结
		
查看IP ip a 测试ip ping 10.0.0.128 测试端口 telnet 10.0.0.128 22 # telnet + ip + 端口 Linux - CentOS 7. ...
 
随机推荐
- linux mint sublime3的c编译环境配置
			
通过Tools>>Build System>>New Build System弹出新建文件来设置,也可以replace覆盖以前的 一种方式,konsole可以通过sudo ap ...
 - CCControlExtension/CCControl
			
#ifndef __CCCONTROL_H__ #define __CCCONTROL_H__ #include "CCInvocation.h" #include "C ...
 - 随手练—— 洛谷-P2945 Sand Castle(贪心)
			
题目链接:https://www.luogu.org/problemnew/show/P2945 (原题 USACO) 要求钱最少,就是试着让M和B的离散程度最小(我自己脑补的,就是总体更接近,我不知 ...
 - JavaScript脚本的执行原理?
			
JavaScript是一种动态.弱类型.基于原型的语言,通过浏览器可以直接执行. 当浏览器遇到\<script>标记的时候,浏览器会执行之间的JavaScript代码.嵌入的js代码是顺序 ...
 - Spring(十五)之声明式事务
			
声明式事务管理方法允许你在配置的帮助下而不是源代码硬编程来管理事务.这意味着你可以将事务管理从事务代码中隔离出来.你可以只使用注释或基于配置的 XML 来管理事务. bean 配置会指定事务型方法.下 ...
 - VC++ TCP网络控制台程序
			
在Windows7系统下,采用工具为VS2008,Win32控制台应用程序,编写一个基于TCP的Client/Server网络程序. 1.服务器端代码 #include <WinSock2.h& ...
 - EF Core 2.1 支持数据库一对一关系
			
在使用EF Core和设计数据库的时候,通常一对多.多对多关系使用得比较多,但是一对一关系使用得就比较少了.最近我发现实际上EF Core很好地支持了数据库的一对一关系. 数据库 我们先来看看SQL ...
 - 图形剖析,当给 ul 设置padding=0, margin=0后 li前面的小黑点消失的现象原理!
 - .net core API 使用swagger
			
第一种方法:直接添加swagger,会在app_start中生成SwaggerConfig,在该文件中配置相关内容(把生成xml打开): 第二种方法:添加四个引用文件Swashbuckle.AspNe ...
 - 理解Web应用程序的代码结构和运行原理(3)
			
1.理解Web应用程序的运行原理和机制 Web应用程序是基于浏览器/服务器模式(也称B/S架构)的应用程序,它开发完成后,需要部署到Web服务器上才能正常运行,与用户交互的客户端是网页浏览器. 浏览器 ...