文章目录

  • 一、关于repo
    • 1.1 介绍清单库文件
    • 1.2 下载repo代码
    • 1.3 探究repo文件夹
  • 二、 repo常用命令
    • 2.1 解析拉取代码的命令
    • 2.2 同步代码(repo sync)
    • 2.3 创建并切换分支(repo start)
      • 知识补充——什么是分支
    • 2.4 查看分支(repo branches)
    • 项目清单文件default.xml 文件示例
  • 参考

一、关于repo

repo是Google开发的用于管理Android版本库的一个工具,repo并不是用于取代git,而是用Python(所以你在后面会看到很多地方提及python)对git进行了一定的封装,简化了对多个Git版本库的管理。对于repo管理的任何一个版本库,都需要使用git命令进行操作。

1.1 介绍清单库文件

清单文件是以xml的格式组织的,一个清单库可以包含多个清单文件和多个分支,每个清单文件和分支都有对应的版本。

  • remote元素:定义了名为korg的远程版本库,库的基址为git://172.16.1.31
  • project元素:用于定义一个项目,path属性表示在工作区clone的位置,name属性表示该项目的远程版本库的相对路径。
  • default元素:设置各个项目默认远程版本库为Korg,默认的分支为gingerbread-exdroid-stable。各个项目还可以定义自己的remote和revision覆盖默认的配置。
  • project元素下的子元素copyfile 定义了项目clone后的一个附件动作,从src拷贝文件到dest

1.2 下载repo代码

1、新建项目存放的文件夹

mkdir mstar648

2、进入到项目文件夹

cd mstar648

3、执行代码拉取的命令

repo init -u ssh://ppgerrit.com/Mstar648/manifest.git -b 648_cultraview -m ppos4.5.0_cultraview.xml

1.3 探究repo文件夹

通过如下命令查看mstar648目录下

ls -a

可以看到目录下有个.repo文件夹,说明mstar648项目是一个用repo管理的版本库。进入到.repo,并查看目录内容。

可以看到.repo目录下有manifest、project、repo文件夹等信息。

  • 如果想查看Python封装的脚本,可到.repo/repo下看到:

  • 如果想查看某个模块当前是在哪个分支,可以进入到manifests中去:因为我们刚拉取代码的时候是ppos4.5.0_cultraview.xml,所以通过vim打开ppos4.5.0_cultraview.xml,然后可以通过 /模块名 ,查看到模块的分支信息。例如我们要看到PposTv的分支信息,就可以搜索/PposTv

二、 repo常用命令

2.1 解析拉取代码的命令

例如我们拉取代码的时候的命令如下:

repo init -u ssh://ppgerrit.com/Mstar648/manifest.git -b 648_cultraview -m ppos4.5.0_cultraview.xml

其中:

  • u:指定一个URL,其连接到一个manifest仓库
  • b:选择manifest仓库中的一个特殊分支
  • m:在manifest仓库中选择一个xml文件

repo init要完成如下操作:

  • 完成repo工具的完整下载,执行的repo脚本只是引导程序

  • clone清单库manifest.git (地址是-u后面的参数)

  • clone的清单库位于manifest.git中,clone到本地.repo/manifest中,.repo/manifest.xml只是符号链接,它指向的是.repo/manifests/default.xml

  • 如果manifest中有多个xml文件,repo init可以任意选择其中一个,默认选择的是default.xml。

上面的拉取代码示例选择的是ppos4.5.0_cultraview.xml里面的配置,那么.repo/manifest.xml指向的是.repo/manifests/ppos4.5.0_cultraview.xml

2.2 同步代码(repo sync)

执行了repo init 命令后,我们需要执行如下命令同步代码:

repo sync

参照清单文件.repo/manifest.xml克隆并同步版本库。如果项目版本库不存在,则执行repo sync命令相当于执行git clone;如果项目版本库存在,则相当于执行下面两条指令:

  • git remote update

    相当于对每一个remote源执行了fetch操作

  • git rebase origin/branch

    对当前分支的跟踪分支执行rebase操作

