输入“/”快速插入内容

Repo的使用入门

2024年9月12日修改
一、安装
创建目录和修改环境变量
代码块
$ 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