repo使用总结—从入门到入门

1 what’s repo

Android 使用 Git 作为代码管理工具,开发了 Gerrit 进行代码审核以便更好的对代码进行集中式管理,还开发了 repo 命令行工具,实际上python指令对git的一层封装,对 git 部分命令封装,将百多个 git 库有效的进行组织,因为源码仓库数量庞大,使用git进行管理会带来很多不便,这里repo就体现了其优越性。

2 官方文档

该部分转自官网参考文档,比较有参考价值,按照这里文档内容,基本上大部分问题都可以解决了,笔者根据实际使用的情况,做了一部分补充。ctrl+cctrl+v来一波,”问题都解决了“

Repo 命令参考资料

使用 Repo 需遵循的格式如下:

repo command options

可选元素显示在方括号 [ ] 中。例如,许多命令会用到项目列表 (project-list) 参数。项目列表可以是一个名称列表,也可以是一个本地源代码目录的路径列表:

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/ 目录中所选清单的符号链接。有关更新清单的说明,请参阅 manifest-format.md

选项:

  • -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:同步到当前清单中的 manifest-server 元素指定的一个已知良好版本。
  • -f:即使某个项目同步失败,也继续同步其他项目。

upload 提交更改

repo upload [project-list]

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

接下来,所选分支上的所有提交都会通过 HTTPS 连接传输到 Gerrit。您需要配置一个 HTTPS 密码以启用上传授权。要生成新的用户名/密码对以用于 HTTPS 传输,请访问密码生成器

当 Gerrit 通过其服务器接收对象数据时,它会将每项提交转变成一项更改,以便审核者可以针对特定提交给出意见。要将几项“检查点”提交合并为一项提交,请使用 git rebase -i,然后再运行 upload。

如果您在未使用任何参数的情况下运行 repo upload,则该操作会搜索所有项目中的更改以进行上传。

要在更改上传后对其进行修改,请使用 git rebase -igit 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.
    

上传完成后,这些更改将拥有一个额外的补丁程序集。

如果您希望只上传当前已检出的 Git 分支,则可以使用标记 --current-branch (简称 --cbr)。

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 是清单中修订版本的名称,已转换为本地跟踪分支。如果您需要将清单修订版本传递到某个本地运行的 Git 命令,则可使用此变量。
  • 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 参数用于简要说明您尝试对项目进行的更改。如果您不知道,则不妨考虑使用名称 default

project-list 参数指定了将参与此主题分支的项目。

注意:句点 (.) 是一个简写形式,用来代表当前工作目录中的项目。

Example:创建三个分支test-1,test-2,test-3
repo start test-1 --all
repo start test-2 --all
repo start test-3 --all

status

repo status [project-list]

对于每个指定的项目,将工作树与临时区域(索引)以及此分支 (HEAD) 上的最近一次提交进行比较。在这三种状态存在差异之处显示每个文件的摘要行。

要仅查看当前分支的状态,请运行 repo status。系统会按项目列出状态信息。对于项目中的每个文件,系统使用两个字母的代码来表示:

在第一列中,大写字母表示临时区域与上次提交状态之间的不同之处。

字母含义说明
-没有变化在 HEAD 与索引中相同
A已添加不存在于 HEAD 中,但存在于索引中
M已修改存在于 HEAD 中,但索引中的文件已修改
D已删除存在于 HEAD 中,但不存在于索引中
R已重命名不存在于 HEAD 中,索引中文件的路径已更改
C已复制不存在于 HEAD 中,复制自索引中的另一个文件
T模式已更改HEAD 与索引中的内容相同,但模式已更改
U未合并HEAD 与索引之间存在冲突;需要加以解决

在第二列中,小写字母表示工作目录与索引之间的不同之处。

字母含义说明
-新/未知不存在于索引中,但存在于工作树中
m已修改存在于索引中,也存在于工作树中(但已修改)
d已删除存在于索引中,但不存在于工作树中

branches

查看当前所有分支,相当于git下的指令git branch -a

