草庐IT

repo命令大全

梁家有个锦泽 2023-06-20 原文

1. 项目清单库

<manifest>
  <remote fetch="ssh://10.XX.XX.XX" name="origin" review="10.XX.XX.XX:8090"/>
  <default remote="origin" revision="develop" sync-j="4"/>
​
  <project groups='all' name="XXX/XXX" path="XXX/XXX" remote="origin" revision="develop">
    <linkfile dest="XX/XX/" src="../.."/>
    <copyfile dest="XX/XX/XX.txt" src="./xx.txt"/>
  </project>
  <project name="XXX/repohooks" path="XXX/XXX" remote="origin" revision="develop"/>
  <repo-hooks enabled-list="post-sync" in-project="XXX/repohooks"/>
</manifest>  

常用参数:

  • <remote>:描述了远程仓库的基本信息。

    name:远程仓库的名称,通常我们看到的命名是origin

    fetch:git库地址

    review:用作code review的server地址

  • <default>:default标签定义的属性,将作为<project>标签的默认属性,在<project>标签中,也可以重写这些属性。

    revision:默认分支

    remote:默认的远程版本库名称

    sync-j:表示在同步远程代码时,并发的任务数量

  • <project>:每一个repo管理的git库,就是对应到一个<project>标签

    path:把代码下载到指定目录下

    name:该项目远程版本库的相对路径

    groups:该项目远程版本库所属组

    revision:单独指定分支

    remote:单独指定远程版本库名称

  • <project><copyfile>:project元素下的子元素copyfile,定义clone后从src到dest拷贝操作。

  • <project><linkfile>:project元素下的子元素linkfile,定义clone后dest到src的软连接。

  • <repo-hooks>:repo钩子,in-project下面应该有一个与钩子同名的python文件。因此,如果您想支持预上传钩子,您需要创建一个名为post-sync.py的文件。Repo将在处理钩子时动态加载该模块,然后调用其中的主函数。

    in-project:定义挂钩的项目。该值必须与先前定义的元素的name属性(而不是属性)匹配。

    enabled-list:要使用的钩子列表,空格或逗号分隔。

2.repo脚本库

repo对git命令进行了封装,提供了一套repo的命令集(包括init, sync等),所有repo管理的自动化实现也都包含在这个git库中。在第一次初始化的时候,repo会从远程把这个git库下载到本地。在repo的引导脚本中指定了repo脚本库的地址。

。。。。

3.repo常用命令

1.repo init 初始化

repo init -u <URL> [<OPTIONS>]
  • -u:指定manifest项目清单库地址

  • -m,–manifest-name:指定manifests库中的清单文件,默认为maniftests/default.xml。

  • -b, –manifest-branch:指定manifest仓的分支,默认为master分支。

  • -g:指定manifests库中的组来下载代码,默认为all。

不常用参数:

  • –repo-url:指定远程repo库地址,当引导脚本中的地址不可访问时,可以通过该参数指定可访问的repo地址。

  • –repo-branch:同manifest这个git库一样,repo这个git库也是有版本差异的,可以通过该参数来指定下载repo这个远程git库的特定分支。

  • –no-repo-verify:在下载repo库时,会对repo的源码进行检查。通过–repo-url指定第三方repo库时,可能会导致检查不通过,所以可以配套使用该参数,强制不进行检查。

  • --depth {number}:限制下载记录次数,加速代码下载。

2.repo sync 同步代码

repo sync [PROJECT_LIST]

常用参数:

  • -j:开启多线程同步操作,这会加快sync命令的执行速度。该参数在default.xml中有默认设置。

  • -c, –current-branch:只同步指定的远程分支。默认情况下,sync会同步所有的远程分支。

不常用参数:

  • -d, –detach:脱离当前的本地分支,切换到manifest.xml中设定的分支。

  • -f, –force-broken:当有git库sync失败了,不中断整个同步操作,继续同步其他的git库。

  • –no-clone-bundle:在向服务器发起请求时,为了做到尽快的响应速度,会用到内容分发网络(CDN, Content Delivery Network)。

命令说明:

下载远程代码,并将本地代码更新到最新,这个过程称为“同步”。如果不使用任何参数,那么会对所有repo管理的git仓进行同步操作;也可以通过使用PROJECT_LIST参数,指定若干要同步的PROJECT。 根据本地git库代码不同,同步操作会有不同的行为:

  • 当本地的git库是第一次触发同步操作时。该命令等价于git clone,会将远程git库直接拷贝到本地。

  • 当本地已经触发过同步操作时。该命令等价于git remote update && git rebase origin/<BRANCH>,<BRANCH>就是当前与本地分支所关联的远程分支。在代码合并时可能会产生冲突,当冲突出现时,只需要解决完冲突,然后执行git rebase --continue即可。

3.repo upload 上传代码

repo upload [PROJECT_LIST]

命令说明:

