RK3568平台入门到精通系列讲解之代码管理(REPO版本管理)

一、概述

REPO是GOOGLE用Python脚本写的调用GIT的一个脚本,主要是用来下载、管理Android项目的软件仓库。

首先REPO是我们以 GIT为基础构建的代码库管理工具。REPO可以在必要时整合多个GIT代码库,将相关内容上传到我们的修订版本控制系统,并自动执行Android开发工作流程的部分环节。

REPO并非用来取代GIT,只是为了让您在 Android 环境中更轻松地使用GIT。

上一章节中,介绍了GIT版本控制的使用。 本章节介绍下REPO工具组的使用。并且通过REPO构建一个自己的版本库。

二、REPO基本命令

2.1 repo命令下载

$ git clone https://github.com/friendlyarm/repo--depth 1 tools

$ git clonehttps://mirrors.tuna.tsinghua.edu.cn/git/git-repo

$ git clone http://php.webtutor.pl/en/wp-content/uploads/2011/09/repo

2.2 repo常用命令

2.2.1 init

在当前目录中安装Repo。这会创建一个 .repo/ 目录,其中包含用于 Repo 源代码和标准 Android 清单文件的Git 代码库,还包含 manifest.xml 这是一个指向 .repo/manifests/ 目录中所选清单的符号链接(也就是默认的 default.xml)

/* 初始化命令

* URL:指定 manifest 仓库地址

* 参数:

* -u: 指定连接到的 manifest 仓库地址

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

* -b: 选择一个 manifest 仓库中的一个特殊的分支或修正版本

*/

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

2.2.2 sync

下载新的更改并更新本地环境中的工作文件。如果在未使用任何参数的情况下运行repo sync,则该操作会同步所有项目的文件

运行 repo sync 后,出现以下情况:

如果目标项目从未同步过,则 repo sync 相当于 git clone 。远程代码库中的所有分支都会复制到本地项目目录中

如果目标项目已经同步过,则 repo sync 相当于以下命令

$ git remote update

$ git rebase origin <BRANCH>

其中 <BRANCH> 是本地项目目录中当前已检出的分支。如果本地分支没有跟踪远程代码库中的分支,则相应项目不会发生任何同步

如果git rebase操作导致合并冲突,那么需要使用普通 Git 命令(例如 git rebase --continue)来解决冲突

/* 拉代码命令

* 参数:

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

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

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

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

* -s: 同步到当前清单服务器元素指定的一个已知的良好版本

*/

$ repo sync

$ repo sync -c -j4

2.2.3 upload

对于指定的项目,Repo 会将本地分支与最后一次 repo sync 时更新的远程分支进行比较。Repo 会提示选择一个或者多个尚未上传以供审核的分支

选择一个或多个分支后,所选分支上的所有提交都会通过 HTTPS 连接传输到 Gerrit

/* 提交修改

* 参数:

* --reviewer: 指定Reviewer的邮箱地址

*/

repo upload --reviewer="xxx"

2.2.4 start

从清单中指定的版本开始,创建一个新的分支进行开发。实际上就是 gitcheckout -b命令的封装,以清单文件中的分支为基础,在本地创建新的分支

repo start 与 git checkout -b 的区别:

repo start 是在清单文件设定的分支基础上创建新的分支

git checkou -b 是在当前所在分支的基础上创建新的分支

如果清单文件中设定的分支是 remoteBranchName, 创建新的分支 localBranchName

为单个项目创建 localBranchName 分支

repo start localBranchName 项目绝对路径

为所有项目创建 localBranchName 分支

repo start localBranchName –all

2.2.5 forall

$ repo forall –c git …..

对由repo管理的git库进行操作,

如repo forall –cgit checkout 45451

所有库检出45451分支与远程45451分支对应(若无,则跳过)

2.2.6 checkout

$ repo checkout <branchname> [projectname] //等同于带项目参数的git checkout

2.2.7 branch

$ repo branch[projectname] //读取项目分支的情况

2.2.8 version

