版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/counsellor/article/details/86591081

0x00 前言
该说点什么好呢,看到这个系列的第一篇的时间戳,已经是2年前了,生活总是这样要温故知新。安卓的项目已经从30个G变成了40多G,完全就是一个monstor一样的进化过程,不得不承认,能维护这么庞大的开源代码,是一件很不可思议的事情。

前一段时间微软宣布放弃edge浏览器内核的开发,准备启用chrome内核,一方面说明浏览器的复杂程度已经超出了自己预期成本,另一方面体现了开源项目的生命力。

0x01 repo工具
需求:在一个项目中包含了很多git仓库,一旦想更新代码,岂不是要到每个git目录下分别pull一遍代码?

当然,快捷的方式是写一个shell脚本,一键pull多个仓库。

repo就是这样的增强版工具。Google使用Python脚本统一管理多个git仓库,用于下载,回退版本等操作。

0x02 安装repo
工具比较小,而且没啥更新,直接用国内的即可。

创建工具所在bin目录
mkdir ~/bin
1
向zsh导入执行路径
比较习惯使用oh-my-zsh,所以需到在~/.zshrc中添加一句

# If you come from bash you might have to change your $PATH.
# export PATH=$HOME/bin:/usr/local/bin:$PATH

# Path to your oh-my-zsh installation.
  export ZSH="/home/counsellor/.oh-my-zsh"

export PATH=~/bin:$PATH # 这句是自己加的

下载repo
国内下载地址(推荐)

curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo

异世界下载地址

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

增加执行权限
chmod a+x ~/bin/repo

0x03 repo init
repo init的过程主要是下载一堆manifest配置文件,项目的remote url,项目包含的所有git仓库的地址,项目的版本等等。

建立工作目录
mkdir aosp
cd aosp

初始化仓库
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest

如果需要某个特定的 Android 版本(列表):
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-9.0.0_r30

真 · 初始化
repo init --depth=1 -u https://aosp.tuna.tsinghua.edu.cn/platform/manifestt -b android-9.0.0_r30
--depth=1 表示只下载最近版本的代码,只保留最近的commit版本。

使用--depth 可以节省本地磁盘空间,加速下载,对于开发够用了。

0x04 repo sync
他喵的,我初始化的时候指定了android -4的版本,结果发现同步过程有android-9.0.0的日志,down了3天3夜,140多G还没有同步完,眼泪哗哗的。

同步命令
repo sync

多线程并发同步
特步 - 飞一般的感觉

repo sync -j`nproc`

-j 参数指定同时运行多少个job,nproc是当前计算机的处理单元个数

这个命令的完整意思就是,开足马力,带你飞。

真 · 同步
repo sync -c -f --no-tags --no-clone-bundle -j`nproc`

-c 或者--current-branch表示只拉取当前分支代码,坑爹啊,我在init指定了分支,同步的时候,你却悄悄给我拉些没用的。
--no-tags 不拉取tags,tag虽然不大,但架不住多
--no-clone-bundle 不使用clone.bundle,clone.bundle是git bundle一样的打包文件,使用bundle文件可以做cdn下载的分流,cdn听上去不错,但是如果cdn到google的服务器,或者clone.bundle本来就占空间,不是很划算,所以不使用clone.bundle
-f 如果sync失败,继续同步(想想当年LZ写了一个while循环解决同步失败终止问题的)
--force-sync 如果文件目录有差异,强制覆盖掉

sync 失败的时候,就能想到-f

0x05 repo回滚
repo sync -d 可以将所有git 仓库的HEAD重置为manifest文件的指定版本。同时,处于暂存或者修改的目录变化不会被重置。

当然,-d 重置版本的妙用就是回滚,结合以下命令,可以让被指飞的git仓库门,全部恢复成干净的代码。

repo sync -d
repo forall -c 'git reset --hard'    # Remove all working directory (and staged) changes.
repo forall -c 'git clean -f -d'     # Clean untracked files

0x06 小结
repo主要用到两个功能,一个是init项目,另一个是下载项目;
AOSP项目本身很庞大,为了节约空间,尽量关注一个版本的代码比较好;
repo的本质是git,所以是可以使用代理【传送门】下载asop的。
0x07 参考文献
https://github.com/zawzaww/aosp-android
https://blog.csdn.net/zerooffdate/article/details/79348925
https://blog.csdn.net/u012842255/article/details/68941379
https://stackoverflow.com/questions/23300245/what-to-do-about-curl-clone-bundle-error-on-aosp-repo-sync
https://blog.csdn.net/mmh19891113/article/details/78476580
http://www.mashangxue123.com/git/3727190879.html
https://www.git-tower.com/learn/git/faq/detached-head-when-checkout-commit
————————————————
版权声明:本文为CSDN博主「counsellor」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/counsellor/article/details/86591081