2.3 创建并切换分支(repo start)

刚clone下来的代码是没有分支的,例如:

repo start 的实质就是对git checkout -b 的封装,可以为单个项目或所有项目以清单文件中已设定的分支为基础,在本地创建新的分支。

repo start 与 git checkout -b 的区别:

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

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

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

  • 为单个项目创建localBranchName分支的命令如下:

      repo start localBranchName 项目绝对路径
    
  • 为所有项目创建localBranchName分支的命令如下:

      repo start localBranchName --all
    

知识补充——什么是分支

假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。

现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。

2.4 查看分支(repo branches)

本文下面所有的命令都是在单个项目中运行!!!

例如查看上面拉取的mstar648项目下各模块的分支信息

在mstar648项目下运行如下命令,就能知道自己当前的分支:

repo branches

项目清单文件default.xml 文件示例

repo 使用的项目清单是一个 git 仓库,默认配置是仓库中包含一个 default.xml文件,此文件指定了项目地址和代码下载之后的目录结构。

<?xml version="1.0" encoding="UTF-8" ?><manifest><!-- remote: 远程代码库配置name: 远程仓库名,在使用 git clone 时默认为 originfetch: 远程仓库地址,用户和 project 节点中的 name 一起确定项目地址--><!-- remote server --><remotename="github"fetch="https://github.com" /><remotename="rx"fetch="https://github.com/ReactiveX" /><remotename="square"fetch="https://github.com/square" /><!--default: 默认配置remote: 默认使用的远程仓库revision: 默认使用的分支sync-j: 同步代码时的并发数--><defaultremote="github"revision="master"sync-j="1" /><!--project: 单个代码库配置name: 项目地址,和指定的 remote 节点中的 fetch 一起组成仓库地址(fetch + name)group: 项目所属分组,可选path: 项目拉取到本地后所在目录remote: 指定所在远程仓库revision: 指定代码分支--><!-- RxJava --><projectname="RxJava"group="android,rx"path="lib/RxJava"remote="rx"revision="2.x" /><!-- RxAndroid --><projectname="RxAndroid"group="android,rx"path="lib/RxAndroid"remote="rx"revision="2.x" /><!-- OkHttp --><projectname="okhttp"group="android,square"path="lib/OkHttp"remote="square" /><!-- LeakCanary --><projectname="leakcanary"group="android,square"path="lib/LeakCanary"remote="square" /><!-- Retrofit --><projectname="retrofit"group="android,square"path="lib/Retrofit"remote="square" /><!-- Glide --><projectname="bumptech/glide"group="android,bumptech"path="lib/Glide"/><!-- Volley --><projectname="google/volley"group="android,google"path="lib/Volley"/>
</manifest>

参考

https://blog.csdn.net/salmon_zhang/article/details/79180075
https://www.cnblogs.com/bill-technology/p/4130851.html