将本地的新增或者修改代码上传到远程服务器。upload命令首先会找出本地分支从上一次同步操作以来发生的改动,然后会将这些改动生成Patch文件,上传至Gerrit服务器。 如果没有指定PROJECT_LIST,那么upload会找出所有git库的改动;如果某个git库有多个分支,upload会提供一个交互界面,提示选择其中若干个分支进行上传操作。

执行repo upload之前,需保证代码已经commit

不常用参数:

  • -re

当有多个git库的改动提交时,为了避免在网页上频繁的填选Reviewer这种重复劳动, upload提供了–re, –reviewer参数,在命令行一次性指定Reviewer。

4.repo forall 多仓执行

repo forall [PROJECT_LIST] -c <COMMAND>

常用参数:

  • -c:后面可以带的任何可以被系统支持的shell命令

  • -p:在shell命令输出之前列出项目名称

  • -v:列出执行shell指令输出的错误信息

该命令还可以添加环境变量:

环境变量参数:

  • REPO_PROJECT:指定项目的名称

  • REPO_PATH:指定项目在工作区的相对路径

  • REPO_REMOTE:指定项目远程仓库的名称

  • REPO_LREV:指定项目最后一次提交服务器仓库对应的哈希值

  • REPO_RREV:指定项目在克隆时的指定分支,manifest里的revision属性

如果-c后面的shell指令是上述的环境变量,则需要用单引号把shell命令括起来使用。

打标签:

repo forall -c git tag 标签名

5.repo start 创建并切换分支

repo start <BRANCH_NAME> [<PROJECT_LIST>]

repo start 的实质就是对git checkout -b 的封装

常用参数:

  • --all:对所有的PROJECT都执行分支切换操作

6.repo checkout 切换分支

repo checkout <BRANCH_NAME> [<PROJECT_LIST>]

该命令实际是对git checkout命令的封装。检出之前由repo start创建的分支。

7.repo status 状态查询

repo status [<PROJECT_LIST>]

用于查看指定仓的工作空间,类似于git status,如果不添加参数,则是查看所有仓 。

说明:

每个小节的第一行显示的是项目名称和所在的分支名称

每个小节的第二行的第一个字母表示暂存区文件修改的状态

  • -:没有改变

  • A:添加(不在HEAD中,在暂存区中)

  • M:修改(在HEAD中,在暂存区中,内容不同)

  • D:删除(在HEAD中,不在暂存区)

  • R:重命名(不在HEAD中,在暂存区,路径修改)

  • C:拷贝(不在HEAD中,在暂存区,从其他文件拷贝)

  • T:文件状态改变(在HEAD中,在暂存区,内容相同)

  • U:未合并,需要冲突解决

每个小节的第二行的第二个字母表示工作区文件的更改状态

  • -:新/未知(不在暂存区,在工作区)

  • m:修改(在暂存区,在工作区,被修改)

  • d:删除(在暂存区,不在工作区)

8.repo branchs 分支查询

repo branches [<PROJECT_LIST>]

命令说明:

读取各个项目的分支列表并汇总显示。可指定只读取某一项目的列表。

9.repo diff 文件对比

repo diff [<PROJECT_LIST >]

命令说明:

该命令实际是对git diff命令的封装。用于显示各项目工作区下的文件差异,可指定只显示某一项目工作区下的文件差异。

10.repo download 下载代码

repo download <TARGET> <CHANGE>

命令说明:

download是从Gerrit下载改动代码。

  • <TARGET>:指定要下载的PROJECT,譬如Tapp/eCommApp

  • <CHANGE>:指定要下载的改动内容的change_number

11.repo prune 删除合并分支

repo prune [<PROJECT_LIST>]

命令说明:

删除指定PROJECT中,已经合并的分支。当在开发分支上代码已经合并到主干分支后,使用该命令就可以删除这个开发分支。随着时间的演进,开发分支会越来越多,在多人开发同一个git库,多开发分支的情况会愈发明显,假设当前git库有如下分支:

* master
​
  dev_feature1_201501   # 已经合并到master
​
  dev_feature2_201502   # 已经合并到master
​
  dev_feature3_201503   # 正在开发中,还有改动记录没有合并到master

那么,针对该git库使用prune命令,会删除dev_feature1_201501和dev_feature2_201502。

12.repo stage 添加文件至暂存区

repo stage –i [<PROJECT_LIST >]

命令说明:

该命令实际是对git add --interactive命令的封装,用于将项目工作区中的改动添加到暂存区。

13.repo abandon 删除分支

repo abandon <branchName> [<PROJECT_LIST > ]

命令说明:

该命令实际是对git branch -D命令的封装。作用是删除分支。

14.repo manifest 查看manifest

repo manifest -r -o %s_manifest.xml

常用参数:

  • -r:保存当前分支revisions。

  • -o NAME.xml:输出xml文件名。

命令说明:

用于显示manifest文件内容。

15.repo version 查看版本号

命令说明:

用于显示repo版本号。