repo 工具使用手册【转】相关推荐

  1. repo 工具使用手册

    0x00 前言 该说点什么好呢,看到这个系列的第一篇的时间戳,已经是2年前了,生活总是这样要温故知新.安卓的项目已经从30个G变成了40多G,完全就是一个monstor一样的进化过程,不得不承认,能维 ...

  2. Myisamchk小工具使用手册

    Myisamchk小工具使用手册 =========================================================== 作者: logzgh(http://logzg ...

  3. centos7常用工具安装手册

    centos7常用工具安装手册 文章目录 1. CentOS 7安装 ifconfig 2. CentOS 7 上安装vim 3. centos7 安装wget 4. CentOS7下zip解压和un ...

  4. tpch测试mysql_MySQL-tpch 测试工具简要手册

    tpch是TPC(Transaction Processing Performance Council)组织提供的工具包.用于进行OLAP测试,以评估商业分析中决策支持系统(DSS)的性能.它包含了一 ...

  5. java test使用手册,啄木鸟(woodpecker)自动化测试工具使用手册

    啄木鸟(woodpecker)自动化测试工具使用手册 GitHub下载地址:https://github.com/xudashen/woodpecker 微云下载地址:链接:https://share ...

  6. Android内核开发:理解和掌握repo工具

    由于Android源码是用repo工具来管理的,因此,搞Android内核开发,首先要搞清楚repo是什么东西,它该怎么使用?作为<Android内核开发>系列文章的第二篇,我们首先谈谈对 ...

  7. 计算机专业使用的工具,电子投标工具使用手册计算机软件及应用it计算机专业资料.doc...

    电子投标工具使用手册计算机软件及应用it计算机专业资料 国信创新电子[投标工具]使用手册 PAGE 9 TOC \o "1-3" \h \z \u HYPERLINK \l &qu ...

  8. tpch测试mysql_MySQL数据库之MySQL-tpch 测试工具简要手册

    本文主要向大家介绍了MySQL数据库之MySQL-tpch 测试工具简要手册 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. tpch是TPC(Transaction Proce ...

  9. Android内存泄漏检测工具使用手册

    Android内存泄漏检测工具使用手册 前言 LeakCanary 在Android中接入LeakCanary LeakCanary内存泄漏分析 内存泄漏上报到服务端 Shark Shark分析当前应 ...

最新文章

  1. Netty Channel源码分析
  2. php数组排序面试题,PHP按子数组值对数组排序
  3. mybatisplus的详细使用(自动填充,乐观锁,分页,条件查询)
  4. Response.ContentType 详细列表
  5. 一款不错的网站压力测试工具webbench
  6. Linux memcached
  7. Linux系统编程2:基础篇之详解Linux中的权限问题
  8. prototype.js 源码解读v1.3.1版本
  9. c# c均值聚类及DBSCAN聚类
  10. 红橙Darren视频笔记 OKHttp基本使用 对http框架进行封装 链式调用
  11. docx文档怎么排列图片_格式转换太麻烦?仅需一行命令,搞定图片、音频、视频、文本批量转换!...
  12. SAP自学指南:案例公司的概括
  13. OpenCV-风景—天空滤镜
  14. onClick,onServerClick,onClientClick
  15. [译] 在浏览器里使用 TenserFlow.js 实时估计人体姿态
  16. Mysql主从同步及主从同步延迟解决方案
  17. 一文介绍解银行卡验证api接口详情
  18. .NET方面的框架的整理和总结
  19. Redis集群 install安装
  20. 如何浏览自己的新浪微博图床

热门文章

  1. 2009.02.24 奥巴马总统发表国情咨文(全文)
  2. java设计模式——浅显易懂之七大原则
  3. 0-1整数规划的LINGO求解
  4. 解忧杂货店—你的问题,我来解答
  5. H3C_交换机_二层/三层链路聚合
  6. 你看好我国网约车生态吗?
  7. “Spark上流式机器学习算法实现”终期检查报告
  8. SETCLIENTID
  9. 颠覆性AI程序:人工智能如何推动天文学创新?
  10. Visio 2010、2013中找不到“拆分”,“联合”,“相交”等开发工具