repo branches

已经创建了三个分支了

   test-1                    | in all projects
   test-2                    | in all projects
*  test-3                    | in all projects

abandon

删除本地已经存在的某个分支,相当于git branch -d <branch-name>

repo abandon [branch-name]
Example:删除本地分支test-3
repo adbandon test-3

后续在使用中遇到问题再更新

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
PowerJob 是一个基于分布式任务调度和数据处理框架,用于解决任务调度和数据处理的问题。它使用 Spring Boot 和 Spring Cloud 进行开发,支持多种任务类型,包括定时任务、异步任务、数据处理等。 以下是 PowerJob 的入门详细教程: 1. 安装和配置 安装 JDK 和 Maven,并在 Maven 的配置文件中添加 PowerJob 的仓库地址: ``` <repositories> <repository> <id>powerjob-mvn-repo</id> <url>https://raw.github.com/PowerJob/PowerJob-Repository/master/releases</url> </repository> </repositories> ``` 添加 PowerJob 的依赖: ``` <dependency> <groupId>com.github.kfcfans</groupId> <artifactId>powerjob-worker-core</artifactId> <version>2.2.3.RELEASE</version> </dependency> ``` 2. 编写任务 定义一个继承自 `AbstractJobHandler` 的任务处理类,并实现 `execute` 方法: ``` @Slf4j public class DemoJobHandler extends AbstractJobHandler { @Override public void execute(ExecuteContext executeContext) throws Exception { log.info("Hello, PowerJob!"); } } ``` 3. 配置任务 在 Spring Boot 的配置文件中,添加 PowerJob 的配置: ``` powerjob: enabled: true appName: my-app serverAddress: localhost:7700 ``` 其中: - `enabled`:是否启用 PowerJob。 - `appName`:应用名称。 - `serverAddress`:PowerJob 服务器的地址。 4. 注册任务 在 Spring Boot 应用启动时,注册任务: ``` @Slf4j @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); // 注册任务 JobScheduler scheduler = JobSchedulerHelper.getScheduler(); scheduler.registerJobHandler("demoJobHandler", DemoJobHandler.class.getName()); log.info("DemoJobHandler registered."); } } ``` 其中,`demoJobHandler` 是任务的名称,`DemoJobHandler.class.getName()` 是任务处理类的全限定名称。 5. 运行任务 通过 PowerJob 的管理后台,可以手动运行任务。也可以通过代码调用 PowerJob 的 API 来启动任务: ``` @Autowired private JobClient jobClient; public void runDemoJob() throws Exception { JobParams jobParams = new JobParams(); jobParams.setJobId(1L); jobParams.setJobParams(Collections.singletonMap("param", "value")); jobClient.runJob(jobParams); } ``` 其中,`jobParams` 包含了任务的 ID 和参数,可以根据自己的需要设置。 6. 监听任务 可以通过实现 `JobListener` 接口来监听任务的执行结果: ``` @Slf4j @Component public class DemoJobListener implements JobListener { @Override public void beforeJobExecute(JobInfo jobInfo) { log.info("Job {} is about to start.", jobInfo.getJobName()); } @Override public void afterJobExecute(JobInfo jobInfo, JobResult jobResult) { log.info("Job {} finished with result: {}", jobInfo.getJobName(), jobResult.isSuccess()); } @Override public void onJobException(JobInfo jobInfo, Exception e) { log.error("Job {} threw an exception: {}", jobInfo.getJobName(), e.getMessage()); } } ``` 然后在 Spring Boot 的配置文件中,添加 PowerJob 监听器的配置: ``` powerjob: enabled: true appName: my-app serverAddress: localhost:7700 listener: enabled: true className: com.example.DemoJobListener ``` 其中,`className` 是监听器的全限定名称。 以上就是 PowerJob 的入门详细教程。通过上述步骤,您可以快速地了解和使用 PowerJob。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小麦大叔

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

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

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

打赏作者

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

抵扣说明:

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

余额充值