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 文件夹,它包含

1.png

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 <numbers>: 多任务,一般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'组。例如<project name="monkeys" path="barrel-of"/>,它自动属于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上传修改

2

九、一些问题

如果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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,598评论 18 139
  • 本文作者陈云峰,转载请注明。 这篇文章记录个人常用的一些命令,和记不住的一些命令,转载了并不断更新。 Git官网 ...
    陳云峰阅读 2,805评论 0 24
  • 哪有什么酒的故事 HI,喝的吆五喝六的小伙伴们 之前说好帮你组一个酒柜的 今天来说说小阿定最爱的利口酒篇 利口酒就...
    三只大叔阅读 501评论 0 0
  • 1、 第一次见刘叔的感觉并不好,在那个炎热的夏天他看我满头大汗从外面跑进来坐在他那台“别摸我”跑车的副驾位置,满脸...
    我不是蜗牛阅读 379评论 0 2
  • 我们走在水的两岸 水清灵灵的 你是透明的 低头看看水里的自己 咦?鱼儿游进她的眼里了 不着一丝痕迹 风飘过 吹皱了...
    彦之青阅读 127评论 0 0