$ repo version //显示repo版本

2.2.9 其他

$ repo abandon <branchname> [projectname] //删除指定项目的指定分支,强制删除不管是否有合并,等同git branch –D

$ repo status [projectname] //显示分支及修改情况

三、REPO构建自己的版本库

repo通过manifest.xml来同步代码,xml文件内容如下:

<manifest>

<remote fetch="ssh://gitserver"name="origin" review="http://gerrit:8080"/>

<defaultrevision=“master” remote=“origin” />

<projectpath="build" name="platform/build"/>

<projectpath="abi/cpp" name="platform/abi/cpp" />

<projectpath="bionic" name="platform/bionic" />

<projectpath="bootable/bootloader/lk" name="kernel/lk" />

下面以T7 Linux SDK为例,先列出T7 BSP的目录组织架构:

方便管理先做七个仓库(可以视情况而定):

t7linux-auto.git ->仓库存储build.shcomp_qtLib-590_only.sh comp_uboot_boot0_only.sh update_kernel.bat

brandy.git ->uboot等其他

buildroot-201611.git ->rootfs相关

doc.git ->文档相关

linux-3.10.git ->kernel相关

tools.git ->tool相关

manifest.git ->用来repo init时候指定规则,且只有一个文件default.xml

3.1 服务端空仓库搭建

选择合适目录下创建:

$ mkdir t7linux-auto.git

$ mkdir brandy.git

$ mkdir buildroot-201611.git

$ mkdir doc.git

$ mkdir linux-3.10.git

$ mkdir tools.git

$ mkdir manifest.git

3.2 服务端空仓库初始化

$ cd t7linux-auto.git && git init --bare .git

$ cd brandy.git && git init --bare .git

$ cd buildroot-201611.git && git init --bare.git

$ cd doc.git && git init --bare .git

$ cd linux-3.10.git && git init --bare .git

$ cd tools.git && git init --bare .git

$ cd manifest.git && git init --bare .git

3.3 上传代码到服务器各.git仓库中

此操作可以在服务器或本机操作。

仓库一:

$ git init

$ git add build.sh comp_qtLib-590_only.shcomp_uboot_boot0_only.sh update_kernel.bat

$ git commit –a –m “some commit logs.”

$ git remote add master username@serverip:/t7linux-auto.git ->设置远程仓库,使用的ssh协议

username:用户名 serverip:服务器ip地址

$ git push master --all

仓库二:

$ cd brandy && git init && git add ./*&& git commit -a -m "some commit logs."

$ git remote add master username@serverip:/ brandy.git

$ git push master --all

buildroot-201611.git、doc.git、linux-3.10.git、tools.git操作与以上类似…

……………..

仓库七:

$ mkdir repo

$ cd repo

新建一个default.xml文件,编辑如下:

$ vim default.xml

<?xml version="1.0"encoding="UTF-8"?>

<manifest>

<remote fetch="ssh://username@serverip:/home/username /repo" name="origin"/>

<default remote="origin" revision="master"/>

<project path=" t7linux-auto "name=" t7linux-auto "/>

<project path=" t7linux-auto /brandy"name="brandy"/>

<project path=" t7linux-auto/buildroot-201611" name="buildroot-201611"/>

<project path=" t7linux-auto /doc"name="doc"/>

<project path=" t7linux-auto /linux-3.10"name="linux-3.10"/>

<project path=" t7linux-auto /tools"name="tools"/>

</manifest>

$ git init && git add default.xml &&git commit -a -m " some commit logs."

$ git remote add masterusername@serverip:/home/username/repo/manifest.git

$ git push master –all

3.4 客户端下载代码

下载repo命令:

$ curlhttp://php.webtutor.pl/en/wp-content/uploads/2011/09/repo > /opt/bin/repo

初始化仓库:

$ repo init -ussh://username@serverip:/home/username/repo/manifest -b master

(可以指定不同的远程分支来针对应用、bsp人员权限管理)

3.5 同步

$ repo sync

$ repo start master --all

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

James Joe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值