有关repo命令大全的更多相关文章

  1. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  2. 7个大一C语言必学的程序 / C语言经典代码大全 - 2

    嗨~大家好,这里是可莉!今天给大家带来的是7个C语言的经典基础代码~那一起往下看下去把【程序一】打印100到200之间的素数#includeintmain(){ inti; for(i=100;i 【程序二】输出乘法口诀表#includeintmain(){inti;for(i=1;i 【程序三】判断1000年---2000年之间的闰年#includeintmain(){intyear;for(year=1000;year 【程序四】给定两个整形变量的值,将两个值的内容进行交换。这里提供两种方法来进行交换,第一种为创建临时变量来进行交换,第二种是不创建临时变量而直接进行交换。1.创建临时变量来

  3. ruby-on-rails - rbenv:从 RVM 移动到 rbenv 后,在 Jenkins 执行 shell 中找不到命令 - 2

    我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions

  4. ruby - 从 Ruby : capturing the output while displaying the output? 运行 shell 命令 - 2

    我有一个问题。我想从另一个ruby​​脚本运行一个ruby​​脚本并捕获它的输出信息,同时让它也输出到屏幕。亚军#!/usr/bin/envrubyprint"Enteryourpassword:"password=gets.chompputs"Hereisyourpassword:#{password}"我运行的脚本文件:开始.rboutput=`runner`putsoutput.match(/Hereisyour(password:.*)/).captures[0].to_s正如您在此处看到的那样,存在问题。在start.rb的第一行,屏幕是空的。我在运行程序中看不到“输入您的密

  5. ruby - 是否有将图像文件转换为 ASCII 艺术的命令行程序或库? - 2

    有这样的事吗?我想在Ruby程序中使用它。 最佳答案 试试这个http://csl.sublevel3.org/jp2a/此外,Imagemagick可能还有一些东西 关于ruby-是否有将图像文件转换为ASCII艺术的命令行程序或库?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6510445/

  6. ruby - 在 Ruby 的 if 语句中检查 bash 命令 - 2

    如何在Ruby的if语句中检查bash命令的返回值(true/false)。我想要这样的东西,if("/usr/bin/fswscell>/dev/null2>&1")has_afs="true"elsehas_afs="false"end它会提示以下错误含义,它总是返回true。(irb):5:warning:stringliteralincondition正确的语法是什么?更新:/usr/bin/fswscell寻找afs安装和运行状态。它会抛出这样的字符串,Thisworkstationbelongstocell如果afs没有运行,命令以状态1退出 最

  7. ruby - 可以正常中断的来自 Rake 的长时间运行的 shell 命令? - 2

    在几个项目中,我希望有一个类似rakeserver的rake任务,它将通过任何需要的方式开始为该应用程序提供服务。这是一个示例:task:serverdo%x{bundleexecrackup-p1234}end这行得通,但是当我准备停止它时,按Ctrl+c并没有正常关闭;它中断了Rake任务本身,它说rakeaborted!并给出堆栈跟踪。在某些情况下,我必须执行Ctrl+c两次。我可能可以用Signal.trap写一些东西来更优雅地中断它。有没有更简单的方法? 最佳答案 trap('SIGINT'){puts"Yourmessa

  8. ruby - Capistrano 中的执行、测试和捕获命令有什么区别? - 2

    关于SSHkit-Github它说:Allbackendssupporttheexecute(*args),test(*args)&capture(*args)来自SSHkit-Rubydoc,我明白execute实际上是test的别名?test之间有什么区别?,execute,capture在Capistrano/SSHKit中我应该什么时候使用? 最佳答案 执行只是执行命令。使用非0退出引发错误。测试方法的行为与execute完全相同,但是它返回bool值(true如果命令以0退出,而false否则)。它通常用于控制任务中的流程

  9. ruby - 如何在 Ruby 中执行 Windows CLI 命令? - 2

    我在目录“C:\DocumentsandSettings\test.exe”中有一个文件,但是当我用单引号编写命令时`C:\DocumentsandSettings\test.exe(我无法在此框中显示),用于在Ruby中执行命令,我无法这样做,我收到的错误是找不到文件或目录。我尝试用“//”和“\”替换“\”,但似乎没有任何效果。我也使用过系统、IO.popen和exec命令,但所有的努力都是徒劳的。exec命令还使程序退出,这是我不想发生的。提前致谢。 最佳答案 反引号环境就像双引号,所以反斜杠用于转义。此外,Ruby会将空格解

  10. ruby - 将命令行上的变量传递给 Cucumber 测试 - 2

    我正在尝试将cucumber项目的用户名和密码置于版本控制之外。有没有办法在命令行上手动将用户名和密码等变量传递给Cucumber脚本?我的备份计划是将它们放在一个YML文件中,然后将该文件添加到gitignore,这样它们就不会被置于版本控制中。 最佳答案 所以,我看到了您对铁皮人的评论,答案是肯定的。cucumberPASSWORD=my_passwordPASSWORD被设置为环境变量,您可以通过将其引用为ENV['PASSWORD']来使用它的值。例如,browser.text_field(:id=>'pwd').setEN

随机推荐