多仓库管理工具——Repo(多个仓库如何管理)
cac55 2024-09-19 17:00 70 浏览 0 评论
Repo 是建立在Git上的一个多仓库管理工具,可以组织多个仓库的上传和下载。Repo是Google用Python脚本写的调用Git的脚本,主要帮助我们管理多个Git存储仓库,将其上传到我们的版本控制系统,并自动执行Android开发工作流程的某些部分。Repo并不是要取代Git,而是为了在Android环境下更加方便的使用Git。下面来看看Repo的具体用法吧!
安装Repo
在安装Repo时,必须先要确保已经安装了Git工具,以及Python2.7+的环境,下面是在Mac下安装的流程:
1、确保主目录下有一个 bin/ 目录,并且该目录包含在路径中:
mkdir ~/bin
PATH=~/bin:$PATH
2、下载 Repo 工具,并确保它可执行:
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
Windows下没有curl工具可以下载,地址是 https://curl.se/windows/dl-7.74.0_2/curl-7.74.0_2-win64-mingw.zip 。不过也可以直接访问 https://storage.googleapis.com/git-repo-downloads/repo 网址,直接把内容复制到 ~/bin/repo 效果是一样的。另外如果googleapis.com无法访问的话也可以替换为Github的Repo地址:
curl https://raw.githubusercontent.com/esrlabs/git-repo/stable/repo > ~/bin/repo
对于Linux安装过程可以参考 https://github.com/esrlabs/git-repo 这个仓库的README其实说得很清楚了。
Repo的背景
使用Repo之前,最好先熟悉Git,关于Git的推荐资料: https://git-scm.com/book/zh/v2 。其实Repo最开始是用来管理Android源代码库的,Android 源代码位于由 Google 托管的 Git 代码库中。Git 代码库中包含 Android 源代码的元数据,其中包括与对源代码进行的更改以及更改日期相关的元数据。而且Android版本库众多,版本库太大以及Git不能部分检出,如果所有的东西都放在一个库中,而某个开发团队比较关心可能只是某个小组件或者插件而已,但是却要下载如此庞大的版本库,所以这一切交给了Repo去管理。
那么Repo如何管理多个代码仓库的呢?
Repo的组成
Repo主要包括两部分:Repo引导脚本(Google 称之为Repo launcher)和Repo命令的主体部分。那么Repo仓库究竟有些什么东西呢,在我们初始化Repo仓库之后,会出现一个.repo的文件夹,里面有如下内容:
changlinzou@mac work % tree .repo -L 1
.repo
├── manifest.xml -> manifests/default.xml
├── manifests
├── manifests.git
├── project-objects
├── project.list
├── projects
└── repo
5 directories, 2 files
当执行 repo init 命令来初始化仓库的时候首先执行的就是Repo的引导脚本,该脚本会到我们指定的地方去下载Manifest 仓库,以及Repo命令主体部分。下载好之后就放在当前目录下面的 .repo 目录下,其中:
对于Manifests文件相信每一个Android开发中都不陌生,Android项目中Manifests声明了四大组件,就像列出的项目组件的清单一样。所以其实很容易类比,在这里manifests是清单文件的git仓库,这些xml文件中包含了各个git project的名称,检出的reversion,检出到哪个目录等等信息。Repo就是利用这些manifest文件去分别获取各个project,比如这样一个manifest文件:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="origin" fetch="https://github.com/" review="https://github.com/" />
<default remote="origin" revision="master" sync-j="4" />
<project name="xxx_projects/first.git" path="xxx" />
<project name="yyy_projects/first.git" path="yyy" />
<project name="zzz_lib/first.git" path="xxx/zzz_lib" />
......
</manifest>
下面是Repo的manifest文件中元素的意义:
Repo命令
下面的内容来自Google的官方文档: https://source.android.com/source/using-repo.html:
使用 Repo 需遵循的格式如下:
repo <COMMAND> <OPTIONS>
可选元素显示在方括号 [ ] 中。例如,许多命令会将项目列表用作参数。您可以为项目指定项目列表,作为名称列表或本地源代码目录的路径列表:
repo sync [<PROJECT0> <PROJECT1> <PROJECTN>]
repo sync [</PATH/TO/PROJECT0> ... </PATH/TO/PROJECTN>]
help
安装 Repo 后,您可以通过运行以下命令找到最新文档(开头是包含所有命令的摘要):
repo help
您可以通过在 Repo 树中运行以下命令来获取有关某个命令的信息:
repo help <COMMAND>
例如,以下命令会生成 Repo init 参数的说明和选项列表,该参数会在当前目录中初始化 Repo。(要了解详情,请参阅 init 。)
repo help init
init
$ repo init -u <URL> [<OPTIONS>]
在当前目录中安装 Repo。这会创建一个 .repo/ 目录,其中包含用于 Repo 源代码和标准 Android 清单文件的 Git 代码库。该 .repo/ 目录中还包含 manifest.xml ,这是一个指向 .repo/manifests/ 目录中所选清单的符号链接。
选项:
- -u :指定要从中检索清单代码库的网址。您可以在 https://android.googlesource.com/platform/manifest 中找到常见清单
- -m :在代码库中选择清单文件。如果未选择任何清单名称,则会默认选择 default.xml。
- -b :指定修订版本,即特定的清单分支。
注意:对于其余的所有 Repo 命令,当前工作目录必须是 .repo/ 的父目录或相应父目录的子目录。
sync
repo sync [<PROJECT_LIST>]
下载新的更改并更新本地环境中的工作文件。如果您在未使用任何参数的情况下运行 repo sync ,则该操作会同步所有项目的文件。
运行 repo sync 后,将出现以下情况:
- 如果目标项目从未同步过,则 repo sync 相当于 git clone 。远程代码库中的所有分支都会复制到本地项目目录中。
- 如果目标项目已同步过,则 repo sync 相当于以下命令:git remote update git rebase origin/<BRANCH> 其中 *<BRANCH>* 是本地项目目录中当前已检出的分支。如果本地分支没有在跟踪远程代码库中的分支,则相应项目不会发生任何同步。
- 如果 git rebase 操作导致合并冲突,那么您需要使用普通 Git 命令(例如 git rebase --continue )来解决冲突。
repo sync 运行成功后,指定项目中的代码会与远程代码库中的代码保持同步。
选项:
-d
-s
-f
upload
repo upload [<PROJECT_LIST>]
对于指定的项目,Repo 会将本地分支与最后一次 repo sync 时更新的远程分支进行比较。Repo 会提示您选择一个或多个尚未上传以供审核的分支。
您选择一个或多个分支后,所选分支上的所有提交都会通过 HTTPS 连接传输到 Gerrit。您需要配置一个 HTTPS 密码以启用上传授权。要生成新的用户名/密码对以用于 HTTPS 传输,请访问 密码生成器 。
当 Gerrit 通过其服务器接收对象数据时,它会将每项提交转变成一项更改,以便审核者可以单独针对每项提交给出意见。要将几项“检查点”提交合并为一项提交,请使用 git rebase -i,然后再运行 repo upload。
如果您在未使用任何参数的情况下运行 repo upload,则该操作会搜索所有项目中的更改以进行上传。
要在更改上传之后对其进行修改,您应该使用 git rebase -i 或 git commit --amend 等工具更新您的本地提交。修改完成之后,请执行以下操作:
- 进行核对以确保更新后的分支是当前已检出的分支。
- 对于相应系列中的每项提交,请在方括号内输入 Gerrit 更改 ID:# Replacing from branch foo [ 3021 ] 35f2596c Refactor part of GetUploadableBranches to lookup one specific... [ 2829 ] ec18b4ba Update proto client to support patch set replacments # Insert change numbers in the brackets to add a new patch set. # To create a new change record, leave the brackets empty.
上传完成后,这些更改将拥有一个额外的补丁程序集。
diff
repo diff [<PROJECT_LIST>]
使用 git diff 显示提交与工作树之间的明显更改。
download
repo download <TARGET> <CHANGE>
从审核系统中下载指定更改,并放在您项目的本地工作目录中供使用。
例如,要将 更改 23823 下载到您的平台/编译目录,请运行以下命令:
$ repo download platform/build 23823
repo sync 应该可以有效移除通过 repo download 检索到的任何提交。或者,您可以将远程分支检出,例如 git checkout m/master 。
注意:由于全球的所有服务器均存在复制延迟,因此某项更改(位于 Gerrit 中)出现在网络上的时间与所有用户可通过 repo download 找到此项更改的时间之间存在些许的镜像延迟。
forall
repo forall [<PROJECT_LIST>] -c <COMMAND>
在每个项目中运行指定的 shell 命令。通过 repo forall 可使用下列额外的环境变量:
REPO_PROJECT
REPO_PATH
REPO_REMOTE
REPO_LREV
REPO_RREV
选项:
- -c :要运行的命令和参数。此命令会通过 /bin/sh 进行求值,它之后的任何参数都将作为 shell 位置参数传递。
- -p :在指定命令输出结果之前显示项目标头。这通过以下方式实现:将管道绑定到命令的 stdin、stdout 和 sterr 流,然后通过管道将所有输出结果传输到一个页面调度会话中显示的连续流中。
- -v :显示该命令向 stderr 写入的消息。
prune
repo prune [<PROJECT_LIST>]
删减(删除)已合并的主题。
start
repo start <BRANCH_NAME> [<PROJECT_LIST>]
从清单中指定的修订版本开始,创建一个新的分支进行开发。
*<BRANCH_NAME>* 参数应简要说明您尝试对项目进行的更改。如果您不知道,则不妨考虑使用默认名称。
*<PROJECT_LIST>* 指定了将参与此主题分支的项目。
注意:“.”是一个非常实用的简写形式,用来代表当前工作目录中的项目。
status
repo status [<PROJECT_LIST>]
对于每个指定的项目,将工作树与临时区域(索引)以及此分支 (HEAD) 上的最近一次提交进行比较。在这三种状态存在差异之处显示每个文件的摘要行。
要仅查看当前分支的状态,请运行 repo status 。系统会按项目列出状态信息。对于项目中的每个文件,系统使用两个字母的代码来表示:
在第一列中,大写字母表示临时区域与上次提交状态之间的不同之处。
在第二列中,小写字母表示工作目录与索引之间的不同之处。
看完三件事??
?如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
- 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
- 关注头条号 『 JAVA后端架构 』,不定期分享原创知识。
- 同时可以期待后续文章ing
- 关注作者后台私信【888】有惊喜相送
相关推荐
- 无力吐槽的自动续费(你被自动续费困扰过吗?)
-
今天因为工作需要,需要在百度文库上下载一篇文章。没办法,确实需要也有必要,只能老老实实的按要求买了个VIP。过去在百度文库上有过类似经历,当时为了写论文买了一个月的VIP,后面也没有太注意,直到第二个...
- 百度文库推出“文源计划”创作者可一键认领文档
-
11月7日,百度文库发布了旨在保护创作者权益的“文源计划”。所谓“文源计划”,即为每一篇文档找到源头,让创作者享受更多的权益。据百度文库总经理李小婉介绍,文源计划分为三部分,分别是版权认证、版权扶持和...
- 有开放大学学号的同学,百度文库高校版可以用了。
-
还在网上找百度文库的下载方式,只要从身边的朋友在读开放大学的,那他(她)的学号就可以登陆到国家开放大学图书馆,还使用百度文库高校版来下载。与百度文库稍有不同,但足够使用了。现转国图链接如下:htt...
- 搜索资源方法推荐(搜索资源的方法)
-
今天msgbox就要教大家如何又快又准的搜到各类资源,第一点,排除干扰百度搜索出来啊经常前排展示它的产品以及百度文库,如何去除呢?很简单,后面输入空格减号百度文库,比如你搜高等数学百度文库很多,只要后...
- 一行代码搞定百度文库VIP功能(2021百度文库vip账号密码共享)
-
百度文库作为大家常用查资料找文档的平台,大多数文档我们都可以直接在百度文库找到,然而百度文库也有让人头痛的时候。好不容易找到一篇合适的文档,当你准备复制的时候他却提示你需要开通VIP才能复制~~~下载...
- 百度文库文档批量上传工具用户说明书
-
百度文库文档批量上传工具用户说明书1、软件主要功能1、批量上传文档到百度文库,支持上传到收费、VIP专享、优享以及共享。2、支持自动分类和自动获取标签3、支持多用户切换,一个账户传满可以切换到...
- 百度文库现在都看不到文档是否上传成功,要凉了吗?
-
打开知识店铺,百度文库文档里显示都是下载这一按键,上传的文档也看不到是否成功?咋情况,要取消了吗?没通过审核的也不让你删除,是几个意思,想通吃吗?现在百度上传文档也很费劲,有时弄了半天的资料上传审核过...
- 微信推广引流108式:利用百度文库长期分享软文引流
-
百度文库相对于百度知道、百度百科来说,操作上没那么多条条框框,规则上也相对好把握些。做一条百度知道所花费的精力一般都会比做一条百度文库的要多些,老马个人操作下来觉得百度文库更好把握。但见仁见智吧,今天...
- 职场“避雷”指南 百度文库推出标准化劳动合同范本
-
轰轰烈烈的毕业季结束了,众多应届生在经过了“职场海选”后,已正式成为职场生力军的一员。这一阶段,除了熟悉业务,签订劳动合同、了解职场福利也迅速被提上日程。而随着国人法律意识的增强,百度文库内《劳动合同...
- 《百度文库》:素材精选宝库(百度文库官网首页)
-
《百度文库》:独特功能助力选择高质量素材在当今信息爆炸的时代,如何高效地获取并利用有价值的素材成为了许多人面临的挑战。而《百度文库》作为百度公司推出的一款在线文档分享平台,凭借其丰富的资源、强大的功能...
- 深度整合和开放AI能力 百度文库和网盘推出内容操作系统「沧舟OS」
-
【TechWeb】4月25日消息,Create2025百度AI开发者大会上,百度文库和百度网盘推出全球首个内容操作系统——沧舟OS。基于沧舟OS,百度文库APP全新上线「GenFlow超能搭子」...
- 女子发现大二作业被百度文库要求付费下载,律师:平台侵权,应赔偿
-
近日,28岁的黎女士在百度百科搜索家乡的小地名时,发现了自己在大二完成的课题作业。她继续搜索,发现多个平台收录了该文,比如豆丁网和文档之家等,有的还设置了付费或积分下载。2月15日,九派新闻记者以用户...
- 2016杀入百度文库的新捷径,只有少数人才知道的喔
-
百度的产品在SEO优化中的分量真不用多说,其实很多人都像我一样一直在找捷径。但是我经常发现很多人都是在用死方法。比如发贴吧发帖而不知道去申请一个吧主,知道自问自答而不知道去申请一个合作资格。口碑和贴吧...
- 百度文库付费文档搜索方法(百度文库付费文档搜索方法有哪些)
-
一直以来,百度文库中无论是个人中心还是个人主页,都没有像淘宝一样的店内搜索功能,连最近新开的知识店铺也没有设计店内搜索功能,这无论是对上传用户还是下载用户都不方便,上传用户想要搜索自己的文档无法办到...
- 供读者免费使用!泰达图书馆机构版百度文库新年上新啦
-
在泰达图书馆读者使用百度文库数字资源不需要VIP,免-费-用!惊不惊喜?快来了解一下吧……新年伊始,为满足区域企业、高校、科研院所以及居民群众在教学、科研及学习过程中,对各类文献资源的需求,泰达图书馆...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 如何绘制折线图 (52)
- javaabstract (48)
- 新浪微博头像 (53)
- grub4dos (66)
- s扫描器 (51)
- httpfile dll (48)
- ps实例教程 (55)
- taskmgr (51)
- s spline (61)
- vnc远程控制 (47)
- 数据丢失 (47)
- wbem (57)
- flac文件 (72)
- 网页制作基础教程 (53)
- 镜像文件刻录 (61)
- ug5 0软件免费下载 (78)
- debian下载 (53)
- ubuntu10 04 (60)
- web qq登录 (59)
- 笔记本变成无线路由 (52)
- flash player 11 4 (50)
- 右键菜单清理 (78)
- cuteftp 注册码 (57)
- ospf协议 (53)
- ms17 010 下载 (60)