【计算机基础】repo学习笔记相关推荐

  1. 【计算机图形学基础】学习笔记 02 图形系统

    [计算机图形学基础]学习笔记 02 图形系统 一张图概括基本内容. 思维导图 References [1] 徐文鹏, 都伟冰, 等.计算机图形学基础:OpenGL版(第二版)[M].北京:清华大学出版 ...

  2. Python基础语法学习笔记

    Python基础语法学习笔记 想淘宝省钱看我简介,博客www.liangxin.name (一) 一.Print()函数 1.数字可以直接输出,无需加引号 只能理解数字,却读不懂文字.因为数字和数学运 ...

  3. P2P网络基础(学习笔记)

    P2P网络基础(学习笔记) 基本概述 P2P与C/S架构 P2P网络的特点 P2P网络的主要功能 P2P网络的分类 集中式 全分布式非结构化 全分布式结构化 混合式 比特币网络 P2P网络的应用 基本 ...

  4. 网络基础知识学习笔记

    网络基础知识学习笔记 参考菜鸟教程.个人学习整理,仅供参考.三年前学过,三年没用忘了,重新学习整理一下. 文章目录 网络基础知识学习笔记 OSI七层网络模型 IP地址 子网掩码及网络划分 网络协议 A ...

  5. k8s零基础入门 (学习笔记)

    夫君子之行,静以修身,俭以养德,非淡泊无以明志,非宁静无以致远. 夫学须静也,才须学也,非学无以广才,非志无以成学.淫慢则不能励精,险躁则不能冶性. 年与时驰,意与日去,遂成枯落,多不接世,悲守穷庐, ...

  6. Java基础篇 学习笔记

    List item Java基础篇 学习笔记 java基础篇 第1章 计算机.程序和java概述 学习笔记 1.1什么是计算机 简单来说:计算机就是 ' 存储 ' 和 ' 处理 ' 数据的电子设备. ...

  7. 大数据第二阶段Python基础编程学习笔记(待完善)

    大数据第二阶段Python基础编程学习笔记(待完善) 第一章 Python基础语法 3.8 1-1Python概述 python基础部分: ●Python基础语法: 标识符,关键字,变量,判断循环.. ...

  8. 计算机应用基础【学习笔记】

    计算机应用基础[学习笔记] 计算机硬件系统的组成 微型计算机的性能指标 1.主频:微机CPU的时钟频率.以MHz.GHz为单位.主频的大小在很大程度上决定了微机的运算速度,主频越高,微机的运算速度就越 ...

  9. linux磁盘符变化autofs,Linux基础教程学习笔记之Autofs自动挂载

    Linux基础教程学习笔记之Autofs自动挂载 Autofs自动挂载: yum -y install autofs vim /etc/auto.master  在文件中添加下面行 /home/gue ...

  10. python基础入门学习笔记 (2)

    python基础入门学习笔记 2021年2月8日 1 编译器和解释器的区别 编译器/解释器:高级语言与机器之间的翻译官 2 值传递: print "a = ",a print &q ...

最新文章

  1. springboot webjar使用
  2. 2018全球最佳品牌Top25:时代巨变的一个缩影
  3. java 图片请求_java请求C++客户端上传图片
  4. leetcode53. 最大子数组和(暴力+贪心)
  5. 智慧城市产业图谱研究报告(2020年)
  6. 在线求CR,你觉得我这段Java代码还有优化的空间吗?
  7. 高,低电平复位电路原理及加电容的作用
  8. 福州大学第十四届程序设计竞赛-重现赛(Record)
  9. android启动过程之init.rc文件浅析
  10. 通达信实现自动交易系统
  11. 知行之桥EDI系统中那些你忽略的功能
  12. Java根据位置获取经纬度计算距离
  13. Mysql如何清空数据库中所有的表数据
  14. 三调与二调图斑叠加分析,筛选不同地类面积占比,筛选举证图斑
  15. 境外电商-香港汇丰银行基础知识
  16. 顽固文件删除终极武器
  17. word页眉页脚设置
  18. 用python判断火车票座位_Python3 实现火车票查询工具
  19. vue里面变量名前面加三个点代表什么意思?
  20. 张勇向大公司病开刀:面对未来,变阵是为了更好地应战

热门文章

  1. App Widget
  2. 什么是系统平均负载(Load average)
  3. Java、JSP飞机航班信息查询系统
  4. 【书 JS语言精粹】第4章 函数
  5. Windows下MySQL5.5安装,配置与卸载
  6. LabVIEW的第三方驱动(I/O接口设备)
  7. html5广告的版式设计,版式设计在平面广告中的运用
  8. 【Android】 android | as | android studio 安装与使用
  9. 智能门锁开发全流程分享
  10. 华硕M5A78L-MLX3PLUS羿龙IIX4(3424元)家用学习型装机配置